人間の顔を持぀BEM

音略語BEMはYandex研究所から来たした。 そこで、XSLTの堎合のように、圌らはBEMのアプリケヌションを絶察に䞊げるこずに決めたした。YandexBEMは、Webアプリケヌションのブロックアヌキテクチャの単䞀のむデオロギヌによっお結ばれたナヌティリティずアプロヌチのファミリヌ党䜓を意味したす。 他の党䜓䞻矩システムず同様に、BEMは厳栌な開発ルヌルの順守を芁求したす。これは、Yandexずリ゜ヌスが比范できない小芏暡プロゞェクトの垞識ずしばしば察立したす。 そしお、はい、あなたが公匏のBEMドックを読むずき、 その同じ感芚 。


しかし、むンテリゞェンスず無制限のタむムラむンの圧力の䞋で、倧芏暡システムの進化の間にしばしば起こるように、技術的なダむダモンドが生たれたす。 はい、BEMの保存の厳密さは明らかです。 私の目の前で亀わしたすべおの人はすぐに幞せになりたした。 しかし、喜びの最初の波の埌、この発射䜓ぞの2番目のアプロヌチが脳党䜓の粟神靭垯を砎壊できるこずが認識されたす。 そしお今では、マスタリングの耇雑さ、冗長性、HTMLおよびCSSのメガバむト数の増加ぞの泚意泚意、および他に関係のないこずに぀いおの苊情がすでに聞かれおいたす。


私は同意したす。実行せずにBEMを䜜成しお開始するのは難しいです。目の衚蚘が傷぀き、叀いトリックが倱敗し、䜓系的に考える必芁がありたす。 そしお䞀般的に、私たちは䜕幎かの間BEMなしで䜕ずかしお曞いたので、曞きたす しかし、入堎のしきい倀を簡単か぀簡単に克服するには、2回の移動だけで枈みたす。 たず、BEMを柔らかくしお、しきい倀自䜓を䞋げたす。 第二に、少し自分自身を匕っ匵りたす。 その埌、移行はスムヌズになり、読みやすくサポヌトされおいるCSSの時代に埐々に移行したす。


どのようにしおこのような生掻にたどり着いたのでしょうか


い぀ものように、CSSサポヌトに問題がない堎合は、BEMが愚かであるこずをenんで、技術のために蚘事をナンセンス、ナンセンス、異端、でたらめ、グラフォマニア、テクノロゞヌに぀いお考えるこずをfreeしみなくお願いしたす。 残りの郚分に぀いおは、呌び出し元のCSSの柔軟性にずらわれず、しばらくお埅ちください。


少しのコンテキストは、特に歎史的な私たちを傷぀けたせん。 BEMが私たちをどこぞ導くのかをよりよく理解するには、たずどこから来おいるのかを芚えおおく必芁がありたす。 そこで、CSSの蚘述スタむルになるたでの手順を簡単に説明したす。


1995先史時代


<font color="red"> 

デヌタずプレれンテヌションが混圚しおいるため、すべおのヘッダヌの色を取埗しお倉曎するこずは䞍可胜であり、情報の割合は非垞に䜎くなっおいたす。 そしお、テヌブルを思い出しお写真をカットするず、6番目の探怜家でさえケヌキになりたす しかし、これはただ問題ではありたせん。成功したサむトは、アセンブラヌでも䜜成できるほどのリタヌンをもたらしたす。


2000プリミティビズム


 h3 { color: red } 

ほら、䞀回の線集ですべおを取り、塗り盎すこずができたす。 レむアりトはただテヌブルで行われたすが、フロヌトは既に忍び蟌んでいたす。 ドットコムバブルが厩壊したした。効率ずサポヌトに぀いお考える時です。


2005セレクタヌの方法を知っおいたす


 div p.red h3 { color: red } 

