前端

CSS布局发展史以及预处理器的简单认识

2019-06-14  本文已影响8人  前白

相信对于知道前端这个词的人应该都听说过CSS吧。提到CSS我们应该容易想到传统CSS带来的一些局限性,实际上在CSS的整个发展历史上,总共经历了4次的布局革命,从初代的table布局到CSS+DIV布局,再到现在比较流行的的Flex布局和Grid布局。

初代的table布局

实际上这个布局在目前的HTML5的规范中已经不存在了,但是还是可以稍微了解一下的:

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

table初代布局有一个问题是:它的结构跟表现是混合在一起的。因此在我们需求变更和改动的过程中实际上是很困难的。

CSS+DIV布局:结构和表现分离开来

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

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

Flex布局

也就是我们说的一个弹性盒子,它是移动端一个比较主流的布局技术,单一维度的布局。

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

Grid布局

也叫作网格布局,实现了CSS维度的拓展。使用网格布局可以定义它的行和列的一个属性,这也是它的CSS的二维布局。

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

总的来说,它们还是有一些共同的特点的:

上面两个问题是传统CSS的局限性的两个关键地方所在,也是传统CSS的两个槽点。因此就诞生了CSS预处理器。

预处理器:也就是在我们编写代码的时候,可以不按照传统的CSS的写法来写,然后经过一层预处理器转换成浏览器可以理解的一个传统的CSS,这就是CSS预处理器的作用。

CSS预处理器的几大重要功能:

文件拆分

模块化

index.css
├─ header.css
│ └─ reset.css
├─ content.css
│ ├─ left.css
│ │ └─ nav.css
│ └─ right.css
├─ fotter.css
└─ ...

选择符嵌套

.header {
    margin: auto; /* 水平居中 */
    width: 1000px;
    color: #333;
}
.header li {
    float: left;
    width: 100px;
}
.header li a {
    display: block;
    text-decoration: none;
}
.header {
        margin: auto // 水平居中
        width: 1000px
        color: #333
    
        li {
            float: left // 水平排列
            width: 100px
        
            a {
                display: block
                text-decoration: none
            }
        }
}

变量(换肤)

strong {
    color: #ff4466;
    font-weight: bold;
}
/* ... */
.error {
    color: #ff4466;
}
$color-primary = #329FD9;
header {
    color: $color-default
}
.footer {
    color: $color-default
}

运算

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

函数

比如说下面的圆角,可以实现一个CSS里面的函数的复用,提供一个可以统一修改元素圆角的css方法。

.border-radius(@radius: 5px) {
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    border-radius: @radius;
}
上一篇下一篇

猜你喜欢

热点阅读