「Luy」CSS盒子模式還是很重要的

前面的一些廢話

其實本文之後用的實例場景分析我在兩個月前就寫好了,只是最近公司的項目真的用上了,所以重溫了一邊。

  • 預覽地址:Luy拖拽組件
  • 倉庫地址

可喜可賀的是,這個需求不算很大,就在上周我的Luy(讀作擼一,但是你就把它讀成擼吧,沒錯就是擼管的擼)已經能夠全面支持react-redux,react-router。我小小的用這個框架構建了這個公司的頁面(因為可以無痛切換回react所以,誰怕誰!?

總之,Luy這個框架經過100+個commits終於來到了支持react生態的地步,文檔也會馬上跟上。

最後,擼的倉庫地址:Luy

CSS盒子模式的解釋

假設,我們有一個需求,讓一個玩意兒在一個框內自由移動,工程師能夠在這個組件上設置padding,border,margin,並且,設置margin的時候,能夠控制邊框的距離,怎麼做?可能抽象了一點。上圖:

相信看過上面預覽地址的朋友一定看到了這個例子,想要做出這個在我的組件裡面相當簡單:

要完成這麼一個需求,你必須要對CSS盒子模型有一個清晰的認識,我們都知道,每一個標籤都是一個小小的方塊,如同盒子一樣,一層包著一層,這就是所謂的盒子模型

不過巧就巧在,他媽的有兩個盒子模型的標準

IE盒子模型標準和W3C標準盒子模型

(以下把w3c簡稱wc)

WC標準盒子模型

  • 屬性width,height只包括了內容的寬高,絕對不包括border和padding.

IE盒子模型

  • 屬性width和height竟然包含了content(內容)+padding+border.

我真是操了,為此,在一些項目中,尤其是特別要注重計算盒子邊界的項目,究其要注意這兩類瀏覽器的區別。

<!DOCTYPE html>指定盒子模型

當然,微軟也不是豬頭三,設計IE的時候雖然另闢蹊徑,但是還是做了一些兼容,那就是在頁面的最上方加上<!DOCTYPE html>,使得所有的瀏覽器都會使用WC標準盒子模型。

在ie8中可以使用box-sizing這個css屬性去切換盒子模型,這個屬性就兩個值:

  • content-box (默認,WC模型)
  • border-box(IE模型)

實際瀏覽器的例子

熟悉前端的同學,一秒就能寫出代碼來:

.luyBox{n width:150px;n height:150px;n /* 木有padding*/n border:1px solid black;n /* 木有margin*/n}n

我們可以看到,我們指定的150,150其實只有中間藍色區塊的大小,這就是標準的WC模型.

我們還可以觀察到的一點就是:border結束以後,margin之外的那一圈其實並不屬於元素的一部分,很多人把margin和padding搞混了,其實這兩個玩意根本不是一樣的。padding是元素內的「填充」,而margin是元素外「額外佔據的面積」.

總結

  • w3c盒子模型和IE模型
  • 使用<!DOCTYPE html>可以避免瀏覽器之間的差異
  • border結束以後,margin之外的那一圈其實並不屬於元素的一部分
  • 最後元素的順序是(W3C模型從內到外)
  • width和height
  • padding
  • border
  • margin

推薦閱讀:

CSS Modules入門Ⅱ:快速上手
前方有最簡單、最實用CSS布局技巧總結!
前端周刊第56期:應接不暇的技術大會
React還是Vue?

TAG:编程 | 前端开发 |