検索
ホームページウェブフロントエンドCSSチュートリアル実践的な例で CSS BEM 命名をマスターする: Pure HTML、Angular、Next.js

前の記事では、CSS の BEM 命名規則 の基本と、それがクリーンでスケーラブルなコードを維持するために重要である理由について説明しました。

今回は、実際の例を使用してさらに深く掘り下げ、さまざまな環境 (Pure HTML、Angular、Next.js) で BEM がどのように機能するかを確認します。

BEM は基本的な HTML 構造に限定されません。最新のフロントエンド フレームワークに効果的に適用できます。この記事を読み終えるまでに、さまざまな開発セットアップで BEM を実装する方法をより明確に理解できるようになります。

例 1: 純粋な HTML での BEM の使用

この例では、ユーザーのオンラインまたはオフラインのステータスに基づいてスタイルを動的に変更するユーザー プロファイル カードを作成します。これは、要素が状態や条件に基づいて変更される必要がある実際のアプリケーションで一般的な使用例です。

HTML:

<div class="user-card user-card--offline">
  <img class="user-card__avatar lazy" src="/static/imghwm/default1.png" data-src="profile.jpg" alt="User Avatar">
  <div class="user-card__info">
    <h2 id="John-Doe">John Doe</h2>
    <p class="user-card__status">Offline</p>
  </div>
</div>

CSS:

.user-card {
  display: flex;
  align-items: center;
  padding: 15px;
  border: 1px solid #ddd;
  border-radius: 10px;
  background-color: #f5f5f5;
  max-width: 300px;
}

.user-card__avatar {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  margin-right: 15px;
}

.user-card__info {
  display: flex;
  flex-direction: column;
}

.user-card__name {
  font-size: 18px;
  font-weight: bold;
  margin-bottom: 5px;
}

.user-card__status {
  font-size: 14px;
  color: #888;
}

.user-card--online {
  border-color: #4caf50;
  background-color: #e8f5e9;
}

.user-card--online .user-card__status {
  color: #4caf50;
}

.user-card--offline {
  border-color: #f44336;
  background-color: #ffebee;
}

.user-card--offline .user-card__status {
  color: #f44336;
}

説明:

  • ユーザー カードは、ユーザー プロファイル カードを表す ブロックです。
  • user-card--online や user-card-offline などの 修飾子 は、ユーザーのステータスに基づいてカードの外観を変更します。
  • user-card__avatar、user-card__name、user-card__status は、それぞれアバター、名前、ステータスを表す user-card ブロックの要素です。
  • BEM を使用すると、どのスタイルがブロックに適用されるか、またどのスタイルがユーザーのステータスに基づいて変化するかが明確になります。

例 2: Angular での BEM の適用

この Angular の例では、クリックすると読み込み状態を表示するインタラクティブなボタンを作成します。これは、ユーザーの操作や API 呼び出しに基づいてボタンの状態が変化する、フォームやインタラクティブな要素での頻繁な使用例です。

Angular コンポーネント (button.component.html):

<button class="button" isloading>
  <span>{{ buttonText }}</span>
  <span>Loading...</span>
</button>

コンポーネント スタイル (button.component.css):

