CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命名が問題になります。命名の問題に対する解決策をいくつか紹介します。

1. 境界要素法

名前は .block__element--modifier の形式です。名前には意味があります。ブロックはモジュールとみなされ、一定のスコープを持ちます。

.dropdown-menu__item--アクティブ

2. スコープ付きCSS

参考: vue-loader.vuejs.org/zh/guide/sc…

目標: 現在のコンポーネントスタイルは他のコンポーネントに影響を与えません

コンポーネントのDOMノードに固有の属性を追加し、スタイルタグのCSSをその属性に合わせて変換し、CSSのスコープを制限します。

<スタイルスコープ>
。例 {
  色: 赤;
}
</スタイル>
 
<テンプレート>
  <div class="example">こんにちは</div>
</テンプレート>

変換結果:

<スタイル>
.example[データ-v-f3f3eg9] {
  色: 赤;
}
</スタイル>
 
<テンプレート>
  <div class="example" data-v-f3f3eg9>こんにちは</div>
</テンプレート>

3. CSSモジュール

参考: vue-loader.vuejs.org/zh/guide/cs…

CSS セレクターを一意の文字列に変換し、DOM に適用します。アルゴリズムによって命名され、人間による命名からアルゴリズムによる命名へのマッピングテーブルが記録される。

<スタイルモジュール>
。赤 {
  色: 赤;
}
</スタイル>
<テンプレート>
  <p :class="$style.red">
    これは赤であるべきだ
  </p>
</テンプレート>

変換結果:

<スタイルモジュール>
._1yZGjg0pYkMbaHPr4wT6P__1 {
  色: 赤;
}
</スタイル>
<テンプレート>
  <p class="_1yZGjg0pYkMbaHPr4wT6P__1">
    これは赤であるべきだ
  </p>
</テンプレート>

4. CSS-in-JS

参考: github.com/styled-comp…

固有のセレクターを使用して CSS コンテンツを表現します。 CSS モジュールと同じで、アルゴリズムを使用して名前が付けられます。 CSSをJSの文字列として扱い、CSSにより多くの機能を与える

<テンプレート>
  <css-in-js></css-in-js>
</テンプレート>
 
<スクリプト>
  'vue-styled-components' から styled をインポートします。
  エクスポートデフォルト{
    コンポーネント:
      cssInJs: styled.div `
                色: 赤;
            `
    }
  }
</スクリプト>

変換結果:

<テンプレート>
    <div class="gXTzCp"></div>
</テンプレート>
<スタイル>
.gXTzCp {
    色: 赤;
}
</スタイル>

V. 結論

  1. BEM は命名規則を定め、意味のあるものにします。ブロックはモジュールとして考えられ、特定の範囲を持ちます。
  2. スコープ付き CSS は、名前に関係なく、CSS のスコープを制限します。複数のテーマに適応できない
  3. CSS モジュールはアルゴリズムによる命名を使用するため、名前の競合がなくなり、CSS の範囲が制限されます。複数のテーマに適応できない
  4. CSS-in-JS はアルゴリズムによる命名を使用し、CSS モジュールの利点を備えています。同時に、CSSはJSの文字列とみなされ、CSSにより多くの機能を与える。

CSS 命名に関するこの記事はこれで終わりです: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS。CSS 命名に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  デザイナーと開発者に役立つ 9 つの超実用的な CSS のヒント

>>:  jsはブラウザを閉じるときにアカウントのログアウトを処理します

推薦する

VMWare仮想マシンのcentosの時間が現地時間と矛盾する問題を解決する

VM Ware 仮想マシン CentOS の時刻は、次の図に示すように、現地時間と一致しません。おそ...

シンプルなショッピングカート機能を実現するjs

この記事の例では、簡単なショッピングカート機能を実現するためのjsの具体的なコードを参考までに共有し...

Linux 7.6 バイナリに MySQL 8.0.27 をインストールする詳細な手順

目次1. 環境整備1.1 オペレーティング システムのバージョン1.2 ディスク容量1.3 ファイア...

MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.17のインストールと設定のグラフィックチュートリアルを記...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...

InnoDB ロック (レコード、ギャップ、Next-Key ロック) の詳細な説明

レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...

MySQLデータベースの基礎知識

目次1. データベースを理解する1.1 データベースとデータ構造の関係1.2 なぜデータベースが必要...

Windows 10 インストール vmware14 チュートリアル図

ソフトウェアのダウンロードソフトウェアのダウンロード リンク: https://pan.baidu....

Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明

一時テーブルとメモリテーブルメモリ テーブルとは、メモリ エンジンを使用するテーブルを指します。テー...

Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

この記事では、1枚以上の写真をアップロードするためのVant Uploaderコンポーネントを紹介し...

フォーム要素属性の読み取り専用と無効の使用の比較

1) 適用範囲:読み取り専用:input[type="text"],input[...

Nginx セッション損失問題の解決策

nginx をリバース プロキシ tomcat として使用する場合、セッション損失が発生する可能性が...

MySQLクエリ条件のnot inとinの違いと理由

まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...

JavaScript演算子の使用に関するヒントをいくつか共有します

目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...

OR キーワードを使用した MySql 複数条件クエリ ステートメント

前の記事では、And キーワードを使用した MySql の複数条件クエリ ステートメントを紹介しまし...