CSS 編碼規范

CSS 編碼規范

    • 1 CSS
      • 1.1 編碼規范
        • 1.1.1 【強制】所有聲明必須以分號結尾
        • 1.1.2 【推薦】使用 2 個空格縮進
        • 1.1.3 【推薦】選擇器與 { 之間保留一個空格
        • 1.1.4 【推薦】屬性值規范
        • 1.1.5 【推薦】組合器規范
        • 1.1.6 【推薦】逗號分隔規范
        • 1.1.7 【推薦】注釋規范
        • 1.1.8 【推薦】右大括號規范
        • 1.1.9 【推薦】屬性聲明規范
        • 1.1.10 【推薦】代碼行長度規范
        • 1.1.11 【參考】多選擇器規范
        • 1.1.12 【參考】單行聲明規范
        • 1.1.13 【參考】注釋規范
      • 1.2 選擇器規范
        • 1.2.1 【參考】避免使用 ID 選擇器
        • 1.2.2 【參考】屬性選擇器引號規范
        • 1.2.3 【參考】選擇器性能優化
      • 1.3.屬性和屬性值
        • 1.3.1.【推薦】使用簡短的十六進制值。
        • 1.3.2.【推薦】避免使用!important覆蓋樣式。
        • 1.3.3.【推薦】十六進制值統一使用小寫字母(更易辨識)。
        • 1.3.4.【推薦】當長度值為0時,省略單位。
        • 1.3.5.【參考】保留小數點前的0。
        • 1.3.6.【參考】屬性聲明順序建議:
        • 1.3.7.【參考】合理使用簡寫屬性。
      • 1.4.其他
        • 1.4.1.【推薦】避免使用CSS的@import。
    • 2.Sass和Less
        • 2.1.【推薦】運算符兩側保留空格:
        • 2.2.【推薦】Mixin格式規范:
        • 2.3.【推薦】代碼組織順序:
        • 2.4.【推薦】塊內屬性聲明順序:
        • 2.5.【推薦】嵌套選擇器不超過3層。
        • 2.6.【推薦】注釋規范:
        • 2.7.【推薦】優先使用Mixin而非@extend。

本規范適用于 CSS 及其預編譯語言(Sass、Less)的編碼風格,部分規則可通過 stylelint 工具實現。

1 CSS

1.1 編碼規范

具體規則如下:

1.1.1 【強制】所有聲明必須以分號結尾

stylelint: declaration-block-trailing-semicolon

雖然 CSS 語法中最后一條聲明的分號是可選的,但統一使用分號能提高代碼一致性和可維護性。

/* bad */
.selector {margin-top: 10pxpadding-left: 15px
}/* good */
.selector {margin-top: 10px;padding-left: 15px;
}
1.1.2 【推薦】使用 2 個空格縮進

stylelint: indentation

/* bad */
.selector {padding-left: 15px;
}/* good */
.selector {padding-left: 15px;
}
1.1.3 【推薦】選擇器與 { 之間保留一個空格

stylelint: block-opening-brace-space-before

/* bad */
.selector{padding-left: 15px;
}/* good */
.selector {padding-left: 15px;
}
1.1.4 【推薦】屬性值規范

stylelint: declaration-colon-space-after, declaration-colon-space-before

/* bad */
.selector {margin-top : 10px;padding-left:15px;
}/* good */
.selector {margin-top: 10px;padding-left: 15px;
}
1.1.5 【推薦】組合器規范

stylelint: selector-combinator-space-before, selector-combinator-space-after

/* bad */
.selector>.children {padding-left: 15px;
}
.selector+.brother {padding-left: 15px;
}/* good */
.selector > .children {padding-left: 15px;
}
.selector + .brother {padding-left: 15px;
}
1.1.6 【推薦】逗號分隔規范

stylelint: value-list-comma-space-after

/* bad */
.selector {background-color: rgba(0,0,0,0.5);box-shadow: 0px 1px 2px rgba(0,0,0,0.5),inset 0 1px 0 rgba(255,255,255,0.5);
}/* good */
.selector {background-color: rgba(0, 0, 0, 0.5);box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
1.1.7 【推薦】注釋規范

stylelint: comment-whitespace-inside

/* bad */
.selector {/*comment*//*  comment  *//***comment*/padding-left: 15px;
}/* good */
.selector {/* comment *//*** comment*/padding-left: 15px;
}
1.1.8 【推薦】右大括號規范

聲明塊的右大括號 } 應單獨成行。

/* 不推薦 */
.selector {padding-left: 15px;}/* 推薦 */
.selector {padding-left: 15px;
}
1.1.9 【推薦】屬性聲明規范

屬性聲明應單獨成行。
stylelint: declaration-block-single-line-max-declarations

/* 不推薦 */
.selector {padding-left: 15px;  margin-left: 10px;
}/* 推薦 */
.selector {padding-left: 15px;margin-left: 10px;
}
1.1.10 【推薦】代碼行長度規范

單行代碼長度不超過 100 個字符。
stylelint: max-line-length
例外情況:

  • 使用 url() 函數時
  • 屬性值本身無法換行(不含空格或逗號)
/* 不推薦 */
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.04, rgb(88, 94, 124)), color-stop(0.52, rgb(115, 123, 162)));/* 推薦 */
background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0.04, rgb(88, 94, 124)),color-stop(0.52, rgb(115, 123, 162))
);
1.1.11 【參考】多選擇器規范