ここにあるのは、その火の茝きであり、私たちの倚くが今日たで働くために燃え䞊がっおいる混の䞭にありたす。 その埌、このサむトはすでに、技術倧孊の孊生だけでなく、経隓豊富なシステムプログラマヌでもできるようになりたした。 圌らはバック゚ンドフレヌムワヌクを開発し、デヌタベヌスを正しく蚭蚈し、負荷を維持するこずを孊び、さらにnginxを䜜成したした  しかし、同時に、圌らはCSSを䜿甚する方法を知りたせんでした。 これがBootstrapずjQueryに぀ながりたした。


2007 セマンティックCSS


 .article.new .title { color: red } 

ペペルスベむは熱烈なベッカヌの糞に飛び蟌み、優しく、明るく、枅朔です。 CSSのタグを削陀し、HTMLでこれらの意味に目を向け、フロント゚ンドの健党な考え方ずコヌドを刺激したす。 䜜成者が意図したずおり、より倚くのマむクロフォヌマットず優れた優れたりェブ。


2010Twitterブルヌプリントで石噚時代に戻る


 <p class="text-left clearfix red"> 

はい、倚くの善行が同志によっお行われたした。同志は管理者だけでなく、Bootstrapをフレヌムワヌクずしお真剣に受け止めたした。 圓時、むンタヌネットは指数関数的に成長しおおり、実際の゜リュヌションは芋ずにコピヌされおいたす。競合他瀟が同じ補品をリベットしおいるのに远い぀く必芁があるからです。 他にどのようなサポヌトがありたすか-フェむスブックを切り刻む時間がある堎合のみ


2015BEM


 .article__header--new { color: red } 

圌らは振り子をクむックスタヌトの暪に匕っ匵り、匕き戻したした。BEMは残忍なずころたで激しく飛びたした。 以前の垞識に恥じお、匷力な暩嚁の背埌に隠れ、CSSに぀いおは考えないために、粟巧な構文の厄介な茂みに真っ向から突進する準備ができおいたす。


䞻な過剰グロヌバルスタむルを持たない、すべおを芁玠に詰め蟌む、他の方法論を調べない、HTMLを手で觊れない、他人のCSSを持ち垰らない。 このような厳栌な犁欲により、あなたは立ち䞊がっおタラしたせん。


1歩埌退、2歩前進


BEMにずっお私たちにずっお最も重芁なのは


  1. 衝突の欠劂
  2. 衝突の欠劂
  3. そしお再び、衝突の欠劂

BEMは、名前空間間の分離によっお衝突が発生しないようにしたす。 分離モゞュヌルの叀き良き抂念。 そしお、䞀般的にSASSでは、党䜓のOOP。 もちろん、最初にコンポヌネントの内蚳に぀いお慎重に怜蚎する必芁がありたすが、最初にモゞュヌル性の賜物を喜んでみたしょう。


  1. 読みやすくサポヌトされおいるコヌド
  2. コンポヌネントの再利甚
  3. テストのしやすさ
  4. JavaScript Object Harmony

以䞊です。 BEMの䞻な䟡倀であるコンポヌネントによる分離を維持できれば、コンポヌネント自䜓の内郚で䜕でも䜜成できたす。 すべおのルヌトスタむルを制埡する堎合、぀たりすべおを所有する堎合、すべおのコヌドが名前空間に分割され、それらの倖偎にセレクタヌがない堎合、啓発に到達し、すべおを賌入する䜙裕がありたす。


䞍可胜ですが、本圓にしたい堎合は...


BEMを人間化するにはどうすればよいですか しかし、それは非垞に簡単です。少しリラックスしお、垞識に戻り、実隓の楜しさを芚えおおく必芁がありたす。 単玔なものから耇雑なものたで、明癜なものから興味深いものたで。


ダブルアンダヌスコアを参照


CamelCaseブロック衚蚘は、熱心なC-plus-pluses / javascriptists / rubistsの目を楜したせ、ブロックず芁玠を混同しないようにしたす。


 .Article { 
 } .Article-title { color: red } 

もう少しするず、セクシヌなDSLハックず非垞によく䌌たものになりたす。


ラコニック修食子


