Bootstrap3 Grid system原理及應(yīng)用詳解
剛開始用Bootstrap的格子系統(tǒng)寫布局的時(shí)候遇到了這樣一個(gè)問題:
我的頁(yè)面中有這樣一個(gè)布局
我希望當(dāng)屏幕的寬度小于他們倆寬度之和的時(shí)候,右邊的部分會(huì)掉下來(lái),他們垂直擺放。
而我用col-xs-6的話,右邊的盒子永遠(yuǎn)都不會(huì)掉下來(lái)。
文字就變得這么丑。
如果我用col-sm-6的話,右邊的盒子又會(huì)太早掉下來(lái)。
此時(shí)的屏幕寬度是766px,他就已經(jīng)堆疊排放了,兩邊留下了大片空白,還是很丑。
而Bootstarp沒有提供中間的選項(xiàng)了。
想要解決這個(gè)問題,必須要弄清楚這種響應(yīng)式布局的是如何工作的。
Bootstarp將這種機(jī)制成為Grid system。
思想:
將屏幕劃分成相等大小的格子,一般劃分成12,24,或32份。Bootstrap選擇默認(rèn)劃分成12份。
規(guī)則:
1.數(shù)據(jù)行(.row)必須包含在定寬容器(.container)或滿寬容器(.container-fluid)中,以便為其賦予合適的對(duì)齊方式和內(nèi)距(padding)。
2.具體內(nèi)容應(yīng)當(dāng)放置在列容器(column)之內(nèi),而且只有列(column)才可以作為行容器(.row)的直接子元素
3.列與列之間有30px的間距。
4.提供4種不同類型的列:
在我看來(lái),這張圖就是Grid system的精髓所在,通過試驗(yàn)可以發(fā)現(xiàn):
當(dāng)屏寬小于768px(即小屏)時(shí),列的劃分以.col-xs-后面的數(shù)字為準(zhǔn)。如果沒定義.col-xs-,就會(huì)變成單列且寬度和row相等。
當(dāng)屏寬在768px和992px之間(即平板屏)時(shí),列的劃分以.col-sm-后面的數(shù)字為準(zhǔn)。如果沒有定義col-sm-,以.col-xs-為準(zhǔn)。
當(dāng)屏寬在992px和1200px之間(即中屏)時(shí),列的劃分以.col-md-后面的數(shù)字為準(zhǔn)。如果沒有定義.col-md-,以col-sm-或col-xs-為準(zhǔn)。
當(dāng)屏寬大于1200px(即大屏)時(shí),列的劃分以.col-lg-后面的數(shù)字為準(zhǔn)。如果沒有定義.col-md-,以.col-md-或col-sm-或col-xs-為準(zhǔn)。
核心原理:
這種響應(yīng)機(jī)制是怎么實(shí)現(xiàn)的呢?
用一個(gè)例子來(lái)研究一下,在HTML中寫一個(gè)這樣的結(jié)構(gòu):
<div class="container"> <div class="row"> <div class="col-xs-3 col-md-4 col-sm-6 col-lg-2">col-xs-3 col-sm-6 col-md-4 col-lg-2</div> <div class="col-xs-3 col-md-8 col-sm-6 col-lg-10">col-xs-3 col-sm-6 col-md-8 col-lg-10</div> </div> </div>
當(dāng)
當(dāng)屏幕寬為1280px(大屏)時(shí),這一行是二十分,md sm xs的寬度都失效了
當(dāng)屏幕寬為996px(中屏)時(shí),這一行是四八分,可以看到sm xs的寬度失效。
當(dāng)屏幕寬為980px(平板屏)的時(shí)候 ,這一行是六六分。xs的寬度失效。
當(dāng)屏幕寬為600px(小屏)時(shí),
所以他的源碼應(yīng)該是這樣的:
//其他.col-xs- .col-xs-3 { width: 25%; } //其他.col-xs- 所有xs { float:left; } @media (min-width: 768px){ 所有sm { float:left; } //其他.col-sm- .col-sm-6 { width: 50%; } //其他.col-sm- } @media (min-width: 992px){ 所有md { float:left; } //其他.col-md .col-md-8{ width: 66.66666667%; } //其他.col-md } @media (min-width: 1200px){ 所有l(wèi)g { float:left; } //其他.col-lg- .col-lg-10 { width: 83.33333333%; } //其他.col-lg- }
順序不能改變,因?yàn)閎oostrap3的原則就是mobile first。
col-xs-*永遠(yuǎn)都是單行是因?yàn)椋膚idth和float都不定義在@media里面,不管屏幕怎么變,他都有自己的寬度和浮動(dòng)。
所以,如果我想要讓屏幕小于450px時(shí)兩個(gè)盒子堆疊排列的話,我需要讓xs失去自己的寬度。
@media(max-width: 450px){ .col-xs-6 { width: 100%; } }
添加一個(gè)這樣的代碼,我想要的效果就可以實(shí)現(xiàn)了。
其他原理:
1.列的劃分和嵌套是用百分比+浮動(dòng)實(shí)現(xiàn)的。
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; }
2.列與列之間的間距是由每一列(column)的padding實(shí)現(xiàn)的,最兩邊的列的padding由(.row)的負(fù)margin抵消:
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; } .row { margin-right: -15px; margin-left: -15px; }
3.列偏移是通過在列的左邊添加margin實(shí)現(xiàn)的。
.col-md-offset-12 { margin-left: 100%; } .col-md-offset-11 { margin-left: 91.66666667%; } .col-md-offset-10 { margin-left: 83.33333333%; } .col-md-offset-9 { margin-left: 75%; } .col-md-offset-8 { margin-left: 66.66666667%; } .col-md-offset-7 { margin-left: 58.33333333%; } .col-md-offset-6 { margin-left: 50%; } .col-md-offset-5 { margin-left: 41.66666667%; } .col-md-offset-4 { margin-left: 33.33333333%; } .col-md-offset-3 { margin-left: 25%; } .col-md-offset-2 { margin-left: 16.66666667%; } .col-md-offset-1 { margin-left: 8.33333333%; } .col-md-offset-0 { margin-left: 0; }
4..col-md-push-*和 .col-md-pull-*是通過設(shè)置relative定位的盒子的left和right實(shí)現(xiàn)的。
.col-md-pull-12 { right: 100%; } .col-md-pull-11 { right: 91.66666667%; } .col-md-pull-10 { right: 83.33333333%; } .col-md-pull-9 { right: 75%; } .col-md-pull-8 { right: 66.66666667%; } .col-md-pull-7 { right: 58.33333333%; } .col-md-pull-6 { right: 50%; } .col-md-pull-5 { right: 41.66666667%; } .col-md-pull-4 { right: 33.33333333%; } .col-md-pull-3 { right: 25%; } .col-md-pull-2 { right: 16.66666667%; } .col-md-pull-1 { right: 8.33333333%; } .col-md-pull-0 { right: 0; } .col-md-push-12 { left: 100%; } .col-md-push-11 { left: 91.66666667%; } .col-md-push-10 { left: 83.33333333%; } .col-md-push-9 { left: 75%; } .col-md-push-8 { left: 66.66666667%; } .col-md-push-7 { left: 58.33333333%; } .col-md-push-6 { left: 50%; } .col-md-push-5 { left: 41.66666667%; } .col-md-push-4 { left: 33.33333333%; } .col-md-push-3 { left: 25%; } .col-md-push-2 { left: 16.66666667%; } .col-md-push-1 { left: 8.33333333%; } .col-md-push-0 { left: 0; }
知道了這些原理,也就知道了他的功能和局限,也就可以改動(dòng)任何地方,讓他為你效勞了。
應(yīng)用:
如果想要讓中屏幕切換到平板屏幕之后,布局從三列變成兩列,可以寫成:
<div class="row"> <div class="col-sm-6 col-md-4">1</div> <div class="col-sm-6 col-md-4">2</div> <div class="col-sm-6 col-md-4">3</div> <div class="col-sm-6 col-md-4">4</div> <div class="col-sm-6 col-md-4">5</div> <div class="col-sm-6 col-md-4">6</div> </div>
效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Bootstrap3使用typeahead插件實(shí)現(xiàn)自動(dòng)補(bǔ)全功能
- 基于Bootstrap3表格插件和分頁(yè)插件實(shí)例詳解
- 論Bootstrap3和Foundation5網(wǎng)格系統(tǒng)的異同
- WEB前端開發(fā)框架Bootstrap3 VS Foundation5
- 使用bootstrap3開發(fā)響應(yīng)式網(wǎng)站
- Bootstrap3制作圖片輪播效果
- Bootstrap3制作自己的導(dǎo)航欄
- bootstrap3 兼容IE8瀏覽器!
- 學(xué)習(xí)使用bootstrap3柵格系統(tǒng)
- 基于bootstrap3和jquery的分頁(yè)插件
相關(guān)文章
獲取陰歷(農(nóng)歷)和當(dāng)前日期的js代碼
這篇文章主要為大家詳細(xì)介紹了獲取陰歷(農(nóng)歷)日期的js代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02JavaScript語(yǔ)法高亮插件highlight.js用法詳解【附highlight.js本站下載】
這篇文章主要介紹了JavaScript語(yǔ)法高亮庫(kù)highlight.js用法,詳細(xì)分析了highlight.js的下載、調(diào)用及具體使用技巧,需要的朋友可以參考下2016-11-11JavaScript forEach中return失效問題解決方案
這篇文章主要介紹了JavaScript forEach中return失效問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06JavaScript實(shí)現(xiàn)全選和全不選操作
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)全選和全不選操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09zTree實(shí)現(xiàn)節(jié)點(diǎn)修改的實(shí)時(shí)刷新功能
在實(shí)際應(yīng)用中會(huì)遇到動(dòng)態(tài)操作樹各節(jié)點(diǎn)的需求,在增加樹節(jié)點(diǎn)后如何實(shí)時(shí)動(dòng)態(tài)刷新樹就十分有必要了。這篇文章主要介紹了zTree實(shí)現(xiàn)節(jié)點(diǎn)修改的實(shí)時(shí)刷新功能,需要的朋友可以參考下2017-03-03常見的JavaScript內(nèi)存錯(cuò)誤及解決方法
這篇文章主要介紹了常見的JavaScript內(nèi)存錯(cuò)誤,JavaScript?不提供任何內(nèi)存管理操作。相反,內(nèi)存由?JavaScript?VM?通過內(nèi)存回收過程管理,該過程稱為垃圾收集。下面我們就來(lái)看看下面文章對(duì)JavaScript內(nèi)存錯(cuò)誤的各種舉例說明吧2021-12-12JavaScript+Canvas實(shí)現(xiàn)簡(jiǎn)單的柱狀圖
這篇文章主要為大家詳細(xì)介紹了JavaScript如何利用Canvas實(shí)現(xiàn)繪制簡(jiǎn)單的柱狀圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10