box-sizing讓CSS布局更加直觀

來源:互聯網
上載者:User

   box-sizing 屬性允許您以特定的方式定義匹配某個地區的特定元素。box-sizing是CSS3的box屬性之一。一說到CSS的盒模型(Box model)我想很多人都會比較煩,特別是對於新手,然而這個Box model又是我們CSS運用中比較重要的一個屬性。那麼CSS3的Box-sizing跟盒模型有什麼關係呢?第一句話就說了,Box-sizing是CSS3的Box屬性之一,那他當然也遵循CSS的Box model原理,為了能更好的學習和理解這個Box-sizing屬性,我們有必要先瞭解一下CSS中Box model的原理。

  例如,假如您需要並排放置兩個帶邊框的框,可通過將 box-sizing 設定為 "border-box"。這可令瀏覽器呈現出帶有指定寬度和高度的框,並把邊框和內邊距放入框中。

  如果你寫過CSS或者你接觸過CSS,相信你一定對盒子模型一點都不陌生。CSS其中一個讓人比較困惑的地方就在於它的盒子模型中關於高度和寬度的計算,別說那些初學者了,就是寫過很久CSS的人也一樣會有如此的感覺。CSS中的高度和寬度總是不那麼直觀,讓你總是很困惑,不能一眼就能分辨出其高度和寬度。有的時候你希望它的寬度是100px,但實際情況卻總不是這樣。然而,設定正確的box-sizing的屬性,盒子的高度和寬度會的確就是你設定的100px。是否有點暈了呢,好了,下面我詳細介紹下。

  1、盒子模型

  關於CSS重要的一個概念就是CSS盒子模型。它控制著頁面這些元素的高度和寬度。盒子模型多少會讓人產生一些困惑,尤其當涉及到高度和寬度計算的時候。真正盒子的寬度(在頁面呈現出來的寬度)和高度,需要加上一些其它的屬性,例如:

  padding + border + width = 盒子的寬度

  padding + border + height = 盒子的高度

  這看起來並不是那麼直觀,那麼我們看一個圖:

  這意味著,如果我們設定一個寬度為200px,而實際呈現的盒子的寬度可能會大於200px(除非沒有左右邊框和左右補白)。這可能看起來比較怪,CSS設定的寬度僅僅是內容區的寬度,而非盒子的寬度。同樣,高度類似。

  這導致的直接結果是當我們希望頁面呈現的盒子的寬度是200px的時候,我們需要減去它的左右邊框和左右補白,然後設定為對應的CSS寬度。例如上圖,我們設定希望盒子寬度為200px,則需要先減去左右補白各20px,左右邊框各1px,然後設定對應的CSS寬度158px。這讓代碼看起來有點匪夷所思,尤其是對新手來說(我就在這個問題上困惑了很久)。我明明設定的寬度是158px,它卻呈現了200px。這多少有點不那麼直觀和一目瞭然。

  幸運的是,我們有更好的方法達到我們想要的目的。

  2、box-sizing

  與上面不同的是,當你設定box-sizing:border-box以後,這就能達到你想要的目的。例如,上面我們想要一個寬度為200px的盒子,那麼我們直接設定寬度為200px。是不是看起來清晰多了。當再設定它的左右邊框和左右補白後,它的內容區會自動調整。這可能更直接和一目瞭然。CSS代碼如下:

  div {

  box-sizing: border-box;

  width: 200px;

  padding: 20px;

  border: 1px solid #DDD;

  }

  如下圖:

  實際上,這更被設計者和開發人員推崇。

  3、box-sizing其它的值

  box-sizing同樣可以設定為content-box,這樣設定CSS的寬度的時候僅僅是設定的它的內容區的寬度,瀏覽器預設都是如此。如我們1中舉得例子。

  box-sizing也可以設定為inherit,也就是說從父級元素中繼承該屬性。

  4、瀏覽器安全色性

  IE8及以上版本支援該屬性,Firefox 需要加上瀏覽器廠商首碼-moz-,對於低版本的IOS和Android瀏覽器也需要加上-webkit-。實際上,很多reset.css或者normal.css裡都包含如下CSS語句,也是比較贊成的用法:

  *, *:before, *:after {

  -moz-box-sizing: border-box;

  -webkit-box-sizing: border-box;

  box-sizing: border-box;

  }

  結束語

  看到這兒,相信你肯定明白了box-sizing的含義。那麼同樣告訴你的是,這是很多前端面試題常見的知識點之一。面試官通常會問你,CSS設定如下語句後*{box-sizing:border-box;},其作用是什麼?相信你看到現在肯定會清楚的回答這個問題了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.