多個選擇器應分行書寫。
stylelint: selector-list-comma-newline-after

/* 不推薦 */
.selector, .selector-secondary, .selector-third {padding: 15px;margin-bottom: 15px;
}/* 推薦 */
.selector,
.selector-secondary,
.selector-third {padding: 15px;margin-bottom: 15px;
}
1.1.12 【參考】單行聲明規范

即使聲明塊內只有一條語句,也應使用多行格式。

/* 不推薦 */
.selector { padding-left: 15px; }/* 推薦 */
.selector {padding-left: 15px;
}
1.1.13 【參考】注釋規范

注釋上方需留空行(除非上方是注釋或塊頂部)。
stylelint: comment-empty-line-before

/* 不推薦 */
.selector {/* 注釋 */padding-left: 15px;/* 注釋 */padding-right: 15px;
}/* 推薦 */
.selector {/* 注釋 */padding-left: 15px;/* 注釋 */padding-right: 15px;
}

1.2 選擇器規范

1.2.1 【參考】避免使用 ID 選擇器

stylelint: selector-max-id
ID 選擇器優先級過高,會導致后續樣式難以覆蓋,可能引發 !important 濫用。

/* 不推薦 */
#special {padding: 15px;
}/* 推薦 */
.special {padding: 15px;
}
1.2.2 【參考】屬性選擇器引號規范

屬性選擇器的值需用雙引號包裹。
stylelint: selector-attribute-quotes

/* 不推薦 */
input[type=text] {height: 20px;
}/* 推薦 */
input[type="text"] {height: 20px;
}
1.2.3 【參考】選擇器性能優化

優化建議:

  1. 優先使用 class 而非元素標簽
  2. 避免在常用組件中使用屬性選擇器(如 [class^=“…”])
  3. 控制選擇器長度(不超過3個組合)

