CSS 樣式書寫規範

2021-12-30 前端大全

(點擊上方公眾號,可快速關注)

作者:伯樂在線/chokcoco

http://web.jobbole.com/91792/

如有好文章投稿,請點擊 → 這裡了解詳情

可能不同團隊都有各自的規範,又或者很多人在寫 CSS 的時候還是想到什麼就寫什麼,不存在太多的約束。

我覺得 CSS 代碼規範還是有存在的必要的,尤其是在團隊配合,多人協作下,規範就顯得尤為重要。

本文的所列是實踐當中得出的一套比較不錯的 CSS 書寫規範,並不希望大家完全採用,而是希望可以結合自己的團隊需要,發展出一套適合自己的 CSS 代碼規範。

也希望可以有更多的建議,共同的完善。本規範也可以在我的 Github 上看到,歡迎留言或者提 PR。

我覺得不同的規範都有各自的長處與缺陷,對待所謂的規範最好的方式不是人云亦云,拿來就用,而是應該結合實際情況及需求,取長補短,取其精華去其糟粕。

編碼設置

採用 UTF-8 編碼,在 CSS 代碼頭部使用:

@charset "utf-8";

注意,必須要定義在 CSS 文件所有字符的前面(包括編碼注釋),@charset 才會生效。

例如,下面的例子都會使得 @charset 失效:

/* 字符編碼 */

@charset "utf-8";

html,

body {

  height: 100%;

}

 

@charset "utf-8";

命名空間規範

布局:以 g 為命名空間,例如:.g-wrap 、.g-header、.g-content。

狀態:以 s 為命名空間,表示動態的、具有交互性質的狀態,例如:.s-current、s-selected。

工具:以 u 為命名空間,表示不耦合業務邏輯的、可復用的的工具,例如:u-clearfix、u-ellipsis。

組件:以 m 為命名空間,表示可復用、移植的組件模塊,例如:m-slider、m-dropMenu。

鉤子:以 j 為命名空間,表示特定給 JavaScript 調用的類名,例如:j-request、j-open。

命名空間思想

沒有選擇 BEM 這種命名過於嚴苛及樣式名過長過醜的規則,採取了一種比較折中的方案。

不建議使用下劃線 _ 進行連接

節省操作,輸入的時候少按一個 shift 鍵

能良好區分 JavaScript 變量命名

字符小寫

定義的選擇器名,屬性及屬性值的書寫皆為小寫。

選擇器

當一個規則包含多個選擇器時,每個選擇器獨佔一行。

、+、~、> 選擇器的兩邊各保留一個空格。

.g-header > .g-header-des,

.g-content ~ .g-footer {

    

}

命名短且語義化良好

對於選擇器的命名,儘量簡潔且具有語義化,不應該出現 g-abc 這種語義模糊的命名。

規則聲明塊

當規則聲明塊中有多個樣式聲明時,每條樣式獨佔一行。

在規則聲明塊的左大括號 { 前加一個空格。

在樣式屬性的冒號 : 後面加上一個空格,前面不加空格。

在每條樣式後面都以分號 ; 結尾。

規則聲明塊的右大括號 } 獨佔一行。

每個規則聲明間用空行分隔。

所有最外層引號使用單引號 『 。

當一個屬性有多個屬性值時,以逗號 , 分隔屬性值,每個逗號後添加一個空格,當單個屬性值過長時,每個屬性值獨佔一行。

完整示例如下:

.g-footer,

.g-header {

  position: relative;

}

 

.g-content {

  background:

    linear-gradient(135deg, deeppink 25%, transparent 25%) -50px 0,

    linear-gradient(225deg, deeppink 25%, transparent 25%) -50px 0,

    linear-gradient(315deg, deeppink 25%, transparent 25%),

    linear-gradient(45deg, deeppink 25%, transparent 25%);

  }

 

.g-content::before {

  content: '';

}

 

數值與單位

當屬性值或顏色參數為 0 – 1 之間的數時,省略小數點前的 0 。color: rgba(255, 255, 255, 0.5)color: rgba(255, 255, 255, .5);

當長度值為 0 時省略單位。margin: 0px automargin: 0 auto

十六進位的顏色屬性值使用小寫和儘量簡寫。color: #ffcc00color: #fc0

 

樣式屬性順序

單個樣式規則下的屬性在書寫時,應按功能進行分組,並以 Positioning Model > Box Model > Typographic > Visual 的順序書寫,提高代碼的可讀性。

