CSS仕様 BEM CSSとOOCSSサンプルコード詳細説明

CSS仕様 BEM CSSとOOCSSサンプルコード詳細説明

序文

プロジェクト開発中、各人のコーディング習慣が異なるため、記述された CSS コードは十分に構造化されておらず、整然とした意味に欠けています。誰もが日常のコーディングで BEM CSS や OOCSS のアイデアを使用したことがあるはずですが、体系的な理解や完全に標準化された使用法はありません。

BEM(ブロック、要素、修飾子)CSS入門

BEM はフロントエンドの命名規則です。名前が示すように、ページを意味的に豊かなブロックに分割します。ブロックはネストすることができ、コネクタを使用してモジュールと要素の状態の関係を表し、モジュール式で再利用可能、保守性が高く構造化された CSS コードを生成します。

ブロック

要素

修飾子

独立した意味のあるエンティティ (例: ヘッダー、コンテナー、メニュー、チェックボックスなど)。

ヘッダータイトル、メニュー項目、リスト項目など、ブロックの一部であり、独立した意味を持ちません。

ブロックまたは要素の外観、動作、または状態を変更するために使用できるフラグ。disabled、checked、fixed

命名規則

子孫ブロックまたは要素は二重アンダースコア __ で接続し、修飾子は二重ハイフン -- で接続します。

CSSを通じてHTMLコード構造を完全に復元できます

結論は

プログラマーにとって最大の難関は何か ==> 命名。日常の開発では、自分のスタイルが他のスタイルによって上書きされることにも遭遇します。その理由のほとんどは、名前の競合です。BEM はまさにこの問題を解決します。外側のスタイル名が意味を持ち、独立していて一意であればよく、その子孫はコンテンツやタイトルなどを安全に使用して接続できます。 (お母さんはもう私が何かに名前を付けられないことを心配する必要はありません)

利点: 明確な構造とセマンティクス。

デメリット: HTML 構造が深くネストされている場合、クラス名が長くなります。

OOCSS (オブジェクト指向 CSS) 入門

OOCSS は合意された命名規則ではなく、オブジェクト指向のアイデアです。私たちは皆、オブジェクト指向の考え方に精通しています。これは、モジュールをオブジェクトに抽象化します。その核心は、最も簡潔でクリーンな CSS コードを最も簡単な方法で記述し、コードの再利用性、保守性、拡張性を高めることです。

中心的なアイデア:

  • HTML構造への依存を減らす
  • CSSクラスの再利用を増やす

原則として

HTML構造への依存を減らす

一般的に、 <a>タグのスタイルを定義する場合、CSS は.nav__main ul li a {}と記述されます。パフォーマンスの問題に関係なく、このアプローチは要素タグの構造に過度に依存しています。HTML 構造が変更されると、CSS をリファクタリングする必要があり、追加のメンテナンス コストが発生します。OOCSS では、a タグにクラス.nav__main__itemを追加することを推奨しています。

CSSクラスの繰り返しの使用を増やす

OOCSS を使用する前は、このようなスタイルで記述するかもしれません。この方法の欠点は、重複したコードがあらゆる場所で見つかるため、メンテナンスが非常に面倒になることです。

共通スタイルを分析して抽象化し、再利用可能なフォント スタイルを提案できます。

結論は

OOCSS で最も重要なことは、プロジェクトのページから「オブジェクト」コンポーネントを分析して抽象化し、これらのオブジェクトの CSS ルールを作成して改善することです。その後、プロジェクトに新しいページを作成する場合でも、モジュールに要素を追加する場合でも、スタイルを少し書き直すだけで済みます。

BEMとOOCSSの組み合わせ

商品の重量を表示するコンポーネントを開発します。通常私たちが書くコードは次のようなものになるかもしれません。

問題ないように見えますが、保守性とシンプルさが非常に劣っています。 BEM と OCCSS を使用すると、コードを次のように変換できます。

以前のソリューションと比較すると、命名は長くなりますが、CSS クラス名が重複しないこと、スタイルが HTML 構造に依存しないこと、クラスの再利用が BEM と OOCSS の核となる考え方であることが保証されます。

要約する

BEM は命名規則であり、OOCSS は CSS の設計概念です。実際、BEM も OOCSS の概念を使用しています。

CSS コードの量が増えるにつれて、開発チームの規模もそれに応じて大きくなってきました。 CSS 開発チームでは、統一された固定された CSS コードの構成と管理の標準が必要です。不足している部分があれば、誰でも追加できます。

CSS仕様BEM CSSとOOCSSのサンプルコード詳細に関するこの記事はこれで終了です。CSS仕様BEM CSSとOOCSSの関連コンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

<<:  HTMLページ間で値を渡す問題の解決策

>>:  jsonファイルの書き方の詳細説明

推薦する

MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...

CSS3のtransform属性で実装される4つの機能

CSS3 では、transform 関数を使用して、テキストや画像の回転、拡大縮小、傾斜、移動という...

トリガーメソッドを使用して、ファイルタイプの入力をクリックせずにポップアップファイル選択ダイアログボックスを実現します。

トリガー メソッドを使用できます。JavaScript にはネイティブのトリガー関数はありません。自...

Windows10 mysql 8.0.12 非インストール版 設定 起動方法

この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...

ページ内の検索エンジンの呼び出しはBaiduを例に挙げています

今日、突然、自分のウェブページで Google や Baidu のような強力な検索エンジンを呼び出す...

Mysql 8.0.17 winx64バージョンのインストール中に発生した問題を解決する

1. my.iniファイルを手動で作成して追加する # クライアントセクション # --------...

Vue で lodop 印刷コントロールを使用してブラウザ互換の印刷を実現する方法

序文このコントロールを直接印刷すると下部に透かしが入りますが、公式 Web サイトから購入することで...

6秒でMySQLに100万件のレコードを挿入する方法を教えます

1. アイデアMySQL に 1,000,000 件のレコードを挿入するのにたった 6 秒しかかかり...

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

DockerでSpringbootプロジェクトを実行する方法

1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...

node.js の require メソッドの読み込みルールの詳細な説明

require メソッドの読み込みルールキャッシュからの読み込みを優先するコアモジュールパス形式のモ...

スライダー効果を実装するミニプログラム

この記事の例では、スライディングブロック効果を実現するための小さなプログラムの具体的なコードを参考ま...

Linux でのログ サーバーの設定に関するグラフィック チュートリアル

序文この記事では、Linux 構成ログ サーバーに関する関連コンテンツを主に紹介し、参考と学習のため...

CentOS 7のインストールと設定方法のグラフィックチュートリアル

この記事は、CentOS 7の詳細なインストールチュートリアルを参考のために記録します。具体的な内容...

Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)

1. バックグラウンド実行一般的に、Linux 上のプログラムは .sh ファイル (./sh フ...