選擇器效率排序(高→低):
ID 選擇器(#header)
類選擇器(.header)
標簽選擇器(div)
相鄰兄弟選擇器(h2 + p)
子選擇器(ul > li)
后代選擇器(ul a)
通配符選擇器(*)
屬性選擇器([class^=“grid-”])
偽類/偽元素選擇器(a:hover, a::before)

1.3.屬性和屬性值

1.3.1.【推薦】使用簡短的十六進制值。

stylelint: color-hex-length

/* 不推薦 */
.selector {color: #ffffff;
}/* 推薦 */
.selector {color: #fff;
}
1.3.2.【推薦】避免使用!important覆蓋樣式。
1.3.3.【推薦】十六進制值統一使用小寫字母(更易辨識)。

stylelint: color-hex-case

/* 不推薦 */
.selector {color: #FEFEFE;
}/* 推薦 */
.selector {color: #fefefe;
}
1.3.4.【推薦】當長度值為0時,省略單位。

stylelint: length-zero-no-unit

/* 不推薦 */
.selector {margin-top: 0px;font-size: 0em;
}/* 推薦 */
.selector {margin-top: 0;font-size: 0;
}
1.3.5.【參考】保留小數點前的0。

stylelint: number-leading-zero

/* 不推薦 */
.selector {opacity: .5;left: -.5px;
}/* 推薦 */
.selector {opacity: 0.5;left: -0.5px;
}
1.3.6.【參考】屬性聲明順序建議:
  1. 定位屬性(position、z-index等)
  2. 盒模型屬性(display、width等)
  3. 排版屬性(font、color等)
  4. 外觀屬性(background等)
  5. 其他屬性
1.3.7.【參考】合理使用簡寫屬性。

stylelint: declaration-block-no-shorthand-property-overrides

/* 不推薦 */
.selector {margin: 0 0 10px;
}/* 推薦 */
.selector {margin-bottom: 10px;
}

1.4.其他

1.4.1.【推薦】避免使用CSS的@import。

與 相比,@import 會在關鍵渲染路徑上增加更多的往返(即關鍵路徑的深度變長),這樣會導致瀏覽器處理 CSS 文件速度變慢,因此我們應該避免使用 @import。

/* 不推薦 */
<style>@import url("more.css");
</style>/* 推薦 */
<link rel="stylesheet" href="more.css">

2.Sass和Less

2.1.【推薦】運算符兩側保留空格:
/* 推薦 */
.selector {width: $default-width / 2;
}
2.2.【推薦】Mixin格式規范:
/* 推薦 */
.selector {.size(30px, 20px);.clearfix();
}
2.3.【推薦】代碼組織順序:
  1. @import語句
  2. 全局變量聲明
  3. 樣式聲明
2.4.【推薦】塊內屬性聲明順序:
  1. 標準屬性
  2. mixin調用
  3. 嵌套選擇器
2.5.【推薦】嵌套選擇器不超過3層。
2.6.【推薦】注釋規范:
  • 雙斜杠注釋編譯后會被刪除
  • /**/注釋會被保留
2.7.【推薦】優先使用Mixin而非@extend。

使用 Mixin(通過 @mixin@include 指令)提升代碼復用性,遵循 DRY 原則(Don’t Repeat Yourself),同時增強代碼抽象能力并降低復雜度。

不建議使用 @extend 指令,因其存在以下問題:

  1. 可讀性較差,尤其在嵌套選擇器中表現尤為明顯
  2. 具有潛在風險,當選擇器順序發生變化時(特別是跨文件引用時)可能導致樣式異常

雖然 @extend 相比無參數 Mixin 能減少編譯后的代碼量(避免重復輸出),但現代壓縮工具(如 gzip)能有效處理重復代碼。因此,建議優先使用 Mixin 來實現 DRY 原則。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97823.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ORA-12514:TNS:監聽程序當前無法識別連接描述符中請求的服務

已經不止一次自己本機電腦安裝的Oracle使用plsqldev軟件登入提示這個了.一般前一天還好好的&#xff0c;今天就不行了.好好總結一下吧&#xff0c;也共大家一起借鑒.主要原因還是數據的歸檔日志因為內部內存已經耗盡&#xff0c;不能在進行歸檔導致數據庫啟動異常&#xff0c;沒…

Spring框架的JDBC模板技術和事務管理

SpringJDBCJDBC模板技術概述JDBC的模板類的使用Spring框架的事務管理配置文件方式半注解的方式純注解的方式JDBC模板技術概述 什么是 JDBC 模板技術&#xff1f; JDBC 模板技術是 Spring 框架為簡化持久層&#xff08;數據庫操作&#xff09;編程而提供的一種封裝機制&#xf…

將文件部署到受管主機

目錄 1.ansible.builtin中用于創建、更新或刪除多行文本塊的模塊是什么 2.copy模塊的作用 3.fetch模塊的作用 4.file模塊的作用 5.lineinfile模塊的作用 6.stat模塊的作用 7.要確保受管主機上存在文件&#xff0c;類似touch命令功能&#xff0c;還能設置權限等的模塊及操作是怎…

Dell PowerEdge R620 服務器內存和硬盤罷工了

文章目錄前言調查原因查找解決方案硬盤問題內存問題總結前言 月黑風高夜&#xff0c;服務宕機時。做服務端技術的&#xff0c;誰還沒半夜遇到個服務掛掉的情況&#xff0c;而像我這種半兼職網管的工作&#xff0c;遇到機器問題的概率也就更大了&#xff0c;本來周五晚上寫完總…

2025:SourceTree 啟用/禁用Mercurial 或 Git,像素級細節

最近使用Git管理工具的時候&#xff0c;發現還是SourceTree好用些&#xff0c;但是使用SourceTree帶來一個問題&#xff1a;就是每次在重新打開SourceTree的時候&#xff0c;都會重新下載Mercurial.zip文件&#xff0c;查了一下&#xff0c;一般情況下我們是不需要使用Mercuria…

安卓 Google Maps 的使用和開發步驟

文章目錄1. main2. Android 谷歌地圖3. 源碼Reference1. main 在國內選擇的SDK可以是高德、百度、騰訊、xxxx等&#xff0c;但在國外&#xff0c;你首選是谷歌&#xff0c;因此要進行Google地圖的開發你首先要解決下面三個問題 VPN Google賬號 信用卡American Express&#x…

Linux -- 應用層協議Http

1.HTTP背景知識 HTTP協議&#xff1a;HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;的本質是運行在 TCP/IP 協議族之上的 “應用層協議”&#xff0c;核心作用是定義客戶端&#xff08;如瀏覽器、APP&#xff09;與服務器之間的 “數據…

R 語言本身并不直接支持 Python 中 f“{series_matrix}.txt“ 這樣的字符串字面量格式化(f-string)語法 glue函數

R 語言本身并不直接支持 Python 中 f"{series_matrix}.txt" 這樣的字符串字面量格式化&#xff08;f-string&#xff09;語法。 在 R 中&#xff0c;要實現字符串拼接或格式化&#xff0c;你需要使用其他方法。下表對比了 Python f-string 和 R 中常見對應方法的主要…

【AI智能體】亮數據MCP Server × Dify:AI智能體獲取實時影音數據就是這么簡單

文章目錄一、引言&#xff1a;AI 應用與實時影音數據的融合價值1、傳統采集方式的痛點2、MCP Server 的創新價值二、亮數據 MCP Server 概覽1、什么是 MCP Server&#xff1f;2、支持的影音平臺和API接口3、產品特色亮點三、業務場景示例設計1、選定場景&#xff1a;競品分析與…

從《Attention Is All You Need》深入理解Transformer

2017年的《Attention Is All You Need》論文提出的Transformer架構&#xff0c;不僅徹底改變了自然語言處理的格局&#xff0c;更為現代人工智能的發展奠定了堅實基礎。本文將帶你深入解析這一劃時代模型的核心思想、技術細節及其深遠影響。&#x1f504; 一、背景與動機&#…

【08】AI輔助編程完整的安卓二次商業實戰-修改消息聊天框背景色-觸發聊天讓程序異常終止bug牽涉更多聊天消息發送優化處理-優雅草卓伊凡

【08】AI輔助編程完整的安卓二次商業實戰-修改消息聊天框背景色-觸發聊天讓程序異常終止bug牽涉更多聊天消息發送優化處理-優雅草卓伊凡引言本次二開布局沒有變&#xff0c;但是下一次整體布局會有變&#xff0c;不過本次開發發現朋友圈跳轉功能的流程步驟也做了一定的變化。原…

心理調適與情緒管理實訓室:支撐康養旅游人才心理能力培養

在康養休閑旅游服務專業的教學體系中&#xff0c;心理調適與情緒管理實訓室作為關鍵教學場所&#xff0c;承擔著培養學生心理服務能力、情緒疏導技能和人際溝通素養的重要任務。隨著社會對康養旅游服務質量要求的提升&#xff0c;具備心理調適與情緒管理能力的專業人才日益受到…

Oracle sql tuning guide 翻譯 Part 6 --- 優化器控制

第五部分優化器控制你可以用提示信息和初始化參數來影響優化器的判斷和運作方式。Influencing the Optimizer Optimizer defaults are adequate for most operations, but not all.In some cases you may have information unknown to the optimizer, or need to tune the opti…

pthread_mutex_lock函數深度解析

摘要 pthread_mutex_lock是POSIX線程庫中用于實現線程同步的核心函數&#xff0c;它通過對互斥鎖的加鎖操作來確保多個線程對共享資源的安全訪問。本文從互斥鎖的歷史背景和發展脈絡入手&#xff0c;詳細解析了pthread_mutex_lock函數的設計理念、實現機制和使用場景。通過生產…

qt QBoxSet詳解

1、概述QBoxSet 類代表箱形圖中的一個條目。箱形條目是范圍和由五個不同值構成的三個中值的圖形表示。這五個值分別是&#xff1a;下極值、下四分位數、中位數、上四分位數和上極值。QBoxSet 提供了多種方法來設置和獲取這些值&#xff0c;并且可以與 QBoxPlotSeries 和 QChart…

機器學習勢函數(MLPF)入門:用DeePMD-kit加速億級原子模擬

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;從傳統分子模擬到機器學習勢函數的革命…

制作uniapp需要的storyboard全屏ios啟動圖

//鎖定豎屏 plus.screen.lockOrientation("portrait-primary") // #endif首先準備啟動圖兩個dc_launchscreen_portrait_background2x.png(750*1624)dc_launchscreen_portrait_background3x.png(1125*2436)LaunchScreen.storyboard文件內容如下<?xml version"…

OpenCV:答題卡識別

目錄 一、項目原理 二、環境準備 三、核心代碼實現 1. 導入必要庫 2. 定義關鍵函數 坐標點排序函數 透視變換函數 輪廓排序函數 圖像顯示函數 3. 主程序實現 圖像預處理 輪廓檢測與答題卡定位 透視變換矯正 答案識別與評分 四、實現效果 本文將介紹如何使用 Ope…

機器寵物(以四足寵物為主)四肢與關節的系統化設計指南

1. 目標與約束先行 目標&#xff1a;自然步態&#xff08;走/小跑/小跳&#xff09;、安全親和、低噪、跌倒不致損&#xff1b;支持地毯/木地板/瓷磚等家庭地面。約束&#xff1a;體重 1–6 kg&#xff1b;單次續航 ≥ 30–60 min&#xff1b;整機成本與可維護性&#xff1b;室…

spark hive presto doris 對substr函數的差異

Spark、Hive、Presto&#xff08;現更名為 Trino&#xff09;和 Doris&#xff08;原百度 Palo&#xff09;的 substr 函數在功能上都是用于截取字符串的子串&#xff0c;但在起始索引規則和參數含義上存在差異&#xff0c;這是導致結果不同的主要原因。以下是它們的具體區別&a…