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 サンドボックスの探索

推薦する

HTML 文法百科事典_HTML 言語文法百科事典 (必読)

ボリュームラベル、プロパティ名、説明002 <! - - ... - -> コメント00...

あなたが知らない Linux KDE アプリケーション 11 選

翻訳Kool Desktop Environment の略称。 Linux、Unix、FreeBSD...

MySQLスレーブのメンテナンスに関する経験の共有

序文: MySQL マスター/スレーブ アーキテクチャは、最も一般的に使用されるアーキテクチャ セッ...

SASSで変数のデフォルト値を使用する方法

SASS で定義された変数では、後で設定された値によって古い値が上書きされます。 $色: 赤; $色...

Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)

序文ますます便利になった今日のインターネット社会では、さまざまなインターネット ランサムウェア ウイ...

CentOS 8で自動更新を設定するための手順を完了する

データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...

Dockerデーモンのセキュリティ設定項目の詳細な説明

目次1. テスト環境1.1 CentOS 7をインストールする1.2 Docker CE 19.03...

Svelte の Defer Transition を Vue で実装する方法

最近、Rich Harris の <Rethinking Reactivity> ビデオ...

Centos7.5 構成 Java 環境のインストール Tomcat の説明

Tomcat は Java 言語をベースにした Web サーバー ソフトウェアです。この記事では主に...

Debian システムでの自動パッケージ更新の問題を解決する方法

いつから始まったのかはわかりませんが、コンピュータの電源を入れてインターネットに接続するたびに、デー...

mysqlを使用して、URLから返されたhttp GETリクエストデータを記録します。

ビジネスシナリオの要件と実装ロジックの分析ビジネスでは、HTTP GET を使用してデータを要求する...

CSSはマウスが画像に移動したときにマスク効果を実現します

1.マスクレイヤーのHTMLコードと画像をdivに配置する.img_div に入れました。 <...

Docker ベースの Jenkins のデプロイに関する詳細なチュートリアル

このドキュメントを作成した当時は2019年12月頃で、er2.200が最新バージョンでした。 1.画...

MysqlクエリJSON結果に関連する関数の概要

JSON 形式のフィールドは、MySQL 5.7 で追加された新しい属性ですが、基本的には文字列とし...

Linux サーバーでの MySQL インストール情報の表示

mysql のインストール情報を表示します。 #ps -ef | grep mysql usr/bi...