CSS BEM 記述標準の詳細な説明

CSS BEM 記述標準の詳細な説明

BEM は、Web 開発に対するコンポーネントベースのアプローチです。ユーザー インターフェイスを独立したブロックに分割し、複雑な UI インターフェイスをより簡単かつ迅速に開発し、コピー アンド ペーストせずに既存のコードを再利用できるようにするというアイデアです。 BEM は、ブロック、要素、および修飾子で構成されます。セレクターでは、関係を拡張するために次のコネクタが使用されます。

  • `__: 二重アンダースコアはブロックとそのサブ要素を接続するために使用されます
  • ` : ブロック、要素、または修飾子の複数の単語を接続するハイフンとしてのみ使用されます (キャメルケースで直接記述することもできます)
  • --: ブロックまたは要素の状態を接続するには、二重ハイフンを使用します (単一のアンダースコアも使用できます)

例:

ブロック名_修飾子名
ブロック名__要素名--修飾子名
ブロック名_修飾子名--修飾子値
ブロック名__要素名--修飾子名--修飾子値

基本概念

ブロック

コード スニペットは再利用でき、このコードは他のコンポーネントに依存しません。つまり、ブロックを使用できます。ブロックは任意の深さまで相互にネストできます。
特徴:

  • ブロックの名前はその目的を説明します。メニュー、ボタンなど
  • ブロックは環境に影響を与えることはできません。つまり、ブロックの余白や位置を設定することはできません。
  • クラス名セレクターのみ使用でき、タグセレクターや ID セレクターは使用できません。
  • ページ内の他のブロックや要素に依存しない

要素

要素はブロックの一部であり、独立して存在しません。任意の要素は意味的にブロックにバインドされます。

特徴:

  • ブロックに接続するには '__' を使用します。 例えば: block__item
  • 目的を説明するために使用されます。例: アイテム、テキスト
  • 要素は任意のレベルまで相互にネストできます。
  • 要素は常にブロックの一部です。したがって、block__item1__item2 のような命名は違法です。

修飾子

修飾子は、ブロックまたは要素上のタグです。これらを使用して、スタイル、動作、または状態を変更します。ブロックまたは要素のコネクタは '--' です。

応用

ブロックを他のブロックに対して相対的に配置

最善のアプローチは、ブロックと要素を組み合わせて使用​​することです。ブロック上で余白と位置を設定できない問題を解決します。

例:

<body class="page">
    <!-- ヘッダーとナビゲーション-->
    <header class="header page__header">...</header>

    <!-- フッター -->
    <footer class="footer page__footer">...</footer>
</本文>
.page__header {
    パディング: 20px;
}

.page__footer {
    パディング: 50px;
}

ブロック内の要素の配置

ネスト化は、ブロックの追加の子要素を作成することによって実現されます。

例:

<body class="page">
    <div class="page__inner">
      <!-- ヘッダーとナビゲーション-->
      <header class="header">...</header>

      <!-- フッター -->
      <footer class="footer">...</footer>
    </div>
</本文>
.page__inner {
    右マージン: 自動;
    左マージン: 自動;
    幅: 960ピクセル;
}

命名について

セレクター名は、それが表す BEM エンティティを完全に正確に記述する必要があります。

例:

。ボタン {}
.ボタン__アイコン {}
.ボタン__テキスト {}
.button_theme_islands {}

ブロック要素を扱っていることを直接指示できます。 html では次のように使用します:

<button class="button button_theme_islands">
    <span class="button__icon"></span>

    <span class="button__text">...</span>
</ボタン>

次の CSS では、同じ判断を下すのが困難になります。

。ボタン {}
.アイコン {}
。文章 {}
.theme_islands {}

私は自分の git プロジェクト miniui で BEM 仕様を採用し、sass を使用して BEM を実装しました。ご興味がございましたら、こちらをご覧ください: https://github.com/banyaner/miniui

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  Docker を使用した Alibaba Cloud Server のインストールと、仮想マシンへのインストールで遭遇する落とし穴 (問題のまとめ)

>>:  JavaScript サンドボックスの探索

推薦する

JavaScript を使って簡単な計算機を書く

効果は以下のとおりです。参考プログラム: <!DOCTYPE html> <htm...

deepin 2014 システムに MySQL データベースをインストールする方法

Deepin 2014 のダウンロードとインストールDeepin 2014 のダウンロードとインスト...

Linux でソースインストールされたパッケージを簡単に削除する方法

ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...

JSコードコンパイラMonacoの使い方

序文私が必要としているのは、構文の強調表示、関数プロンプト、自動行折り返し、およびコードの折りたたみ...

HTML 5のドラフトは正式な標準にはならなかった

<br />昨日、W3C で新しいHTML 5 ドラフト (ワーキング ドラフト) が ...

Dockerスペースがいっぱいでコンテナに入れない場合の解決策

トラブル発生が突然で、業務も迫っていたため、現場のスクリーンショットを撮る時間がありませんでしたので...

MySQL GROUP_CONCAT 制限の解決

効果: GROUP_CONCAT関数は、フィールド値を文字列に連結することができます。デフォルトの区...

docker --privileged=true パラメータの役割についての簡単な説明

バージョン 0.6 あたりで、Docker に privileged が導入されました。このパラメー...

スクロールバーを非表示にしてコンテンツをスクロールする CSS サンプルコード

序文ページの HTML 構造にネストされたボックスが多数含まれている場合、ページに複数の垂直スクロー...

mysql バックアップ スクリプトを作成し、7 日間保存します。

スクリプトの要件: MySQL データベースを毎日バックアップし、スクリプトを 7 日間保存します。...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

HTMLメタの大きな役割

メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...

サーバー上で Nginx を使用して Springboot プロジェクトをデプロイする方法の詳細なチュートリアル (jar パッケージ)

1. Javaプロジェクトをjarパッケージにパッケージ化するここではMavenツールを使用します...