」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 我如何寫 CSS 選擇器

我如何寫 CSS 選擇器

發佈於2024-11-06
瀏覽:876

How I write CSS selectors

有很多 CSS 方法,但我討厭它們。有些多(順風等),有些少(BEM、OOCSS 等)。但歸根結底,它們都有缺陷。

當然,人們使用這些方法有充分的理由,並且解決的許多問題我也遇到過。因此,在這篇文章中,我想寫下我自己的關於如何保持 CSS 組織的指南。

這不是任何人都可以開始使用的完整描述的 CSS 方法。也許它可以透過一些額外的工作變成一個,但這篇文章的目的只是展示我在寫 CSS 時如何做出這些決定。

內建元素

根據經驗,我嘗試盡可能使用內建元素類型,並盡可能少地使用額外的內容。

需要數千種不同類型的按鈕,這表明設計可能在更深層次上存在問題,因此,雖然在某些情況下,我覺得 CSS 是惰性的,直到使用特定於框架的類為止。 ,在大多數情況下,當按鈕只是 並且看起來像一個沒有任何進一步魔法的按鈕時,我認為它是理想的。

div.btton 應該變成按鈕

自訂元素

並非所有設計元素都具有語義上合適的 HTML 等效項,對於這些情況,我通常採用自訂元素。

我還沒有看到很多在沒有任何附帶javascript 的情況下使用自定義元素名稱的實例,但它已被證明是編寫清晰的HTML 的一個令人驚訝的可靠選擇,而且看起來也符合我想要的方式。

隨著時間的推移,在設計方面完全獨立的元素也更有可能開發出只能使用JavaScript 實現的需求,這為您提供了一條清晰的路徑來實現那些不需要對HTML 進行任何更改也不需要進行任何更改的需求。 CSS。

div.vsep 應該變成垂直分隔符號

課程

類別應該充當現有節點名稱的修飾符,而不是全新的元素類型,並且通常對不同的元素類型具有相似但不同的效果。

危險按鈕是按鈕。危險

屬性

修改元素的某些方法並不是類別有用的簡單開/關開關,而是更像鍵值對。

在這些情況下,具有匹配選擇器的自訂屬性幾乎每次使用它們時都被證明是最佳選擇。與帶有連字符的類別不同,它們在語法層級上顯示哪個是屬性,哪個是值,使編輯器更容易突出顯示它們,更容易人眼快速解析,並且更容易使用 JavaScript 進行互動。

對於我們這些仍然希望 attr() 函數有一天能夠進入 CSS 的人來說,這不僅僅是內容,這也是面向未來的額外一層。

ID

根據定義,ID 在文件中是唯一的。因此,任何針對特定 ID 的規則都將受到限制,如果後來發現lage 上應該存在多個這種類型的元素,則可能需要重構。

因此,應謹慎使用 ID,並且只有在一個文件中包含多個元素沒有意義時才應使用 ID。

在實用性和可讀性方面相對於類別的好處相當小,因此當無法識別元素和樣式之間明確的一對一關係時,選擇類別通常是最好的主意。

內聯CSS

任何現實世界的應用程式在某些時候都會有一些元素,只需要單獨調整,以使它們在出現的上下文中更加美觀。

在這些情況下,樣式屬性是正確的選擇。任何使用它被認為是不好的做法的原因都適用於任何類型的內聯樣式,包括實用程式類別。問題不在於屬性,而在於混合樣式和標記。

內聯樣式的樣式和類別之間的一個區別是,一個表示目的,允許使用純 CSS 並且大多是通用的,而另一個則不然。

簡單地說,width: 100px 具有普遍定義的含義,而 .width-100 可以表示任何含義。

實用程式類

在極少數情況下,特定於元素的樣式變得如此複雜,以至於顯式內聯它們會損害可讀性,甚至是不可能的(例如,如果它需要媒體查詢)。

在這些情況下,實用程式類別基本上是唯一的選擇,即使它們很醜陋。

在理想的世界中,這些可以與特定的 mixin 類別分開處理,我甚至考慮過使用前綴來更容易地區分它們,但最終沒有找到一個好的方法來使它們不難看。

我喜歡在實用程式類別前面加上 a 前綴來表示它們向元素添加某種功能,與普通類別相反,它指定元素的類型。


就是這樣。當然,沒有兩個項目是相同的,有時必須稍微調整規則才能保持實用,但總的來說,這是我決定如何使螢幕上的事物看起來某種方式的框架。

你有什麼想法?你討厭它嗎?你覺得有道理嗎?在評論中讓我知道嗎?

版本聲明 本文轉載於:https://dev.to/darkwiiplayer/how-i-write-css-selectors-kfd?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-03-10
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-03-10
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。讓我們考慮以下查詢: select data d.data_ti...
    程式設計 發佈於2025-03-10
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-03-10
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-03-10
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-03-10
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-03-10
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-03-10
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    程式設計 發佈於2025-03-10
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    解決此問題,我們採用了一個巧妙的CSS解決方案來解決問題:左:50% ; 高度:auto; 寬度:100% ; //對於水平塊 ,使用絕對定位將圖像定位在中心,以object-fit:object-fit:cover in IE和edge消除了問題。現在,圖像將按比例擴展,保持所需的效果而不會失...
    程式設計 發佈於2025-03-10
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中可能會遇到一個衝突,其中3派對軟件包將另一個帶有導入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    程式設計 發佈於2025-03-10
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-03-10
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    答案: 在大多數現代編譯器中,while(1)和(1)和(;;)之間沒有性能差異。編譯器: perl: 1 輸入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    程式設計 發佈於2025-03-10
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-03-10

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

Copyright© 2022 湘ICP备2022001581号-3