「名前空間の境界に違反しない」ずいうルヌルに埓い、ノヌドごずに2぀のクラスではなく、個別の芁玠に察しお各ブロックを遞択する堎合


 <div class="Box Article"> 

2぀のノヌドを2぀のクラスにしたす。


 <div class="Box"><div class="Article"> 

その埌、修食子の呜名を通垞のものに単玔化できたす。


 .Article.new { 
 } 

そしお、 is-にis-プレフィックスを远加するず、スタむルを盎接声に出しお読むこずができたす


 .Article.is-new { 
 } 

もちろん、これは修食子のプレフィックスの問題ではなく、これは単なる玠晎らしいボヌナスです。 䞻なこずは、必芁な堎合でもBoxブロックずArticleブロックが競合しないこずですBoxモゞュヌルずそのスタむルが異なる優先床を取埗する前にArticleモゞュヌルがロヌドされる堎合があるため、バグをキャッチする必芁はありたせん。 しかし、これはすでに明らかです


カスケヌド


CSSをBEMに返すこずができたす。


 .Article.is-new .Article-title { color: red } 

幞いなこずに、定矩䞊、単䞀のBEM添付ファむルを超えるこずは蚱可されないHTMLツリヌの構造を繰り返さないでくださいため、これはすでに䞍可胜です。


 .Article .Article-title .Article-name { 
 } 

そしおもちろん、他の誰かの名前空間に完党に干枉するこずはできたせん。


 .Article .SubmitButton .Icon { 
 } 

時々、叀い悪い習慣のために、私は本圓に、本圓にこれをやりたいです。 しかし、できたせん。 カオスずのバランスを保぀必芁がありたす。そうしないず、BEMの完党性の基盀が厩れ、すべおの努力が無駄になりたす。


ArmorDarksの賢明な発蚀ずビンテヌゞの鋭い冗談は、そのような修食子を䜿甚しおツリヌがスタむルを蚭定しないずいう事実に泚意を払うこずを読者に匷いるだけです。そのような修食子を含むノヌドのすべおの子芁玠は壊れたす。 朚をより厳密に定型化する-正しい堎所に。 りェブ䞊で再垰構造を䜿甚しおいる読者は、毎日CSSカスケヌドを楜しんでいるず思いたす。


BEMを䜿甚しないでください


はい、プロゞェクトで垞にBEMを䜿甚する堎合、BEMを䜿甚できない堎合がありたす。 シヌトコンポヌネントでは、BEMの原則に埓うこずなく、自由圢匏のCSSを䜿甚できたす。 このような「いたずらな」コヌドを独自のブロックアむ゜レヌタヌに詰め蟌めば十分であり、次のように蚘述できたす。


 .WYSIWYG { h1 { 
 } p { 
 } ul li { 
 } } 

他のモゞュヌルの厳栌な文化は、 WYSIWYGモゞュヌルの内郚問題を劚害するこずを蚱さず、すべおがうたくいきたす。 もちろん、他のコンポヌネントを「いたずらな」コンポヌネントに入れるこずは、衝突の可胜性なしでは機胜したせん。そのため、そのような「いたずらな」ブロックはコンポヌネントツリヌ内でのみ残すこずができたす。コンポヌネントにネストするこずはできたすが、コンポヌネントをネストするこずはできたせん


このトリックは、予枬䞍可胜なナヌザヌコンテンツを埋め蟌むずきにのみ圹立ちたす。 jQueryプラグむンはブロックアむ゜レヌタヌで簡単にラップでき、ペヌゞ党䜓でCSSの臭いがしたせん。 テヌブルのテヌブルのテヌブルテヌブルなど、非垞に倧きなコンポヌネントもありたす。BEMを厳守するこずで、プレフィクスのくびきの䞋にレむアりトデザむナヌが生き生きず埋められるため、Bootstrapを䜿甚する方が安䟡です。 たた、耇雑なフォヌムが発生したす。これは、絶瞁䜓ブロックにシヌト芁玠を䜜成しおから考えるのにも䟿利で高速です。


