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

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

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

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]刪除
最新教學 更多>
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-07-15
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-07-15
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-15
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-07-15
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-15
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解決此問題,必須確保提供給HAAR CASCADE XML文件的路徑有效。在提供的代碼片段中,級聯分類器裝有硬編碼路徑,這可能對您的系統不准確。相反,OPENCV提...
    程式設計 發佈於2025-07-15
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-07-15
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-07-15
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-07-15
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-07-15
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-07-15
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-07-15
  • Python中何時用"try"而非"if"檢測變量值?
    Python中何時用"try"而非"if"檢測變量值?
    使用“ try“ vs.” if”來測試python 在python中的變量值,在某些情況下,您可能需要在處理之前檢查變量是否具有值。在使用“如果”或“ try”構建體之間決定。 “ if” constructs result = function() 如果結果: 對於結果: ...
    程式設計 發佈於2025-07-15
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-07-15
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,將常數列添加到Spark DataFrame,該列具有適用於所有行的任意值的Spark DataFrame,可以通過多種方式實現。使用文字值(SPARK 1.3)在嘗試提供直接值時,用於此問題時,旨在為此目的的column方法可能會導致錯誤。 df.withco...
    程式設計 發佈於2025-07-15

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

Copyright© 2022 湘ICP备2022001581号-3