0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何優(yōu)雅的寫css代碼

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-01-03 15:00 ? 次閱讀

作者 | 京東科技 楊健

CSS(全稱 Cascading Style Sheets,層疊樣式表)為開發(fā)人員提供聲明式的樣式語言,是前端必備的技能之一,基于互聯(lián)網(wǎng)上全面的資料和簡單易懂的語法,CSS 非常易于學(xué)習(xí),但其知識(shí)點(diǎn)廣泛且分散,很難做到精通,在我們?nèi)粘i_發(fā)中,常常忽視了 CSS 代碼的質(zhì)量,很容易寫出雜亂無章的 CSS 文件。

代碼優(yōu)化建議

1. 使用縮寫屬性精簡代碼

適用于:margin、padding、border、font、background 等 但并非所有情況下都必須縮寫,因?yàn)楫?dāng)一個(gè)屬性的值縮寫時(shí),總是會(huì)將所有項(xiàng)都設(shè)置一遍,而有時(shí)候我們不希望設(shè)置值里的某些項(xiàng),這時(shí)候需要開發(fā)者自行判斷。

.content{
    // 縮寫前
    margin-right:16px;
    margin-top:30px;
    width:184px;
    height:32px;
    background:#FFFFFF
    margin-left:10px;
}
.content{
    //縮寫后
    margin:30px 16px 0 10px;
    width:184px; 
    height:32px; 
    background:#FFFFFF
}

2. 合并選擇器

使用 "," 連接多個(gè)選擇器定義公用屬性,不僅能增加可讀性,還能減小 css 文件大小。

.content{
  display: flex;
  .flush, 
  .include, 
  .underline{
   margin-right: 12px; 
   padding: 3px 6px; 
   border: 1px solid #a96161; 
   font-size: 12px; 
   color: #412c2c; 
   }
   .flush{ 
   color: #FFFFFF; 
   background-color: aqua; 
   }
   .include{ 
   color: #5d3e3e; 
   background-color: #657f7f; 
   }
    .underline{ 
    color: #7da938; 
    background-color: #7c6a6a; 
    }
}

3. 使用更語義化的單詞命名 class

命名的時(shí)候以 “在你之后開發(fā)的人不會(huì)產(chǎn)生疑惑” 為目標(biāo) 如下

.curr{
    color:#FFFFFF;
    background:red;
}
.future{
    background:#9f6262;
}
// curr 是啥? future又是啥? 

.current-count{ 
    color:#FFFFFF; 
    background:red; 
} 
.future-count{ 
    background:#9f6262; 
}

4. 屬性聲明順序

選擇器中屬性數(shù)量較多時(shí),將相關(guān)的屬性聲明放在一起,并按以下順序排列:

定位相關(guān),如 position、top/bottom/left/right、z-index 等

盒模型相關(guān),如 display、float、margin、width/height 等

排版相關(guān),如 font、color、line-height 等

可視相關(guān),如 background、color 等

其他,如 opacity、animation 等

建議:在屬性數(shù)量較多時(shí)可以參考這 5 個(gè)類別歸類排列。

  /* 定位相關(guān) */
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;
  /* 盒模型相關(guān) */
  display: block;
  float: right;
  width: 100px;
  height: 100px;
  /* 排版相關(guān) */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  color: #333;
  text-align: center;
  /* 可視相關(guān) */
  background-color: #f5f5f5;
  border: 1px solid #e5e5e5;
  border-radius: 3px;
  /* 其他 */
  opacity: 1;

5. 使用 & 符號(hào)引用父選擇器

& 是 Sass 和 Less 中提供的語法糖,用于表示對(duì)父選擇器的引用 優(yōu)點(diǎn):非常適合用于編寫組件的樣式,減少了很多重復(fù)單詞 缺點(diǎn):從 HTML 的 class name 中尋找對(duì)應(yīng)樣式的成本增加