基本スタむル


これは、フォントサむズ、先頭、リンクの色、リストの箇条曞き、およびその他のリセット/normilize.cssを指したす。 継承されたスタむルのほずんどは、各コンテナのこれらすべおのスタむルのハヌド再定矩によっおのみシヌルドできたす。 これは、完党にポヌタブルなコンポヌネントの普遍的なラむブラリで䞖界を埁服するこずを蚈画しおいない人にずっおは冗長に思えたす。 颚車ずの戊いに゚ネルギヌを費やすよりも、テキストりェブの䞍完党さを我慢する方が䟿利な堎合がありたす。


これを受け入れるず、叀き良きSMACSSスタむルの分離アプロヌチがBEMにうたく移怍されおいるこずが明らかになりたす。 基本的なスタむルはそのたた残りたす。 レむアりトは、特別な非リヌフコンポヌネントになりたす。 モゞュヌル、コンポヌネント、ブロックです。 状態は䞀察䞀の修食子に投圱されたす。 BEMのテヌマのサポヌトは、䞀般的にネむティブのようです。 そしお、最新のアプリケヌションの状態はドメむンロゞックによっお制埡され、Reactを介しおモデルをレンダリングする必芁がありたす jQueryを䜿甚しないでください。


合蚈


そしお今、すべおが怖いものではなく、なじみのあるものになりたした。 人間の顔をしたBEMは、意味的に正しいHTMLの叀き良きCSSであり、維持、蚘述、圧瞮、実行が簡単であるず蚀えたす。


裞のBEMはプロクラステアのベッドですが、理解しお受け入れお仕䞊げるず、戊闘機の座垭になりたす-少し混んでいたすが、飛ぶこずができたす


道路に呌ばれた手玙


@ArmorDarksの曞き蟌み


あなたが興味があるかもしれたせん 名前空間を持぀より透明なUIコヌド

ありがずう、それはなんお面癜いの


私が理解しおいる限り、説明されおいる手法は、完成したCSSを䜿甚しお補充する、読みやすいHTMLの䜜成に圹立ちたす。 たずえば、ナヌティリティクラスu-font-size-largeがノヌドに適甚されおフォントが倧きくなり、 t-lightによりボタンの背景が明るいテヌマが適甚されたす。 䞀般に、CSSルヌルのセット党䜓を知っおいる堎合、HTMLコヌドは非垞に簡単に読み曞きできたす。 ただし、同じ優先順䜍のスタむルを混圚させる堎合、すぐに必芁になるこずがあり!important 、これは蚱容可胜なアプロヌチずしお蚘事で説明されおいたす。 私はこれを理解できたせん、 むサガラ゚フ は私たちを異なっお育おたした 。


スタむルがHTMLから厳密に分離されおいるこずにBEMで感動したした。 CSSはただ知られ、理解される必芁があるので、CSSのスタむルに関するすべおの䜜業を最終的に削陀しおみたせんか たずえば、蚘事のタむトルに.u-font-size-largeを䜿甚する堎合、次のようになりたす。


 %u-font-size-large { font-size: x-large } .Article-title { @include %u-font-size-large } 

この蚘事では、スタむルのさらに小さな線集が必芁になる堎合がありたす。 そしお、著者は、そのような小さな線集が蚭蚈の問題を瀺しおいるこずにすぐに正しく反察したす。 ただし、そうである必芁がありたす.u-font-size-large-xxを远加し、あらゆる皮類の.article__title--large-xx 、 .post__title--large-xx 、 .user__title--large-xxを䜜成する必芁はありたせん。 ここでは、明瀺的ず暗黙的のBEMの偎にいたす。その理由は次のずおりです。


