国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > CSS > 正文

淺談CSS 柵格系統(tǒng)布局原理分析

2024-07-11 08:41:40
字體:
來源:轉載
供稿:網(wǎng)友

眾所周知,現(xiàn)在前端有很多類似于bootstrap,foundation這樣優(yōu)秀的UI框架,它們都提供了自己的一套響應式布局方案,即柵格系統(tǒng)。用過的人都知道只要給頁面的元素添加其柵格系統(tǒng)指定的類名,就能達到你想達到的響應式布局效果,簡潔而優(yōu)雅。筆者有很長一段時間不明白柵格系統(tǒng)是基于什么樣的原理實現(xiàn),遂分析了一下主流框架的源碼,發(fā)現(xiàn)其實并不復雜,甚至自己也可以實現(xiàn)一套很簡單的柵格系統(tǒng)。

一、Bootstrap

bootstrap的柵格系統(tǒng)用于通過一系列的行(row)與列(col-*)的組合來創(chuàng)建頁面布局,它的柵格系統(tǒng)最大分為12份:

<div class="container">    <div class="row">        <div class="col-md-12">col-12</div>    </div>    <div class="row">        <div class="col-md-4">col-4</div>        <div class="col-md-4">col-4</div>        <div class="col-md-4">col-4</div>    </div>    ...</div>

不過bootstrap@3.x版本與@4.0版本實現(xiàn)柵格系統(tǒng)方式不一樣:

bootstrap@3.x版本為了兼容IE8,采用的是浮動方式來實現(xiàn)柵格系統(tǒng):

[class |= col] { float: left; }.col-md-1 { width: 8.33333333%; }.col-md-2 { width: 16.66666667%; }.col-md-3 { width: 25%; }.col-md-4 { width: 33.33333333%; }.col-md-5 { width: 41.66666667%; }.col-md-6 { width: 50%; }.col-md-7 { width: 58.33333333%; }.col-md-8 { width: 66.66666667%; }.col-md-9 { width: 75%; }.col-md-10 { width: 83.33333333%; }.col-md-11 { width: 91.66666667%; }.col-md-12 { width: 100%; }

即每行的一個柵格都是用左浮動和百分比來進行排版,當窗口寬度改變,對應改變container容器的寬度,對應柵格寬度自然也跟著改變:

@media (min-width: 768px) {  .container {    width: 750px;  }}@media (min-width: 992px) {  .container {    width: 970px;  }}@media (min-width: 1200px) {  .container {    width: 1170px;  }}

bootstrap@4.0版本放棄了對版本IE的支持,柵格系統(tǒng)采用的是最新的伸縮布局方式:

.row {    display: flex;    flex-wrap: wrap;}.col-1 { flex: 0 0 8.333333%; }.col-2 { flex: 0 0 16.666667%; }.col-3 { flex: 0 0 25%; }.col-4 { flex: 0 0 33.333333%; }.col-5 { flex: 0 0 41.666667%; }.col-6 { flex: 0 0 50%; }.col-7 { flex: 0 0 58.333333%; }.col-8 { flex: 0 0 66.666667%; }.col-9 { flex: 0 0 75%; }.col-10 { flex: 0 0 83.333333%; }.col-11 { flex: 0 0 91.666667%; }.col-12 { flex: 0 0 100%; }

柵格系統(tǒng)可以決定每一個柵格的排版順序,兩種柵格系統(tǒng)實現(xiàn)方式不同,自然他們得排版方式也不同:

/* * bootstrap@3.x版本 排版 */[class |= col] {    position: relative;}/* 向右移動指定的柵格數(shù) */.col-md-pull-1 { right: 8.33333333%; }.col-md-pull-2 { right: 16.66666667%; }.col-md-pull-3 { right: 25%; }.../* 向左移動指定的柵格數(shù) */.col-md-push-1 { left: 8.33333333%; }.col-md-push-2 { left: 16.66666667%; }.col-md-push-3 { left: 25%; }.../* * bootstrap@4.0版本  排版 */.order-1 { order: 1; }.order-2 { order: 2; }.order-3 { order: 3; }...