如果包含 content 屬性,應放在最前面;

Positioning Model 布局方式、位置,相關屬性包括:position / top / right / bottom / left / z-index / display / float / …

Box Model 盒模型,相關屬性包括:width / height / padding / margin / border / overflow / …

Typographic 文本排版,相關屬性包括:font / line-height / text-align / word-wrap / …

Visual 視覺外觀,相關屬性包括:color / background / list-style / transform / animation / transition / …

Positioning 處在第一位,因為他可以使一個元素脫離正常文本流,並且覆蓋盒模型相關的樣式。盒模型緊跟其後,因為他決定了一個組件的大小和位置。其他屬性只在組件內部起作用或者不會對前面兩種情況的結果產生影響,所以他們排在後面。

合理使用使用引號

在某些樣式中,會出現一些含有空格的關鍵字或者中文關鍵字。

font-family 內使用引號

當字體名字中間有空格,中文名字體及 Unicode 字符編碼表示的中文字體,為了保證兼容性,都建議在字體兩端添加單引號或者雙引號:

body {

  font-family: 'Microsoft YaHei', '黑體-簡', '\5b8b\4f53';

}

background-image 的 url 內使用引號

如果路徑裡面有空格,舊版 IE 是無法識別的,會導致路徑失效,建議不管是否存在空格,都添加上單引號或者雙引號:

div {

  background-image: url('...');

}

 

避免使用 !important

除去某些極特殊的情況,儘量不要不要使用 !important。

!important 的存在會給後期維護以及多人協作帶來噩夢般的影響。

當存在樣式覆蓋層疊時,如果你發現新定義的一個樣式無法覆蓋一個舊的樣式,只有加上 !important 才能生效時,是因為你新定義的選擇器的優先級不夠舊樣式選擇器的優先級高。所以,合理的書寫新樣式選擇器,是完全可以規避一些看似需要使用 !important 的情況的。

代碼注釋

單行注釋

星號與內容之間必須保留一個空格。

/* 表格隔行變色 */

多行注釋

星號要一列對齊,星號與內容之間必須保留一個空格。

/**

* Sometimes you need to include optional context for the entire component. Do that up here if it's important enough.

*/

規則聲明塊內注釋

使用 // 注釋,// 後面加上一個空格,注釋獨立一行。

.g-footer {

    border: 0;

    // ....

}

文件注釋

文件頂部必須包含文件注釋,用 @name 標識文件說明。星號要一列對齊,星號與內容之間必須保留一個空格,標識符冒號與內容之間必須保留一個空格。

/**

* @name: 文件名或模塊名

* @description: 文件或模塊描述

* @author: author-name(mail-name@domain.com)

*          author-name2(mail-name2@domain.com)

* @update: 2015-04-29 00:02

*/

@description為文件或模塊描述。

@update為可選項,建議每次改動都更新一下。

當該業務項目主要由固定的一個或多個人負責時,需要添加@author標識,一方面是尊重勞動成果,另一方面方便在需要時快速定位責任人。

SASS 使用建議

嵌套層級規定

使用 SASS 、 LESS 等預處理器時,建議嵌套層級不超過 3 層。

組件/公用類的使用方法

組件/公用類使用 %placeholders 定義,使用 @extend 引用。如:

%clearfix {

 

  overflow: auto;

  zoom: 1;

}

 

.g-header {

  @extend %clearfix;

}

組件類的思考

使用 SASS ,經常會預先定義好一些常用公用組件類,譬如清除浮動,水平垂直居中,文字 ellipsis。又或者多個元素具有同樣的樣式,我們希望能夠少寫這部分代碼,公共部分抽離出來只寫一次,達到復用。

但是復用的方式在 SASS 中有多種,那麼是使用單獨使用一個類定義,給需要的標籤添加,還是使用 @include 或者 @extend在定義的類中引入一個 @mixin,或者一個 @function 呢?

基於讓 CSS 更簡潔以及代碼的復用考慮,採用上面的使用 %placeholders 定義,使用 @extend 引用的方案。

%placeholders,只是一個佔位符,只要不通過 @extend 調用,編譯後不會產生任何代碼量

使用 @extend 引用,則是因為每次調用相同的 %placeholders 時,編譯出來相同的 CSS 樣式會進行合併(反之,如果使用 @include 調用定義好的 @mixin,編譯出來相同的 CSS 樣式不會進行合併)

