一. 整體架構

1. CSS-12柵格系統
2.基礎布局組件
3.jQuery
4.響應式設計
5.css插件
6.js插件
二. 柵格系統
1.基本實現過程

如圖,在<body class="container">內包含若干個<div class="col-md-“1-12數字”">col-md-“1-12數字”></div>效果是
2. 實現方案
(1)偏移(.col-尺寸大小-offset-*)
把整個col向右邊偏移,在源碼實現上,.col-尺寸大小-offset-x 就是margin-left:8.33333333333...*x;
1
|
<
div
class
=
"col-md-8 col-md-offset-2"
>col-md8</
div
>
|

1
2
|
<
div
class
=
"col-md-8"
>col-md8</
div
>
<
div
class
=
"col-md-3 col-md-offset-1"
>col-md3</
div
>
|

(2)嵌套
柵格系統的col是可以針對父級的row進一步再進行百分比的划分,比如說:
1
2
3
4
5
6
7
8
9
10
11
|
<
div
class
=
"row"
>
<
div
class
=
"col-sm-12"
>我是整行<
br
>
<
div
class
=
"col-sm-6"
>我是一半
<
div
class
=
"row"
>
<
div
class
=
"col-sm-6"
>我是6/12*6/12=1/4</
div
>
</
div
>
</
div
>
<
div
class
=
"col-sm-6"
></
div
>
</
div
>
</
div
>
|
(3)排序
強行把當前列向左或者向右推拉
只有兩個語句:col-尺寸大小-push-*()和col-尺寸大小-pull-*()
1
2
3
|
<
div
class
=
"row"
>
<
div
class
=
"col-sm-3 col-sm-push-6"
style
=
"background: #abc"
>col3</
div
>
</
div
>
|
col3被強行推了6格。同理<
div
class
=
"col-sm-3 col-sm-pull-1"
style
=
"background: #abc"
>col3</
div
>是向左拉了一格。
效果相當於絕對定位。在源碼實現上,也是做定位:
1
|
.col-md-pull
-8
{
right
:
66.66666666666666%
;}
|
3.響應式柵格若干問題
看起來12列柵格布局實現得很死板,但是組合屏幕尺寸,方案就非常多了
(1)跨設備組合
比如我要為自己的網頁做一適配小屏和中屏的版本,可以把類疊加到class上。
1
|
<
div
class
=
"col-sm-6 col-md-3"
style
=
"background: #abc"
>col3</
div
>
|

到了小屏,表現為1/2
1
|
<
div
class
=
"col-xs-3"
style
=
"background: #abc"
>col3</
div
>
|
到了大屏,依然占25%。
結論:屏幕尺寸向大兼容。向小肯定不兼容!
(2)清除浮動
情景:在小屏幕上一行顯示4個col3,在超小屏幕上一行顯示2個col6,代碼如何實現?
代碼應該是這樣的
1
2
3
4
|
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
|
看起來也沒問題。
如果把第一個div改為
1
|
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col<
br
>我胖了</
div
>
|
效果不佳。
這時應該加一個清除浮動的div到第2/3個div之間第四個就不會飄上去了
1
2
3
4
5
|
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col<
br
>我胖了</
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
<
div
class
=
"clearfix visible-xs"
></
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
<
div
class
=
"col-xs-6 col-sm-3"
style
=
"background: #abc"
>col</
div
>
|
class="clearfix visible-xs",前者表示清除浮動,后者表示在超小屏生效
(3)“強大”的偏移和排序——組合應用的demo
1
2
3
4
5
6
7
8
9
|
<
div
class
=
"row"
>
<
div
class
=
"col-sm-5 col-md-6"
>.col-sm-5 .col-md-6</
div
>
<
div
class
=
"col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0"
>col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0
</
div
>
</
div
>
<
div
class
=
"row"
>
<
div
class
=
"col-sm-6 col-md-5 col-lg-6"
>.col-sm-6 .col-md-5 .col-lg-6</
div
>
<
div
class
=
"col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lgoffset-0"
>col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lgoffset-0</
div
>
</
div
>
|
布置類似這樣的代碼,可以很快實現不同設備寬度下的樣式。
4.重復代碼
作者認為bootstrap的代碼重復率相當之高。
三.CSS組件架構的設計思想
作者把 bootstrap的CSS組件內容總結為8類
(1)基礎樣式
(2)顏色

