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

我如何寫 CSS 選擇器

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

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]刪除
最新教學 更多>
  • 免費接龍
    免費接龍
    很久以前,在同一個星系中,我開始嘗試製作 Freecell,作為學習 Angular 1.3 的一種方式。 我已經走了這麼遠,然後我就被其他事情分散了注意力,就像副項目一樣。 我最近有一些空閒時間(我知道,我也沒想到),所以我想我應該再試一次。 我基本上是從頭開始,因為我對 Angular 1...
    程式設計 發佈於2024-11-06
  • 為什麼 PHP 中的函數呼叫不能使用屬性預設值?
    為什麼 PHP 中的函數呼叫不能使用屬性預設值?
    無法在PHP 屬性預設值中呼叫函數[問題]儘管有程式設計經驗,但新手PHP中的屬性預設錯誤令我困惑。代碼:class Foo { public $path = array( realpath(".") ); }產生文法錯誤。但是,以下內容可以無縫運...
    程式設計 發佈於2024-11-06
  • 棄用 `ereg_replace` 後,如何將多個空格替換為單一空格?
    棄用 `ereg_replace` 後,如何將多個空格替換為單一空格?
    用單一空格取代多個空格:棄用ereg_replace雖然使用ereg_replace 以單一空格取代多個空格看起來很簡單,但它已被棄用。因此,您在嘗試使用它時可能會遇到錯誤。本文提出了一種替代解決方案。 遷移到 preg_replace()要取代 ereg_replace,請切換到 preg_rep...
    程式設計 發佈於2024-11-06
  • 如何開始自由工作?
    如何開始自由工作?
    您是否正在努力透過 Upwork 賺錢?別擔心!我曾經去過那裡,我來這裡是為了分享我將這些掙扎轉化為成功的旅程。憑藉奉獻精神和正確的方法,您可以開始在 Upwork 上賺錢,並打開通往一系列機會的大門。讓我們深入探討最大化您的收入潛力的關鍵步驟。 掌握技巧遊戲 在 Upwork 上...
    程式設計 發佈於2024-11-06
  • 如何將 8 個字元作為打包單精度浮點數載入到 __m256 變數中?
    如何將 8 個字元作為打包單精度浮點數載入到 __m256 變數中?
    將8 個字元從記憶體載入到__m256 變數中作為打包單精度浮點數為了優化高斯模糊演算法,您尋求用__m256 內在變數取代浮點緩衝區的使用。本問題旨在確定此任務的最佳指令。 AVX2 架構說明:利用 PMOVZX 將字元零擴展為 32 位元256b 暫存器中的整數。 使用 VCVTDQ2PS 就地...
    程式設計 發佈於2024-11-06
  • 如何在Python中尋找字串中子字串的第n次出現?
    如何在Python中尋找字串中子字串的第n次出現?
    查找字串中某個子字串第n 次出現識別某個子字串第n 次出現對應的索引為各種程式場景中經常出現的任務。在Python中,沒有專門為此目的而設計的內建函數。但是,可以採用多種方法來實現此結果。 一種簡單的方法是使用循環來迭代字串併計算子字串的出現次數。起始索引被初始化為第一次出現的結果,循環繼續直到找到...
    程式設計 發佈於2024-11-06
  • 程式語言解釋
    程式語言解釋
    ? 注意:缩略图是使用生成的 ComfyUI 帮助下的 Flux Schnell 模型; 本文是在 NI - 自然智能 的帮助下撰写的 ? 没有时间阅读? - 观看我们创建的视频: 集会 ? 最初所有程序都是用二进制编写的 - 所谓的汇编 编程语言。你从字面上指示CPU在内做什么 ...
    程式設計 發佈於2024-11-06
  • Go Context — TODO() 與 Background() 不再令人困惑!
    Go Context — TODO() 與 Background() 不再令人困惑!
    在 Go 中,上下文包有助於管理請求範圍的值、取消訊號和截止日期。 啟動上下文的兩種常見方法是 context.TODO() 和 context.Background()。 儘管它們的行為相似,但它們的目的不同。 上下文.背景() 當您不需要任何特殊處理(例如取消或截止日期...
    程式設計 發佈於2024-11-06
  • 如何偵測 CMake 中的 C++11 編譯器支援?
    如何偵測 CMake 中的 C++11 編譯器支援?
    CMake 中C 11 編譯器支援的檢測概述在本指南中,我們探討自動偵測編譯器是否支援C 11 的方法CMake,提供對最新和以前CMake 版本的全面分析。 CMake 3.1.0 及更高版本CMake 3.1.0 版本引進了一個強大的功能:偵測編譯器。這是透過cmake_minimum_requ...
    程式設計 發佈於2024-11-06
  • 基於屬性的測試:深入探討現代測試方法
    基於屬性的測試:深入探討現代測試方法
    基于属性的测试是一种强大的测试方法,它侧重于软件的属性或特征,而不是特定的输入输出情况。与手动定义特定测试用例的传统测试不同,基于属性的测试会自动生成各种输入来验证某些属性是否始终成立。这种方法可以更广泛地探索潜在场景,使其成为发现隐藏错误并确保稳健的软件行为的有效方法。 测试方法的演变 从传统的...
    程式設計 發佈於2024-11-06
  • 為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    现代软件开发环境中哪些日益增长的网络安全风险让 CISO 忙碌? 开发人员和安全团队面临着越来越多的威胁,从复杂的开源和供应商控制的供应链攻击到 AI 生成的代码引入的漏洞,例如提示注入和 GitHub Copilot 的代码安全性差。现代应用程序通常严重依赖开源组件(例如在 npm、PyPI 或 ...
    程式設計 發佈於2024-11-06
  • 如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    在 Bootstrap 中使用間距實用程式類別在 Bootstrap 中,間距實用程式類別可讓您輕鬆控制元素周圍的間距。但是,如果您在使用它們時遇到問題,這裡有一個指南可以幫助您解決。 更新的間距語法(Bootstrap 4 和 5)Bootstrap 4引入了間距實用程式類別的簡化語法:邊距:m{...
    程式設計 發佈於2024-11-06
  • 如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄在Python中,subprocess.Popen()函數允許您在Py thon中執行指令子程序。一個常見的要求是指定子程序的工作目錄。 問題:如何使用 subprocess.Popen() 設定子程序的工作目錄? 答案:要指定工作目錄,請使用 subproc...
    程式設計 發佈於2024-11-06
  • Pandas 什麼時候創建視圖而不是副本?
    Pandas 什麼時候創建視圖而不是副本?
    Pandas 視圖與副本生成規則Pandas 在決定 DataFrame 上的切片操作是否產生視圖或結果時採用特定規則複製。透過了解這些規則,您可以優化資料操作並避免意外行為。 從始終產生副本的操作開始:所有操作,除了那些專門設計用於修改的操作就地 DataFrame,創建副本。 只有某些操作支援 ...
    程式設計 發佈於2024-11-06
  • 使用代理伺服器解鎖地理限制網站
    使用代理伺服器解鎖地理限制網站
    利用代理服务器绕过区域封锁是一种常用且有效的方法。代理服务器作为中介,可以隐藏用户的真实IP地址,使用户的请求看起来像是来自代理服务器的地理位置,从而绕过区域封锁。 使用代理服务器绕过区域封锁的关键步骤:‌‌ 选择合适的代理服务器‌:根据目标区域的网络环境和遮挡情况,选择覆盖该区域的...
    程式設計 發佈於2024-11-06

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

Copyright© 2022 湘ICP备2022001581号-3