.first {
    .first-title {/* styles */}
    .first-title:after {/* styles */}
    .first-content {/* styles */}
}
/* 用&引用來優(yōu)化代碼 */
.first {
    &-title {
        /* styles */
        &:after {/* styles */}
    }
    &-content {/* styles */}
}

Sass .vs. Less?

預(yù)處理器將 CSS 從聲明語言轉(zhuǎn)換成一門編程語言

可嵌套的語法增加了樣式文件的可讀性和可維護(hù)性 變量與混合特性能夠減少很多重復(fù)的樣式聲明 Less 更像 CSS,易于上手,能夠從 CSS 平滑過渡;Sass 的縮進(jìn)語法接受度因人而異,Sass3.0 中提出了兼容 CSS 的 Scss,用戶可以選擇使用 Sass 或 Scss。 當(dāng)項(xiàng)目 CSS 中需要涉及復(fù)雜邏輯時(shí),Sass/Scss 更適合,Sass 提供了更強(qiáng)大、更接近編程語言的 @function、@if/@else、@while 等語法;當(dāng)項(xiàng)目的樣式復(fù)雜度不高時(shí),選 Sass 或 Less 都可以。

(下面是一個(gè) Less 和 Scss 語法對(duì)比例子)

// Less
.mixin( @count )when( @count > 0 ){
    background-color: black;
}
.mixin( @count )when( @count <= 0 ){
    background-color: white;
}
.tag {
    .mixin(100);
}
// Scss
@function selectCount($count) {
    @if $count > 0 {
        return black;
    }
    @else {
        return white;
    }
}
.tag {
    background-color: checkCount(100);
}
綜上,CSS 作為一門前端必備的基礎(chǔ)技能,具有許多原生的痛點(diǎn)。近年來,開發(fā)者們也在源源不斷地提出了不同的優(yōu)化方案,我們?cè)谌粘jP(guān)注 Vue、React、NodeJS、性能優(yōu)化等熱門前端話題的時(shí)候,也不要忘了好好寫 CSS 代碼呀~

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1949

    瀏覽量

    34853
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4810

    瀏覽量

    68829
  • CSS
    CSS
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    14392