這裡的組件類特指那些不會動態改變的 CSS 樣式,注意與那些可以通過傳參生成不同數值樣式的 @mixin 方法進行區分

 

儘量避免使用標籤名

使用 SASS ,或者說在 CSS 裡也有這種困惑。

假設我們有如下 html 結構:

<span>

  <div class="g-content">

    <ul class="g-content-list"><li class="item"/>

        <li class="item"/>

        <li class="item"/>

        <li class="item"/>

    </ul></div>

</span>

在給最裡層的標籤命名書寫樣式的時候,我們有兩種選擇:

.g-content {

  .g-content-list {

    li {

      ...

    }

  }

}

或者是

.g-content {

  .g-content-list {

    .item {

      ...

    }

  }

}

也就是,編譯之後生成了下面這兩個,到底使用哪個好呢?

基於 CSS 選擇器的解析規則(從右向左),建議使用上述第二種 .g-content .g-content-list .item { } ,避免使用通用標籤名作為選擇器的一環可以提高 CSS 匹配性能。

瀏覽器的排版引擎解析 CSS 是基於從右向左(right-to-left)的規則,這麼做是為了使樣式規則能夠更快地與渲染樹上的節點匹配。

 

本規範也可以在我的 Github (https://github.com/chokcoco/CSSWritingRules)上看到,歡迎留言或者提 PR。

到此本文結束,如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

覺得本文對你有幫助?請分享給更多人

關注「前端大全」,提升前端技能

相關焦點

  • 網頁CSS設計樣式基礎知識點 小白教程
    其中,屬性和屬性值以「」的形式出現,屬性是對指定的對象設置的樣式屬性,如字體大小、文本顏色等,後面我們會學習更多的屬性和屬性值。屬性和屬性值之間用英文「」連接,多個鍵值對之間用英文「」進行區分。1.css樣式中的選擇器嚴格區分大小寫,屬性和屬性值不區分大小寫,但是按照規範一般「選擇器、屬性和屬性值」採用小寫的方式。
  • DIV+CSS命名規範大全
    網頁製作中規範使用DIV+CSS命名規則,可以改善優化功效,特別是在團隊合作的時候可以明顯的提高合作的製作效率。,style.css主要的module.css模塊base.css基本共用layout.css布局,版面themes.css主題columns.css專欄font.css文字、字體forms.css
  • HTML DIV+CSS 命名規範大全
    網頁製作中規範使用DIV+CSS命名規則,可以改善優化功效特別是團隊合作時候可以提供合作製作效率,具體DIV CSS命名規則CSS命名大全內容篇。常用DIV+CSS命名大全集合,即CSS命名規則我們開發CSS+DIV網頁(Xhtml)時候,比較困惑和糾結的事就是CSS命名,特別是新手不知道什麼地方該如何命名,怎樣命名才是好的方法。
  • 組件化的css-module
    從單一 file 到可以模塊化書寫css. 不過, 隨著前端發展, 現在的要求是組件化, 那麼, 以前那種直接 < link> 腳本也逐漸變為痛點. so, 2015/6 左右, 出來了 css-module 這個概念. 可以說, 這是一個專門為 component 編程而生的. 因為,他是和 js 緊密結合在一起的。
  • 來,一起幫忙制定CSS規範吧
    shape-outsideshape-outside用於定義元素周圍的文本如何對其進行繞排,比如shape-outside: circle();會導致文本圍繞圓形對其繞排,而shape-outside: url(img/example.png);則會導致文本基於圖片的透明區域輪廓繞排,比如:(圖片來源:https://drafts.csswg.org/css-shapes
  • 強大的CSS原生樣式支持,不費吹灰之力就搞定註冊頁面
    「放心好啦,ABI不僅支持表單,而且支持表單自定義樣式!我操作給你看」。老張邊說邊操作,不一會就拿出了成品。你是不是也很好奇這是咋做出來的呢?讓我們接著看看老張的詳解步驟吧。實施步驟詳解首先,打開報表設計器,先拖動輸入框組件和按鈕組件,把需要製作的樣式排版好。其次,既然要高大上,那深沉高級的背景肯定不能少。我們選中編輯界面的表單組件,然後打開自定義樣式設置對話框:在這裡寫的css樣式就會自動適用於組件上啦!
  • div和css
    div是區域的意思,就是把網頁分為一個一個區域,在沒有區域之前,就相當於一個國家由一個村一個村組成,有區域的概念後就可以把國家先分為省,省裡面還可以分區域
  • Div+CSS 基礎入門教程
  • web前端必學,10分鐘學會css的三大特性
    CSS能夠對網頁中元素位置的排版進行像素級精確控制,支持幾乎所有的字體字號樣式,擁有對網頁對象和模型樣式編輯的能力。什麼是CSS?一、CSS層疊性說明:層疊性是多種CSS樣式的疊加,是瀏覽器處理樣式衝突的方式。在HTML中對於同一個元素可以有多個CSS樣式存在,當有相同權重的樣式存在時,會根據這些樣式出現的先後順序來決定,處於最後面的CSS樣式將會覆蓋前面的CSS樣式。
  • css動畫之@keyframes
  • CSS現狀和如何學習
    比如我們在一個style.css 樣式文件中,對同一個元素寫了兩個樣式規則:<a href="#" class="link">Link</a>a { color: #90f;}.link { color: #f36;}a 先於.link 出現,就是對同一元素使用的樣式規則出現的先後順序
  • 平昌縣西興鎮中心衛生院召開病歷和處方書寫規範專題學習會
    四川民生報導網訊(李軍 平昌報導)為規範處方管理、提高處方質量、促進合理用藥、保障醫療安全,2020年12月5日,平昌縣西興鎮中心衛生院組織衛生院全體職工、村(社)衛生室人員召開了"病歷及處方書寫規範專題學習會"。
  • 【前端-CSS動畫】製作聖誕節彩燈
    css動畫 animationcss動畫 keyframesbox-shadow一、效果二、代碼index.html"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?
  • 面試官:CSS選擇器有哪些?優先級?哪些屬性可以繼承?
    </div>    <div class="two"></div>    <div class="two"></div>    <div class="two"></div></div>關於css
  • css動畫創建及使用
    CSS動畫就是一種樣式逐漸改變成另一種樣式的過程。
  • 黃金谷學校:規範書寫 我們一直在做
    書寫規範一直以來是黃金谷學校所關注的,從孩子們踏入初中開始,我們一直致力於強調且規範學生們的書寫,從最初的26個字母逐步練習,一步步提高學生對於英語書寫的規範和重視。七八年級的英語老師每天會給學生們布置適量的書寫作業。  2020年12月18日中午,黃金谷學校七年級八年級全體學生在老師的組織下進行英語書寫大賽,本次書寫大賽的目的一是檢驗學生書寫程度,二是提高學生對於書寫的認識,三是鼓勵並且獎勵書寫規範的學生。
  • 【教程】html+css零基礎入門教程(九)
    瀏覽器顯示一個標準的字體樣式。如:p.normal{font-style:normal;} 頁面上顯示為 F2E.TMING2) italic瀏覽器會顯示一個斜體的字體樣式。如:p.italic{font-style:italic;}頁面上顯示為 F2E.TMING3) oblique瀏覽器會顯示一個傾斜的字體樣式。
  • CSS動畫:animation、transition、transform、translate傻傻分不清
    容易混淆的幾個css屬性css屬性很多,並且有些無論是字母的拼寫還是字面上的意思,都容易混淆,比如我列出來的幾個屬性,是不是也混淆過你~屬性含義animation(動畫)用於設置動畫屬性,他是一個簡寫的屬性,包含6個屬性transition(過渡)用於設置元素的樣式過度,和animation有著類似的效果,但細節上有很大的不同transform
  • 教程 | Web前端教程2:CSS+DIV頁面布局
    (1)CSS參考CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明:選擇器通常是您需要改變樣式的 HTML 元素。每條聲明由一個屬性和一個值組成。屬性(property)是您希望設置的樣式屬性(style attribute)。每個屬性有一個值。屬性和值被冒號分開。
  • 網頁設計規範指南
    3、色彩規範應該遵循品牌VI規範體系,需要注意不同狀態的用色規範(默認、懸停、按下 、成功反饋、警示反饋、錯誤反饋),顏色不宜過多,控制在3種以內,文字色彩儘量避免純黑色。6、表單規範系統表單設計中,注意輸入框樣式統一,一般有默認、選中、輸入、禁用、校驗錯誤等,另外還有單選、多選、下拉等組件。可遵循8點柵格原則。