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はブラウザを閉じるときにアカウントのログアウトを処理します

推薦する

MySQL 8.0 アトミック DDL 構文の詳細な説明

目次01 アトミックDDLの紹介02 一部のDDL操作の実行動作の変更03 DDL 操作のログを表示...

CSSアダプティブレイアウトは、サブ要素項目の全体的な中央揃えと内部項目の左揃えを実現します。

日常業務では、次のようなレイアウトに遭遇することがあります。親要素のフレーム (ブラウザのサイズに応...

Linux ソースコードの解析 epoll

目次1. はじめに2. シンプルなepollの例2.1、epoll_create 2.2、構造体イベ...

CSS は Apple のスムーズなスイッチ ボタン効果を模倣します

目次1. コード分析2. ソースコードソースコード1. コード分析1.1 HTMLコード分析 <...

HTML テーブル マークアップ チュートリアル (5): ライト ボーダー カラー属性 BORDERCOLORLIGHT

表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...

Nginx の add_header ディレクティブに注意する必要があるのはなぜですか?

序文ご存知のとおり、nginx 構成ファイルは add_header ディレクティブを使用して応答ヘ...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

vue+echarts で中国地図のフロー効果を実現する (詳細な手順)

@vue+echarts は中国地図のフロー効果を実現します#レンダリングを見てみましょう手順:コ...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...

Nginxサービス500:内部サーバーエラーの原因の1つ

500 (内部サーバー エラー) サーバーでエラーが発生したため、要求を完了できませんでした。 50...

ウェブレスポンシブレイアウトにおけるiframe適応の方法

問題<br />レスポンシブ レイアウトでは、iframe 要素に注意する必要があります...

antd ツリーと親子コンポーネント間の値転送問題について (React のまとめ)

プロジェクト要件: 製品ツリー ノードをクリックすると、そのノードのすべての親ノードが取得され、表に...

React は入力値を取得し、2 つのメソッドの例を送信します

方法1: DOMが提供するイベントオブジェクトのターゲットイベント属性を使用して値を取得し、送信する...

MYSQLはUnionを使用して2つのテーブルのデータを結合し、表示します。

UNION演算子の使用union : 2 つ以上の SELECT ステートメントの結果を 1 つの...

JavaScript の find() メソッドと filter() メソッドの違いのまとめ

目次序文JavaScript find() メソッドJavaScript filter() メソッド...