前端入門篇(二):利用Div + CSS快速布局頁面

在各類智能手機和平板出現前的很長一段時間里,Web網頁都是通過表格進行布局的。由于表格在視覺呈現上的直觀,早期很多WYSIWYG(所見即所得)的網頁設計軟件通常也多使用表格。

但是這種布局方式有很大的局限性——比如,同一行或列的單元格在長度、寬度上會相互影響和制約等。如今,表格式布局早已不再流行,本文就此介紹將其「拍死在沙灘上」、目前最為廣泛采用的網頁布局方式——Div + CSS。

一、什么是Div+CSS

所謂Div + CSS,是指通過HTML「層」標簽——<div></div>,輔以CSS中對該「層」寬度、排列等樣式的定義,來實現網頁布局的一種方式。如果你不懂什么是CSS和HTML,可以參考前端入門篇(一):如何把設計稿還原成真實網頁

二、為什么要用Div

為什么要用Div取代Table?一言以蔽之:靈活。

Table的格式其實是一定的——首先要有一個表格,其次表格里要有行,每一行又分為許多列(單元格)。如果在同一行的某個單元格中,要布局放入更多內容,而左右兩邊的單元格不變的話,要怎么實現?

只能在單元格里再嵌套一個表格。如果嵌套層數少那還好,一旦層數多起來,絕逼要瘋。這還是不涉及修改的情況。如果某天你老板拍腦袋說,把登陸模塊給我從右邊移到左邊,你就等著加班吧。

Tabel 嵌套示意

與之相對地,用Div布局就遠為靈活。首先,每一個<div></div>中都可以嵌入另外一個或幾個<div></div>,子子孫孫可無窮盡也。另外,要修改某個Div的布局位置,也只需要相應的調整其CSS樣式即可。

三、如何連接Div和CSS

但是Div所謂的靈活也并非隨心所欲、胡亂排布,它也是遵守一定的排布規則的——事實上,它在排布上與Table還是有些相似的。具體來說,Table的排布方式一般如下。

<table>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>

而一般Div的排布方式也與之類似,只不過并沒有表格<table></table>、行<tr></tr>、單元格<td></td>這許多層級,只是單一層級的<div></div>而已。

<div>
  <div>
    <div></div>
    <div></div>
  </div>
</div>

那么問題來了,這些Div長得一毛一樣啊,我怎么讓瀏覽器知道它們是在什么位置的?這里就輪到CSS出場了。我們通過CSS樣式的定義,再在HTML的<div></div>中調用這些樣式,就可以實現Div和CSS的連接。

舉例來說,如果我們在CSS中聲明了一個樣式——.row{width:100%;},那么在HTML中就可以注明某一或某些Div適用這一類,來調用這一樣式。如下,第二層的Div就使用了row這個樣式。

<div>
  <div class=“row”>
    <div></div>
    <div></div>
  </div>
</div>

四、將頁面等分成12欄

分欄布局是使用Div+CSS布局網頁的一種主要布局方式,主要通過把頁面等分成12欄來實現。為什么要分成12欄?話說網頁被分成12欄也太恐怖了吧,在小點的屏幕上每一欄大概只有兩個手指寬吧?啊喂,會引發密集恐懼癥的吧?

等等,你先別急,先來想想一般你看到的網站都會分成幾欄?一欄?有的。兩欄?也有。三欄?這個好像還比較常見。四欄?這個也比較常見。欄數再加下去也不是沒有,但是就像之前說的,恐怕要引發密恐了。

那么這幾個數字和12有什么關系呢?很簡單,都能整除12。所以說,把頁面分成12欄的好處就是——能利用合并欄來將頁面等分成2、3、4欄,如下圖。

12欄頁面布局

而在利用這個12 column grid以后,在使用CSS布局上也會有非常大的好處。具體是什么好處呢?我們來直接看代碼的實例吧。首先我們在CSS中,定義如下樣式。

.row {
    width:100%;
    display:flex; /*這是為了讓同一row中的Div橫向排列而不是默認的縱向*/
}
.col-1 {
    width: 8.33%;
}
.col-2 {
    width: 16.67%;
}
.col-3 {
    width: 25%;
}

/*繼續col-4,col-5一直定義下去直到col-12,具體省略*/

.col-12 {
    width:100%;
}

有了這些不同寬度的column樣式定義,我們就可以開始自由地排列頁面中的Div啦,舉例來說,假設下邊圖中的黑框就是我們網頁中要布局的層,那我們就可以用其下的代碼來實現。

假設圖中黑框是 Div
<div class=“row”>
  <div class=“col-7”></div>
  <div class=“col-5”></div>
</div>

<div class=“row”>
  <div class=“col-12”></div>
</div>

<div class=“row”>
  <div class=“col-3”></div>
  <div class=“col-3”></div>
  <div class=“col-3”></div>
  <div class=“col-3”></div>
</div>

怎么樣,很簡單吧?

關于Div+CSS布局網頁的好處,除了上文所述外,還有就是能應用于響應式(Responsive)頁面。至于什么是響應式頁面以及如何適配,請移步前端入門篇(三):響應式網頁設計101

原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,796評論 1 92
  • 轉載請聲明 原文鏈接地址 關注公眾號獲取更多資訊 第一部分 HTML 第一章 職業規劃和前景 職業方向規劃定位...
    前端進階之旅閱讀 16,599評論 32 459
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 今天姐姐例行請我吃飯(……感覺自己也是越來越理所當然了) 吃到一半姐姐突然神神秘秘地拿根簽子指著我說 我問你個事 ...
    安默尼閱讀 340評論 0 2
  • 我曾經覺得這一天很遠。它還是來了,就在今天,我站在了奔三馬拉松的鐘點。 時光對每個人其實都是寬容的。它清清楚楚地告...
    吾可救耀閱讀 308評論 0 1