」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > CSS BEM 命名約定:它是什麼、為什麼重要、如何使用它?

CSS BEM 命名約定:它是什麼、為什麼重要、如何使用它?

發佈於2024-11-01
瀏覽:480

CSS BEM Naming Convention: What It Is, Why It Matters, and How to Use It?

編寫乾淨且有組織的 CSS 很重要,尤其是對於大型專案。建立 CSS 的最佳方法之一是使用 BEM 命名約定。在本文中,我們將解釋 BEM 是什麼、為什麼它很重要、它的優點和缺點,並透過兩個範例向您展示如何使用它。

什麼是邊界元法?

BEM 代表區塊元素修飾符。它是一個用於編寫 CSS 類別名稱的命名系統,使您的程式碼更易於理解和維護。 BEM 的主要目標是幫助開發人員編寫可重複使用、模組化和可擴展的 CSS。

1。區塊: 本身有意義的獨立元件(例如按鈕或表單)。
2.元素: 塊的一部分,其本身沒有意義並且依賴於塊(例如,按鈕圖標)。
3.修飾符: 區塊或元素的不同版本(例如,具有不同顏色的按鈕)。

.block {}
.block__element {}
.block--modifier {}

為什麼要使用邊界元法?

使用 BEM 可以幫助您避免混亂和令人困惑的 CSS。它帶來了幾個好處:

  • 一致性:所有類別名稱都遵循相同的模式,使您的程式碼更可預測且更易於理解。
  • 可重複使用性:區塊和元素可以在專案的不同部分中重複使用。
  • 易於維護:其他開發人員可以輕鬆閱讀和修改您的程式碼。
  • 避免衝突: BEM 可協助您防止不同元件之間的 CSS 衝突。

如何使用邊界元法:範例

範例 1:一個簡單的按鈕

讓我們從一個基本的按鈕區塊開始,看看 BEM 是如何運作的。

HTML:


CSS:

.button {
  padding: 10px 20px;
  background-color: #333;
  color: white;
  border: none;
}

.button--primary {
  background-color: blue;
}

解釋:

  • 按鈕是一個區塊,代表主按鈕樣式。
  • Button--primary 是一個修飾符,將藍色背景套用到此特定按鈕版本。

範例 2:卡片組件

現在讓我們建立一個帶有標題和描述(元素)以及小尺寸版本(修飾符)的卡片塊。

HTML:

Title

This is a description.

CSS:

.card {
  padding: 20px;
  border: 1px solid #ddd;
  background-color: #f9f9f9;
}

.card__title {
  font-size: 18px;
  margin-bottom: 10px;
}

.card__description {
  font-size: 14px;
  color: #666;
}

.card--small {
  padding: 10px;
}

解釋:

  • 卡是代表卡組件的塊。
  • card__title 和 card__description 是元素,是卡片的特定部分。
  • card--small 是一個修飾符,減少較小版本卡片的填滿。

BEM 的優點和缺點

優點:

1. 組織一致: 幫助保持 CSS 整潔且結構良好。
2. 避免 CSS 衝突: 降低一個元件的樣式影響另一個元件的風險。
3. 可重複使用性:區塊和元素可以在專案中的多個位置使用。
4. 易於維護:即使您的專案不斷成長,也可以更輕鬆地更新和管理 CSS。

缺點:

1. 長類別名稱: BEM 類別名稱可能會很長,一開始可能會讓人覺得不知所措。
2. 學習曲線:習慣 BEM 結構需要一些時間,特別是如果您不熟悉 CSS。

為什麼 BEM 很重要?

BEM 是一種流行的 CSS 方法,因為它提倡乾淨且可擴展的程式碼。在大型專案中,CSS 很快就會變得難以管理。使用 BEM,每個類別名稱都是唯一的且具有描述性,這使得更容易理解每​​個類別的用途。它還可以防止風格衝突等問題,並使開發人員之間的協作更加順暢。

如果你想要一個一致的、模組化的方式來寫 CSS,BEM 是一個很好的選擇。 可能需要一些時間來學習,但從長遠來看,它將節省你的時間並讓你的 CSS更易於維護。

結論

BEM 命名約定是保持 CSS 有序且可擴展的好方法。它有助於避免衝突,使程式碼更易於維護,並促進可重複使用元件。儘管由於類別名稱較長且學習曲線較長,一開始可能看起來很有挑戰性,但好處遠大於缺點。如果您希望編寫更簡潔的 CSS 並改善專案中的協作,請嘗試 BEM!

關注我了解更多更新!

我希望您發現本文有助於理解 CSS BEM 命名約定。如果您想了解更多此類文章、技巧和 Web 開發見解的最新動態,請務必關注我。如果您有任何問題或建議,請隨時與我們聯繫。我很想聽聽你的消息!

