屌的不要不要的 box-sizing

2021-03-02 志語自樂

在舊有的低版本 IE 中,尤其是 IE6 的時代,那個時候是沒有所謂的 box-sizing這個屬性,而是有一個叫怪異模式(Quirks mode)的玩意。為什麼要提到這個怪異模式(Quirks mode)呢,主要還是因為這個模式下計算頁面元素的盒模型跟標準模式是存在差異的,簡單來說就跟現在我們用 box-sizing: border-box; 是類似的。但,很關鍵的事是在怪異模式(Quirks mode)下還會引發其它問題,似乎好像是 JS 方面的,我不懂,所以,跳過盒模型的模式,不談!就扯一下屌的不要不要的 box-sizing。

說實在的,對於 CSS 中的每個屬性,從個人感受來說,都很屌。鑑於現在大家都在寫移動端頁面居多,然後經常要去算一個元素所佔據的空間大小,並且都會去增加 box-sizing 這個屬性。那麼對於這個屬性不知道大家是否有跟我一樣的感覺:好屌,好爽!

width:100% + padding: 0 10px

這樣的情況下,寬度還是只要計算百分百就好了,完全不用去擔心超過 100% 的寬度,導致容器的撐開。

為什麼增加了這個屬性,哦,還要一個屬性值 border-box,那麼為什麼box-sizing: border-box;這個屬性和屬性值會讓我們不用擔心元素超過 100% 的寬度呢(其實高度也是一樣的,只是我們一般都考慮寬度而已)。

考慮為什麼之前,我們先看一下 box-sizing 的幾個屬性值:

然後我們再看一下在一個頁面中的塊級元素所應該具有的盒模型是包含哪些的,看這個大家都應該熟悉的圖:


從圖中可以看到中心部分是 content 內容區域,然後依次往外是:padding、border、margin(請忽略最外層的  position )

為了偷懶,還是就先看寬吧,高這個其實是類似的。

在扯box-sizing屬性的幾個屬性值之前,再看一下標準模式中計算盒模型的寬度是怎麼樣的:

margin-left + border-left + padding-left + content(width) + padding-right + border-right + margin-right

然後順帶看一下前面提到的 IE 怪異模式(Quirks mode)下是怎麼計算一個盒模型的寬度的:

margin-left + content(width) + margin-right

簡單了很多,對吧,其實這裡的 content(width) 是包含了 padding 和 border 這兩個屬性值的。

border-left + padding-left + content(width) + padding-right + border-right

這個時候回頭看一下 box-sizing 的兩個屬性值,套進去後,就是這樣了:

       

得,扯到最後又回到前面說的不想扯的盒模型,好啊,其實這個box-sizing就是改變盒模型計算方式的,在寫移動端頁面的時候,有時候為了方便(也有人為了省事)就直接全部用* {box-sizing: border-box;}了,至於怎麼用比較好,完全是看個人所好。

哦,對了,還有一個,就是盒模型這個要理解的話,以前我是用快遞盒子來做比喻的:

margin: 多個快遞盒子堆放或者平放時的間距;

border: 每個快遞盒子的那個紙盒部分,作為與外界隔開的媒介;

padding: 快遞盒子與物體之間的填充物,避免磕磕碰碰導致物件損壞的那部分;

width: 就是盒子裡面最終需要用來快遞的那個物件

那么正常情況下,我們都是會塞點填充物來保護物件的,但有時候呢,其實我們可以不需要這些填充物來保護。


閒扯CSS的那些事兒,沒啥事兒就談談CSS

不深入,只扯淡

扯點自己想說的,或許也是你想聽的,沒有高深的東西,但應該不是平庸的……

相關焦點

  • css3 box-sizing屬性筆記
    box-sizing屬性定義及用法box-sizing屬性是css3中新增的屬性,允許你以某種方式定義某些元素,以適應指定區域(假如您需要並排放置兩個帶邊框的框,可通過將 box-sizing屬性設置為"border-box",這可令瀏覽器呈現出帶有指定寬度和高度的框,並把邊框和內邊距放入框中
  • 【第149期】讓CSS布局更加直觀:box-sizing
    2、box-sizing與上面不同的是,當你設置box-sizing:border-box以後,這就能達到你想要的目的。例如,上面我們想要一個寬度為200px的盒子,那麼我們直接設置寬度為200px。是不是看起來清晰多了。當再設置它的左右邊框和左右補白後,它的內容區會自動調整。這可能更直接和一目了然。
  • 綠茶屌:白天沒屌事,晚上屌沒事
    防得住綠茶婊,你防得住綠茶屌麼?作者:範臻什麼叫綠茶屌想要防範綠茶屌,就要先知道綠茶屌是什麼。仔細想想你們身邊有沒有這樣的男生:整個朋友圈就一個「無指向的隔空喊話,沒由來的無病呻吟」。配圖不是木棉吉他就是瘦金書法,配文除了文縐縐的宋詞唐詩,就是夏目漱石的「今晚月色真美」或者王小波的「你好啊,李銀河」。
  • 這麼「屌」的糖果店你要不要來?
    這家糖果店是真的」屌「,各種形態的糖果們就在店裡誕生,進門就會看見店員在忙碌著製作糖果,將糖從最原始的狀態,揉成細細的一條再切開成段,變成可愛的卡通糖果
  • 《公主連結》BOX是什麼意思 BOX遊戲術語詞義解析
    box的作用就是讓大佬根據你的隊伍角色和練度,來提出一些培養或者打工會戰的意見,這對於每個新手玩家而言都很重要,亮出自己的BOX請教大佬可以少走很多彎路。 box圖片的選取上,建議用編隊界面這種涵蓋信息多的box,裡面的角色種類和等級練度一目了然。九宮格那種就不要拿出來了,截幾張圖就算是好心的大佬也懶得去看。