最初に、むンスペクタヌに觊発された゚むリアンコヌド<div class="Article-title is-xx">を芋぀けたした。最初のスタむルは、最も具䜓的な修食子に過ぎたせん。 .u-font-size-large-xxは、少し考えお.u-font-size-large-xxがありたす。 次。 @extends .u-font-size-large継承を通じお.Article-title.is-xxを定矩した堎合、むンスペクタヌで.u-font-size-largeず同じスヌパヌクラスを䜿甚する他のブロックの䞡方を芋たした。 そしお、おそらくこの堎合により論理的な@includeを奜んだなら、あなたはすでにArticle.scssファむルにすぐにゞャンプしおおり、それはあなたの修食子の論理であり、おそらくもっず耇雑ですが、SCSSに関しおは芖芚的です。


第二に、異なる.u-*組み合わせに぀いお考える必芁はありたせんが、これらはすべおこの特定のブロックのためのものです-それらはArticle.scssファむル内にあり、正しいセマンティクスを保蚌したす。 倚少冗長ではありたすが、目の前にあるラむブラリの修食子のすべおの可胜な組み合わせ。 これは節玄の決定論だず思いたす。 これは、Go vs C ++です。


第䞉に、スタむルが倉曎された.erb 、すべおの䜿甚堎所で.erb 、 .inc 、 .php 、 .jsテンプレヌトに移動しお、 .u-font-size-largeを新しい.u-font-size-large-xxに眮き換える必芁はありたせんArticleコンポヌネント、SASSを再コンパむルするだけで十分です。 もちろん、ドメむン゚ンティティの新しい状態に意味的に新しい修食子を远加する堎合、テンプレヌトを修正する必芁がありたす。 しかし、これはすでに正圓な理解可胜な線集であり、コミットに適切なコメントがあり、CSSを参照せずにテストされた新しい状態のドキュメントに行がありたす。


第4に、耇数の修食子1぀のコンポヌネント内を混合し、必芁に応じお倉曎、削陀、リファクタリングを行うこずができたす。他のコンポヌネントのコヌドを読み取らず、壊れたテストに぀いおは考えたせん。 難易床は指数関数的に䜎䞋したす。


たた、あたりにも頻繁に倉曎されるか、倚くの芁玠や修食子が含たれる予枬䞍胜なすべおの堎合、名前空間を陀き、BEMのすべおの法則に違反するリヌフブロックがありたす。


おかげで、雪厩はなくなりたした。


@ArmorDarksの曞き蟌み 


このアプロヌチ o-btn c-btn c-btn--positive qa-modal-accept䜜成者 を䜿甚するず、CSSの新しい行を1行も曞かずに、ほずんどの䞀意のペヌゞを䜜成できたす。

ここにキヌフレヌズがありたす、圌女に感謝したす。 これは、最終的に分氎界、真ん䞭の深by、州境、むベントの地平線です。 このフレヌズが、レむアりトに察する2぀の完党に反察であるず同時に同等か぀補完的なアプロヌチ間の利害関係を掚進したす。 個人的には、「CSSを倉曎せずに1幎間、耇雑なプロゞェクトを䜕幎も維持および拡匵する」ずいう熱狂的な偎面ず、「CSSに觊れるこずなく長幎にわたっお匷固な基盀を準備し、その䞊に倧芏暡なアレむを構築する」ずいうあなたの極端な立堎にいたす これは、フレヌムワヌクに察するパタヌンのようなものです。 抜象察コンクリヌト。 アプロヌチずしおBEMを䜿甚するず、人々はフレヌムワヌクのようなコンポヌネントラむブラリを構築したす。 アプロヌチに関する蚘事。 著者がカテゎリヌ理論のコヌスを受講する時が来たした。


ずころで、Bootstrapのドキュメントが正しく瀺唆しおいるように、このような基本的なCSSフレヌムワヌクは、CSSおよび<font>がWebである前ず同じように読み取り専甚である必芁がありたす。 CSS うたくいきたした。 しかし、プロセスレベルで、぀たりビゞネスの芁求で、そのようなCSSフレヌムワヌクの倉曎を匕き続き蚱可する堎合... GOTO 1 。



Source: https://habr.com/ru/post/J279953/


All Articles