在上一篇文章中,我們探討了 CSS 中 BEM 命名約定 的基礎知識,以及為什麼它對維護乾淨且可擴展的程式碼至關重要。
這次,我們將透過實際範例更深入地了解 BEM 如何在不同環境中運作:純 HTML、Angular、 和 Next.js。
BEM 不限於基本的 HTML 結構;它可以有效地應用於任何現代前端框架。閱讀本文後,您將更清楚地了解如何在各種開發設定中實現 BEM。
在此範例中,我們將建立一個使用者個人資料卡,該卡會根據使用者的線上或離線狀態動態變更其樣式。這是現實應用程式中的常見用例,其中元素需要根據狀態或條件進行更改。
HTML:
<div class="user-card user-card--offline"> <img src="profile.jpg" alt="User Avatar" class="user-card__avatar" /> <div class="user-card__info"> <h2 class="user-card__name">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; }
說明:
在此 Angular 範例中,我們將建立一個互動式按鈕,按一下時顯示載入狀態。這是表單或互動元素中的常見用例,其中按鈕的狀態會根據使用者互動或 API 呼叫而變化。
角度組件 (button.component.html):
<button class="button" [ngClass]="{'button--loading': isLoading, 'button--primary': !isLoading}" (click)="handleClick()"> <span *ngIf="!isLoading">{{ buttonText }}</span> <span *ngIf="isLoading">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); } }
說明:
在此 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 ${router.pathname === '/' ? 'nav__item--active' : ''}`}> <a href="/" className="nav__link">Home</a> </li> <li className={`nav__item ${router.pathname === '/about' ? 'nav__item--active' : ''}`}> <a href="/about" className="nav__link">About</a> </li> <li className={`nav__item ${router.pathname === '/contact' ? 'nav__item--active' : ''}`}> <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; }
說明:
在專案中使用 BEM 可以讓您保持 CSS 的一致性和可擴展性,即使在處理動態元件和不斷變化的狀態時也是如此。透過利用 BEM 進行狀態管理、動態類別變更和條件樣式化,您可以保持程式碼結構化、模組化且易於維護。
這些詳細的範例強調如何將 BEM 應用到實際應用程式中,從而更輕鬆地跨不同框架管理複雜的 UI 元件。
我希望這篇文章能幫助您加深對在不同平台上使用 CSS BEM 的理解。如果您對更多文章、實用技巧和 Web 開發見解感興趣,請務必關注我以獲取定期更新。如果您有任何問題或回饋,請隨時與我們聯繫 - 我很樂意與您聯繫並聽取您的意見!
以上是透過實際範例掌握 CSS BEM 命名:純 HTML、Angular 和 Next.js的詳細內容。更多資訊請關注PHP中文網其他相關文章!