(3)尺寸
(4)狀態
(5)特殊元素
(6)並列元素
(7)嵌套元素
(8)動畫樣式
1
2
3
4
5
|
<
div
class
=
"progress progress-striped active"
>
<
div
class
=
"progress-bar"
style
=
"width: 45%"
>
<
span
class
=
"sr-only"
>45% Complete</
span
>
</
div
>
</
div
>
|

1
2
3
4
|
.progress.active .progress-bar {
-webkit-animation: progress-bar-stripes
2
s linear infinite;
/* 2秒過度40像素,無限循環 */
animation: progress-bar-stripes
2
s linear infinite;
/* 其他瀏覽器 */
}
|
最后,需要說明,順序很重要。否則樣式大亂套。
四.插件架構
基本規則
(1)布局規則——基於元素自定義屬性
(2)js實現步驟——向jQuery看齊
(3)可以是js聲明,也可以是js調用
1.布局規則:
js會檢測到html中相應的屬性,自動綁定事件,而無需額外的js代碼。
比如說
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<div class=
"btn-group"
>
<button type=
"button"
class=
"btn btn-default dropdown-toggle"
data-toggle=
"dropdown"
>
我的書籍
<span class=
"caret"
></span>
</button>
<ul class=
"dropdown-menu"
>
<li><a href=
"#"
>JavaScript編程精解</a></li>
<li><a href=
"#"
>JavaScript設計模式</a></li>
<li><a href=
"#"
>JavaScript啟示錄</a></li>
<li class=
"divider"
></li>
<li><a href=
"#"
>深入理解Bootstrap3</a></li>
</ul>
</div>
|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<
ul
class
=
"nav nav-tabs"
id
=
"myTab"
>
<
li
class
=
"active"
><
a
data-toggle
=
"tab"
href
=
"#home"
>首頁</
a
></
li
>
<
li
class
=
""
><
a
data-toggle
=
"tab"
href
=
"#profile"
>個人資料</
a
></
li
>
<
li
class
=
"dropdown"
>
<!-- 單擊"我的書籍"時,彈出下拉菜單 -->
<
a
data-toggle
=
"dropdown"
href
=
"#"
class
=
"dropdown-toggle"
>
我的書籍
<
b
class
=
"caret"
></
b
>
</
a
>
<
ul
class
=
"dropdown-menu"
>
<
li
><
a
data-toggle
=
"tab"
href
=
"#dropdown1"
>JavaScript編程精解</
a
></
li
>
<
li
><
a
data-toggle
=
"tab"
href
=
"#dropdown2"
>JavaScript設計模式</
a
></
li
>
<
li
><
a
data-toggle
=
"tab"
href
=
"#dropdown3"
>JavaScript啟示錄</
a
></
li
>
<
li
><
a
data-toggle
=
"tab"
href
=
"#dropdown4"
>深入理解Bootstrap</
a
></
li
>
</
ul
>
</
li
>
</
ul
>
<
div
class
=
"tab-content"
id
=
"myTabContent"
>
<
div
id
=
"home"
class
=
"tab-pane fade active in"
>
<
p
>單擊"首頁"時顯示該區域</
p
>
</
div
>
<
div
id
=
"profile"
class
=
"tab-pane fade"
>
<
p
>單擊"個人資料"時顯示該區域</
p
>
</
div
>
<
div
id
=
"dropdown1"
class
=
"tab-pane fade"
>
<
p
>單擊"JavaScript編程精解"時顯示該區域</
p
>
</
div
>
<
div
id
=
"dropdown2"
class
=
"tab-pane fade"
>
<
p
>單擊"JavaScript設計模式"時顯示該區域</
p
>
</
div
>
<
div
id
=
"dropdown3"
class
=
"tab-pane fade"
>
<
p
>單擊"JavaScript啟示錄"時顯示該區域</
p
>
</
div
>
<
div
id
=
"dropdown4"
class
=
"tab-pane fade"
>
<
p
>單擊"深入理解Bootstrap3"時顯示該區域</
p
>
</
div
>
</
div
>
|