.button {
  padding: 12px 24px;
  background-color: #333;
  color: #fff;
  border-radius: 4px;
  border: none;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.button--primary {
  background-color: #007BFF;
}

.button--loading {
  background-color: #666;
  cursor: not-allowed;
}

.button--loading span {
  font-size: 14px;
}

コンポーネント ロジック (button.component.ts):

import { Component, Input } from '@angular/core';

@Component({
  selector: 'app-button',
  templateUrl: './button.component.html',
  styleUrls: ['./button.component.css']
})
export class ButtonComponent {
  @Input() buttonText: string = 'Submit';
  isLoading: boolean = false;

  handleClick() {
    this.isLoading = true;

    setTimeout(() => {
      this.isLoading = false;
    }, 2000);
  }
}

説明:

  • ボタン ブロックはベース ボタンを表します。
  • [ngClass] ディレクティブは、ボタンを動的に追加します (ボタンが読み込み状態の場合は読み込み、デフォルト状態の場合はボタンをプライマリ)。
  • ボタンのテキストは isLoading 状態に基づいて変化します。
  • handleClick メソッドは読み込み状態をシミュレートし、2 秒後にリセットします。これは典型的な API 呼び出しシナリオを表します。

例 3: Next.js での BEM の実装

この Next.js の例では、アクティブなページを動的に強調表示するナビゲーション メニューを作成します。これは、現在のページをナビゲーションで視覚的に示す必要がある Web アプリケーションの一般的なシナリオです。

Next.js コンポーネント (components/NavBar.js):

import { useRouter } from 'next/router';

export default function NavBar() {
  const router = useRouter();

  return (
    <nav classname="nav">
      <ul classname="nav__list">
        <li classname="{`nav__item" :>
          <a href="/" classname="nav__link">Home</a>
        </li>
        <li classname="{`nav__item" :>
          <a href="/about" classname="nav__link">About</a>
        </li>
        <li classname="{`nav__item" :>
          <a href="/contact" classname="nav__link">Contact</a>
        </li>
      </ul>
    </nav>
  );
}

Next.js スタイル (styles/NavBar.module.css):

.nav {
  background-color: #333;
  padding: 10px;
}

.nav__list {
  list-style: none;
  display: flex;
  gap: 20px;
}

.nav__item {
  margin: 0;
}

.nav__link {
  color: white;
  text-decoration: none;
}

.nav__item--active .nav__link {
  font-weight: bold;
  color: #007BFF;
}

説明:

  • Next.js の useRouter フックは、現在のルート (router.pathname) を取得するために使用されます。
  • nav__item--active 修飾子は、現在のページがメニュー項目と一致するかどうかに基づいて動的に適用されます。
  • アクティブなページは、テキストの色を変更し、フォントを太字にすることで強調表示されます。
  • nav__link は nav__item ブロック内の要素です。

結論

プロジェクトで BEM を使用すると、動的コンポーネントや状態の変化を扱う場合でも、CSS の一貫性とスケーラビリティを維持できます。状態管理、動的なクラス変更、条件付きスタイル設定に BEM を活用することで、コードを構造化、モジュール化して保守しやすく保つことができます。

これらの詳細な例は、BEM を実際のアプリケーションにどのように適用して、さまざまなフレームワークにわたる複雑な UI コンポーネントの管理を容易にするかを強調しています。

最新情報を入手するにはフォローしてください!

この記事が、さまざまなプラットフォームでの CSS BEM の使用についての理解を深められることを願っています。さらに多くの記事、実用的なヒント、Web 開発に関する洞察に興味がある場合は、定期的に更新情報を受け取るために私をフォローしてください。ご質問やフィードバックがございましたら、お気軽にお問い合わせください。喜んでご連絡させていただきます。

以上が実践的な例で CSS BEM 命名をマスターする: Pure HTML、Angular、Next.jsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
@KeyFrames CSS:最も使用されているトリック@KeyFrames CSS:最も使用されているトリックMay 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversitility andpowerincreatingsmoothcssanimations.keytricksinclude:1)defingsmoothtransitionsbetweenstates、2)AnimatingMultipleProperiessimally、3)3)bendorprefixesforbrows -compativity、4)組み合わせwithjavasfo

CSSカウンター:自動番号の包括的なガイドCSSカウンター:自動番号の包括的なガイドMay 07, 2025 pm 03:45 PM

csScounterSareSareusedTomageautomaticinginginwebdesigns.1)それらは、コンテンツ、リスト、および積極的なものを使用することができます

スクロール駆動型のアニメーションを使用したモダンなスクロールシャドウスクロール駆動型のアニメーションを使用したモダンなスクロールシャドウMay 07, 2025 am 10:34 AM

特にモバイルデバイスでは、スクロールシャドウを使用することは、Chrisが以前にカバーした微妙なUXです。 Geoffは、アニメーションタイムラインプロパティを使用する新しいアプローチをカバーしました。これがさらに別の方法です。

画像マップを再検討します画像マップを再検討しますMay 07, 2025 am 09:40 AM

簡単に復習してみましょう。画像マップはHTML 3.2に戻ります。ここで、最初にサーバー側マップを使用してから、マップとエリア要素を使用して画像上でクリック可能な領域を定義したクライアント側マップをマップしました。

開発者:すべての開発者の調査開発者:すべての開発者の調査May 07, 2025 am 09:30 AM

State of Devsの調査は現在、参加に対して開かれており、以前の調査とは異なり、コードを除くすべてをカバーしています:キャリア、職場だけでなく、健康、趣味などもあります。 

CSSグリッドとは何ですか?CSSグリッドとは何ですか?Apr 30, 2025 pm 03:21 PM

CSSグリッドは、複雑で応答性の高いWebレイアウトを作成するための強力なツールです。設計を簡素化し、アクセシビリティを向上させ、古い方法よりも多くの制御を提供します。

CSS Flexboxとは何ですか?CSS Flexboxとは何ですか?Apr 30, 2025 pm 03:20 PM

記事では、レスポンシブデザインにおけるスペースの効率的なアラインメントと分布のためのレイアウト方法であるCSS FlexBoxについて説明します。 FlexBoxの使用量を説明し、CSSグリッドと比較し、ブラウザのサポートを詳細に説明します。

CSSを使用してWebサイトを応答するにはどうすればよいですか?CSSを使用してWebサイトを応答するにはどうすればよいですか?Apr 30, 2025 pm 03:19 PM

この記事では、ビューポートメタタグ、柔軟なグリッド、流体メディア、メディアクエリ、相対ユニットなど、CSSを使用してレスポンシブWebサイトを作成するための手法について説明します。また、CSSグリッドとフレックスボックスを使用してカバーし、CSSフレームワークを推奨しています

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境