CSS布局發(fā)展史以及預(yù)處理器的簡單認(rèn)識(shí)

相信對于知道前端這個(gè)詞的人應(yīng)該都聽說過CSS吧。提到CSS我們應(yīng)該容易想到傳統(tǒng)CSS帶來的一些局限性,實(shí)際上在CSS的整個(gè)發(fā)展歷史上,總共經(jīng)歷了4次的布局革命,從初代的table布局到CSS+DIV布局,再到現(xiàn)在比較流行的的Flex布局和Grid布局。

初代的table布局

實(shí)際上這個(gè)布局在目前的HTML5的規(guī)范中已經(jīng)不存在了,但是還是可以稍微了解一下的:

<MULTICOLCOLS="3"GUTTER="25">
<P>
<FONTSIZE="4"COLOR="RED">This would be some font broken up into columns</FONT>
</P>
</MULTICOL>

table初代布局有一個(gè)問題是:它的結(jié)構(gòu)跟表現(xiàn)是混合在一起的。因此在我們需求變更和改動(dòng)的過程中實(shí)際上是很困難的。

CSS+DIV布局:結(jié)構(gòu)和表現(xiàn)分離開來

CSS+DIV也是目前最流行的布局方式。

html { margin-left: 2cm; font-family: "Times", serif;}
h1 { font-size: 24px;}

Flex布局

也就是我們說的一個(gè)彈性盒子,它是移動(dòng)端一個(gè)比較主流的布局技術(shù),單一維度的布局。

.flex {
 height: calc(100% - 120px);
 display: flex;
}

Grid布局

也叫作網(wǎng)格布局,實(shí)現(xiàn)了CSS維度的拓展。使用網(wǎng)格布局可以定義它的行和列的一個(gè)屬性,這也是它的CSS的二維布局。

.container {
 height: 100%;
 display: grid;
 grid-template-columns: 200px auto 200px;
 grid-template-rows: 80px auto 40px;
}

總的來說,它們還是有一些共同的特點(diǎn)的:

  • 只有一個(gè)全局的命名空間,所以無法避免出現(xiàn)選擇器的沖突。
  • 模塊化做的不夠好,很容易造成嵌套和樣式覆蓋混亂,然后導(dǎo)致了一大堆的亂七八糟的文件的產(chǎn)生。

上面兩個(gè)問題是傳統(tǒng)CSS的局限性的兩個(gè)關(guān)鍵地方所在,也是傳統(tǒng)CSS的兩個(gè)槽點(diǎn)。因此就誕生了CSS預(yù)處理器。

預(yù)處理器:也就是在我們編寫代碼的時(shí)候,可以不按照傳統(tǒng)的CSS的寫法來寫,然后經(jīng)過一層預(yù)處理器轉(zhuǎn)換成瀏覽器可以理解的一個(gè)傳統(tǒng)的CSS,這就是CSS預(yù)處理器的作用。

CSS預(yù)處理器的幾大重要功能:

文件拆分

  • css預(yù)處理器擴(kuò)展了@import 指令的能力,比如在es6里面如果要引入一個(gè)js文件,一般我們需要用一個(gè)import,但是經(jīng)過了CSS預(yù)處理器都會(huì)有一個(gè)@import的能力。
  • 編譯環(huán)節(jié)將切分后的文件重新合并為一個(gè)大文件,文件的引入解決了兩個(gè)問題:
    1 解決了大文件不便維護(hù)的問題
    2 解決了一堆小文件在加載時(shí)的性能問題

模塊化

  • css 文件在合理切分
  • 編譯環(huán)節(jié)將切分后的文件重新合并為一個(gè)大文件
    1 解決了大文件不便維護(hù)的問題
    2 小文件的相互關(guān)系形成一個(gè)樹形結(jié)構(gòu)
index.css
├─ header.css
│ └─ reset.css
├─ content.css
│ ├─ left.css
│ │ └─ nav.css
│ └─ right.css
├─ fotter.css
└─ ...

選擇符嵌套

  • 傳統(tǒng)嵌套
    1 手工維護(hù)縮進(jìn)關(guān)系
    2 當(dāng)上級(jí)選擇符發(fā)生變化時(shí),所有相關(guān)的下級(jí)選擇符都要修改
    3 注釋書寫
.header {
    margin: auto; /* 水平居中 */
    width: 1000px;
    color: #333;
}
.header li {
    float: left;
    width: 100px;
}
.header li a {
    display: block;
    text-decoration: none;
}
  • 預(yù)處理器嵌套
    1 層級(jí)關(guān)系清晰
    2 注釋清晰易讀
.header {
        margin: auto // 水平居中
        width: 1000px
        color: #333
    
        li {
            float: left // 水平排列
            width: 100px
        
            a {
                display: block
                text-decoration: none
            }
        }
}

變量(換膚)

  • 實(shí)現(xiàn)了網(wǎng)站視覺風(fēng)格的統(tǒng)一
strong {
    color: #ff4466;
    font-weight: bold;
}
/* ... */
.error {
    color: #ff4466;
}
  • 換膚
$color-primary = #329FD9;
header {
    color: $color-default
}
.footer {
    color: $color-default
}

運(yùn)算

$left: 20px;
.header {
    margin-left: $left + 12px;
}

函數(shù)

比如說下面的圓角,可以實(shí)現(xiàn)一個(gè)CSS里面的函數(shù)的復(fù)用,提供一個(gè)可以統(tǒng)一修改元素圓角的css方法。

.border-radius(@radius: 5px) {
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    border-radius: @radius;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容