可以看到,@3.0版本采用的是相對定位進行左右移動柵格來進行排版,@4.0版本就很簡潔,只用采用flex布局特有的order屬性來進行排版。當然,這兩個版本也有相同的排版方式,就是offset偏移:

/* bootstrap@3.x版本偏移 */.col-md-offset-1 { margin-left: 8.33333333%; }.col-md-offset-2 { margin-left: 16.66666667%; }.col-md-offset-3 { margin-left: 25%; }.../* bootstrap@4.0版本偏移 */.offset-1 { margin-left: 8.33333333%; }.offset-2 { margin-left: 16.66666667%; }.offset-3 { margin-left: 25%; }...

兩者都用margin-left進行偏移量設置。

二、Pure

pure的柵格系統(tǒng)又是另外一種方式實現(xiàn),它支持最大24等分的柵格:

<div class="pure-g">    <div class="pure-u-1-3">1/3</div>    <div class="pure-u-1-3">1/3</div>    <div class="pure-u-1-3">1/3</div></div><div class="pure-g">    <div class="pure-u-1-8">1/8</div>    <div class="pure-u-1-8">1/8</div>    <div class="pure-u-1-8">1/8</div>    ...</div><div class="pure-g">    <div class="pure-u-1-24">1/24</div>    <div class="pure-u-1-24">1/24</div>    <div class="pure-u-1-24">1/24</div>    ...</div>

pure它的柵格系統(tǒng)采用的是伸縮與行內結合的方式:

.pure-g {        display: -webkit-box;        display: -webkit-flex;        display: -ms-flexbox;        display: flex;        flex-flow: row wrap;}[class|=pure-u] {    display: inline-block;    *display: inline;   /*iE < 8*/    zoom: 1;}.pure-u-1-24 { width: 4.1667%; }.pure-u-2-24,.pure-u-1-12 { width: 8.3333%; }.pure-u-3-24,.pure-u-1-8 { width: 12.5000%; }.pure-u-4-24,.pure-u-1-6 { width: 16.6667%; }.pure-u-5-24 { width: 20.8333%; }...

不過它是不支持偏移和指定順序的排版。

三、Foundation

fundation的柵格系統(tǒng)原理其實是和bootstrap@4.0版本如出一轍,都是采用伸縮布局的方式,最大支持12等分的柵格:

.grid-x {  display: -webkit-box;  display: -webkit-flex;  display: -ms-flexbox;  display: flex;  -webkit-box-orient: horizontal;  -webkit-box-direction: normal;  -webkit-flex-flow: row wrap;      -ms-flex-flow: row wrap;          flex-flow: row wrap; }.grid-x > .small-1 { width: 8.33333%; }.grid-x > .small-2 { width: 16.66667%; }.grid-x > .small-3 { width: 25%; }....grid-x > .small-12 { width: 100%; }

四、總結

UI框架柵格系統(tǒng)實現(xiàn)方式基本為三種:

1. 純伸縮布局flex方式: 這種方式對古老的IE瀏覽器支持性不是很好,所以一般出現(xiàn)在技術比較激進的框架上,如Bootstrap@4.0,F(xiàn)oundation,基于React的antDesign,基于Vue的ElementUI 等等。
2. 浮動方式:這種方式是為了向下兼容IE低版本瀏覽器,比如用處很廣的Bootstrap@3.x版本。
3. 伸縮和行內結合的方式:雅虎的Pure。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 克拉玛依市| 信丰县| 通渭县| 中西区| 和林格尔县| 英山县| 镇赉县| 乌拉特后旗| 通化市| 沙湾县| 沂源县| 莎车县| 漯河市| 论坛| 盐津县| 灯塔市| 浏阳市| 五家渠市| 疏勒县| 揭阳市| 鹤庆县| 阿勒泰市| 阿瓦提县| 新宾| 蒙山县| 徐州市| 岫岩| 阿城市| 稷山县| 定结县| 襄城县| 南丹县| 和田市| 涟源市| 华池县| 深圳市| 汤阴县| 桐城市| 临漳县| 皋兰县| 蒲江县|