原文標(biāo)題:如何優(yōu)雅的寫css代碼

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何讓你的Python代碼優(yōu)雅又地道

    pythonic的代碼簡練,明確,優(yōu)雅,絕大部分時(shí)候執(zhí)行效率高。閱讀pythonic的代碼能體會(huì)到“代碼是寫給人看的,只是順便讓機(jī)器能運(yùn)行”暢快。這篇文章是網(wǎng)友Jeff Paine整理
    的頭像 發(fā)表于 02-03 12:35 ?4601次閱讀

    HarmonyOS css和HTML css的區(qū)別是什么

    Gradients)和 徑向漸變(Radial Gradients)獨(dú)屬于HarmonyOS的一些屬性有一些是鴻蒙css獨(dú)有的屬性而普通css 沒有的注意事項(xiàng)目前HarmonyOS 代碼
    發(fā)表于 03-30 10:37

    鴻蒙css支持的屬性與普通css支持的屬性有哪些區(qū)別呢

    Gradients)和 徑向漸變(Radial Gradients)獨(dú)屬于HarmonyOS的一些屬性有一些是鴻蒙css獨(dú)有的屬性而普通css 沒有的注意事項(xiàng)目前HarmonyOS 代碼
    發(fā)表于 03-30 18:15

    如何查看/搜索/偷看/共享他人的css模板代碼

    如何查看/搜索/偷看/共享他人的css模板代碼   當(dāng)我們看到他人漂亮的空間時(shí),我們無不為他人的高超css技術(shù)而慨嘆!但自己也
    發(fā)表于 02-11 15:11 ?1030次閱讀

    css3按鈕特效

    css3按鈕特效css3按鈕特效css3按鈕特效css3按鈕特效css3按鈕特效css3按鈕特效
    發(fā)表于 05-24 14:14 ?0次下載

    怎樣來為armc代碼

    怎樣來為armc代碼
    發(fā)表于 10-30 10:32 ?12次下載
    怎樣來為arm<b class='flag-5'>寫</b>c<b class='flag-5'>代碼</b>

    讓你的 Python 代碼優(yōu)雅又地道

    vs NP (pythonic vs non-pythonic)的討論。pythonic的代碼簡練,明確,優(yōu)雅,絕大部分時(shí)候執(zhí)行效率高。閱讀pythonic的代碼能體會(huì)到“代碼是寫給
    的頭像 發(fā)表于 03-06 10:35 ?3650次閱讀

    行為和結(jié)構(gòu)及表現(xiàn)分離的CSS選項(xiàng)卡的代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是行為和結(jié)構(gòu)及表現(xiàn)分離的CSS選項(xiàng)卡的代碼免費(fèi)下載。
    發(fā)表于 05-30 17:07 ?2次下載
    行為和結(jié)構(gòu)及表現(xiàn)分離的<b class='flag-5'>CSS</b>選項(xiàng)卡的<b class='flag-5'>代碼</b>免費(fèi)下載

    CSS框架:Materialize的特點(diǎn)和優(yōu)缺點(diǎn)

    以Google為基礎(chǔ)的Materialize CSS融合了JavaScript、CSS和HTML等各種組件。它不但具有一定的響應(yīng)能力,而且存在較少的瀏覽器兼容性問題。如果您希望構(gòu)建一個(gè)優(yōu)雅的UI,那么Materialize就可以
    的頭像 發(fā)表于 07-01 16:01 ?4636次閱讀

    CSS框架:Tachyons的優(yōu)缺點(diǎn)

    與其他流行的前端框架不同,Tachyons旨在將CSS規(guī)則分解為小型的、可管理的、以及可復(fù)用的部件。Tachyons可以幫助開發(fā)人員創(chuàng)建出具有高度可讀性、能夠快速加載和響應(yīng)的網(wǎng)站,而且無需使用大量CSS代碼。
    的頭像 發(fā)表于 07-01 16:57 ?3845次閱讀

    程序員是怎么代碼的?常見問詳解

    騰訊程序員是怎么代碼的?,代碼,插件,sql,調(diào)用,編程
    的頭像 發(fā)表于 02-20 15:38 ?9740次閱讀

    如何提高代碼性能、使代碼遠(yuǎn)離Bug、令代碼優(yōu)雅

    背景:如何更規(guī)范化編寫Java代碼的重要性想必毋需多言,其中最重要的幾點(diǎn)當(dāng)屬提高代碼性能、使代碼遠(yuǎn)離Bug、令代碼優(yōu)雅。 一、MyBati
    的頭像 發(fā)表于 08-17 09:42 ?1452次閱讀

    css.gg開源CSS、SVG和Figma UI圖標(biāo)

    ./oschina_soft/css.gg.zip
    發(fā)表于 05-31 09:42 ?1次下載
    <b class='flag-5'>css</b>.gg開源<b class='flag-5'>CSS</b>、SVG和Figma UI圖標(biāo)

    Facebook開源StyleX如何在JavaScript中CSS呢?

    Meta(原 Facebook)開源了全新的 CSS-in-JS 庫 StyleX。
    的頭像 發(fā)表于 12-14 10:03 ?760次閱讀

    Arm新Arm Neoverse計(jì)算子系統(tǒng)(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Arm宣布了兩款新的Arm Neoverse計(jì)算子系統(tǒng)(CSS),它們基于“迄今為止最好的一代Neoverse技術(shù)”。是什么讓這些新產(chǎn)品在擁擠的計(jì)算技術(shù)領(lǐng)域脫穎而出? Arm的兩個(gè)新Arm
    的頭像 發(fā)表于 04-24 17:53 ?1134次閱讀
    Arm新Arm Neoverse計(jì)算子系統(tǒng)(<b class='flag-5'>CSS</b>):Arm Neoverse <b class='flag-5'>CSS</b> V3和Arm Neoverse <b class='flag-5'>CSS</b> N3