版本聲明 本文轉載於:https://dev.to/aepasahan/css-bem-naming-convention-what-it-is-why-it-matters-and-how-to-use-it-3epn?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何在PHP Mail 中覆蓋信封回傳地址為了解決使用PHP 的mail() 函數設定信封回傳地址的問題,這個答案提供了一個簡單的解決方案。 mail() 函數接受可選的第四個和第五個參數。雖然第四個參數用於設定標頭,但第五個參數可用於將選項直接傳遞給底層的 sendmail 命令。透過在第五個參數...
    程式設計 發佈於2024-11-07
  • 科技觀察 #1
    科技觀察 #1
    大家好,這是我上週的技術手錶,其中包含很多 #react、一點 #html、一些 #css 和 #npm。 ? https://www.totaltypescript.com/how-to-create-an-npm-package 如何建立 NPM 套件 建立、測試和發布 NPM 套件(從初始化...
    程式設計 發佈於2024-11-07
  • mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 期望MySQLi 結果,而不是布林值在給定的PHP 程式碼中,錯誤「mysqli_fetch_array() 期望參數1 為mysqli_result, boolean Give" 表示使用mysqli_query() 的查詢執行失敗,傳回fals...
    程式設計 發佈於2024-11-07
  • 子集和問題的 PHP 程式
    子集和問題的 PHP 程式
    子集和問題是電腦科學和動態規劃中的經典問題。給定一組正整數和一個目標和,任務是確定是否存在給定集合的子集,其元素總和等於目標和。 子集與問題的PHP程序 使用遞歸解決方案 例子 <?php // A recursive solution for the subset sum problem /...
    程式設計 發佈於2024-11-07
  • JavaScript 陣列方法:綜合指南
    JavaScript 陣列方法:綜合指南
    数组是 JavaScript 中最基本的数据结构之一。使用数组,您可以在单个变量中存储多个值。 JavaScript 提供了许多内置方法来操作数组,使它们具有令人难以置信的通用性。在这篇文章中,我们将探讨所有内置数组方法以及如何在 JavaScript 项目中有效地使用它们。 核心方...
    程式設計 發佈於2024-11-07
  • 進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    每次我用 TypeScript 写成 Foo 时,我都会感受到失败的沉重。 在一种情况下,这种感觉特别强烈:当函数采用的参数取决于哪个 "mode" 处于活动状态时。 通过一些示例代码更清晰: type Provider = "PROVIDER A" | "PR...
    程式設計 發佈於2024-11-07
  • 如何建立人力資源管理解決方案
    如何建立人力資源管理解決方案
    1. Understanding the Basics of Frappe and ERPNext Task 1: Install Frappe and ERPNext Goal: Get a local or cloud-based instance of ERP...
    程式設計 發佈於2024-11-07
  • 從週五黑客到發布:對創建和發布開源專案的思考
    從週五黑客到發布:對創建和發布開源專案的思考
    从周五补丁破解到发布:对创建和发布开源项目的思考 这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。 这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些思考,我希望能启发你做自己的项目 思考(此) 作为 Java 开发人员学习 Go l...
    程式設計 發佈於2024-11-07
  • 可以使用 constexpr 在編譯時確定字串長度嗎?
    可以使用 constexpr 在編譯時確定字串長度嗎?
    常數表達式最佳化:可以在編譯時確定字串長度嗎? 在最佳化程式碼的過程中,開發人員嘗試計算使用遞​​歸函數在編譯時計算字串文字的長度。此函數逐字元計算字串並傳回長度。 初步觀察:該函數似乎按預期工作,在運行時返回正確的長度並產生表明計算發生在編譯時的彙編程式碼。這就提出了一個問題:是否保證length...
    程式設計 發佈於2024-11-07
  • 在 Raspberry Pi 上執行 Discord 機器人
    在 Raspberry Pi 上執行 Discord 機器人
    Unsplash 上 Daniel Tafjord 的封面照片 我最近完成了一个软件工程训练营,开始研究 LeetCode 的简单问题,并觉得如果我每天都有解决问题的提醒,这将有助于让我负起责任。我决定使用按 24 小时计划运行的不和谐机器人(当然是在我值得信赖的树莓派上)来实现此操作,该机器人将执...
    程式設計 發佈於2024-11-07
  • 解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    In the ever-evolving landscape of web development, JavaScript remains a cornerstone technology powering countless large-scale web applications. While...
    程式設計 發佈於2024-11-07
  • 為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?
    為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?
    透過非常量指標修改 const在 C 中,const 變數一旦初始化就無法修改。但是,在某些情況下,const 變數可能會被更改。考慮以下代碼:const int e = 2; int* w = (int*)&e; // (1) *w = 5; ...
    程式設計 發佈於2024-11-07
  • Android - 將 .aab 檔案上傳到 Play 商店時出錯
    Android - 將 .aab 檔案上傳到 Play 商店時出錯
    如果您遇到此錯誤,請按照以下步驟操作以確保與您的套件名稱和簽署金鑰保持一致: 確保 app.json 檔案中的套件名稱與您第一次上傳 .aab 檔案時所使用的套件名稱相符。 "android": { "permissions":["CAMERA","READ_EXTERNAL_STO...
    程式設計 發佈於2024-11-07
  • 如何使用 PHP 將 HTML 轉換為 PDF
    如何使用 PHP 將 HTML 轉換為 PDF
    (適用於 Windows 的指南。不適用於 Mac 或 Linux) (圖片來源) 在 PHP 中將 HTML 轉換為 PDF 的方法不只一種。您可以使用Dompdf或Mpdf;但是,這兩個庫的執行方式有所不同。 注意:本文中並未包含所有解決方案。 要使用這兩個函式庫,您將需要 Composer...
    程式設計 發佈於2024-11-07
  • C++ 會擁抱垃圾收集嗎?
    C++ 會擁抱垃圾收集嗎?
    C 中的垃圾收集:實現和共識的問題C 中的垃圾收集:實現和共識的問題雖然有人建議C 最終會包含垃圾收集器,但它仍然是爭論和持續發展的主題。要理解其中的原因,我們必須深入研究迄今為止阻礙其納入的挑戰和考慮因素。 實現複雜性在 C 中加入隱式垃圾收集是一個非-瑣碎的任務。該語言的低級性質和對指針的廣泛支...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3