CSS3:box-sizing

轉(zhuǎn)載自(http://web.jobbole.com/83915/)

盒子模型

Box-sizing屬性一直比較陌生,在樓主平時(shí)的開(kāi)發(fā)過(guò)程中一直都沒(méi)機(jī)會(huì)見(jiàn)識(shí),以前遇到應(yīng)該用它解決的問(wèn)題,很無(wú)恥的用了其他偷工減料,拿驢湊馬的招來(lái)完成。后來(lái)才通過(guò)網(wǎng)上資料查到,原來(lái)它是設(shè)置box模型的計(jì)算方式的一種屬性。說(shuō)到box模型,了解w3c的同學(xué)一定不會(huì)陌生,它對(duì)盒子模型的定義如下:把每一個(gè)網(wǎng)頁(yè)中的元素都看作是一個(gè)盒子,這個(gè)盒子有邊框(border),有內(nèi)容(content),有和在其他外面的盒子的間距(margin),有和在其內(nèi)盒子的邊距(padding)。它的高度和寬度,取決于它的內(nèi)容和邊框以及內(nèi)邊距的總和。在瀏覽器中,通過(guò)開(kāi)發(fā)者工具,我們可以很容易地看到一個(gè)元素的盒子模型:



從上圖可以看到,這個(gè)元素的寬和高分別是100px和100px。查看css代碼,我們也可以看到它的width和height分別為100px和100px。到此為止,一切都很簡(jiǎn)單,沒(méi)有問(wèn)題。但是,如果我們接下來(lái)給它設(shè)置一個(gè)border呢?那么他的寬和高是多少呢?



通過(guò)查看元素,我們發(fā)現(xiàn),這個(gè)元素雖然設(shè)置了100px的寬度和100px的高度,但實(shí)際上,在添加了內(nèi)邊距和邊框后,它的寬度和高度變成了104px和104px;所以,元素實(shí)際的寬度和高度是在設(shè)置的width和height屬性后加上padding和border的寬度和高度的。雖然只是一個(gè)小小的知識(shí)點(diǎn),但常常會(huì)給我們?cè)斐梢恍┞闊?

小問(wèn)題,大麻煩

來(lái)看一個(gè)經(jīng)常遇到的切換導(dǎo)航。在手機(jī)端經(jīng)常的設(shè)計(jì)中經(jīng)常可以遇到此問(wèn)題,頂部的tab切換標(biāo)簽。設(shè)計(jì)給的標(biāo)注是左右對(duì)半分,并且擁有各自的邊框,然后自由伸縮和切換。像下面那樣。



一開(kāi)始,你會(huì)感覺(jué)這很容易,因?yàn)闊o(wú)非是兩個(gè)寬度為50%的div并排排列了。但是開(kāi)始做的時(shí)候,你才會(huì)知道被設(shè)計(jì)師的邊框坑了。因?yàn)槿绻阍O(shè)置了width為50%,那么兩個(gè)div是100%,除此之外還有兩個(gè)div的左右邊框的長(zhǎng)度是沒(méi)地方放置的!也就是說(shuō),當(dāng)你把它們并排放置在一起的時(shí)候,實(shí)際上它們總寬度是100% + 4px!,多出了4個(gè)px,這導(dǎo)致了右邊的box會(huì)掉下去(如果你用的float)。如果你用box布局,在使用了flex自由延伸后屬性(請(qǐng)見(jiàn)我之前的博客)不會(huì)出現(xiàn)這個(gè)情況,但如果你還不會(huì)box布局,而又希望簡(jiǎn)單解決此問(wèn)題(尤其是在考慮padding的固定填充距離后box布局也無(wú)法完美解決),那么是時(shí)候該學(xué)習(xí)box-sizing了(只需要1000ms)。

box-sizing:

box-sizing是css3中出現(xiàn)的屬性,它允許你設(shè)置或檢索對(duì)象的盒模型組成模式,通過(guò)修改屬性的值對(duì)盒子模型的概念做設(shè)置。我們知道,標(biāo)準(zhǔn)的盒子模型的寬是content+borderwidth+padding。box-sizing屬性的值中有一個(gè)就是解釋標(biāo)準(zhǔn)模型的值,它是默認(rèn)的content-box,一般情況下,我們不使用它。我們使用的是它的其他值,比如:border-box,含義是將盒子的border和padding計(jì)算到設(shè)置的width中,而不是實(shí)際寬度中。所以,如果你設(shè)置width為100px,而border為1px的時(shí)候,盒子的實(shí)際大小仍舊是100px而不是102px。用這個(gè)屬性,我們就可以完美地解決上面遇到的難題了:只需要在給兩個(gè)div的css上寫(xiě)下box-sizing:border-box就可以了,保證兩個(gè)div等寬,擁有1px長(zhǎng)度,至于它們的框度是不是50%,你可以喊設(shè)計(jì)師自己量。除了以上兩個(gè)值外,box-sizing還有一個(gè)padding-box值,顧名思義,就是把內(nèi)邊距計(jì)算在設(shè)置的框度內(nèi),而border是不計(jì)算的。

兼容性

box-sizing 目前被大多數(shù)瀏覽器支持, 但I(xiàn)E家族只有IE8版本以上才支持,雖然現(xiàn)代瀏覽器支持box-sizing,但有些瀏覽器還是需要加上自己的前綴,Mozilla需要加上-moz-,Webkit內(nèi)核需要加上-webkit-,Presto內(nèi)核-o-,IE8-ms-,所以box-sizing兼容瀏覽器時(shí)需要加上各自的前綴。當(dāng)然,對(duì)于需要在i8以下的瀏覽器中解決上面提到過(guò)的tab排列問(wèn)題,你是不需要這個(gè)屬性的,因?yàn)樗鼈儗?duì)盒子模型的解釋默認(rèn)值就是border-box。這也是IE這個(gè)逐漸失勢(shì)的頑固的老古董和w3c對(duì)盒子模型解釋的差異。就像下面那張圖一樣:


結(jié)束語(yǔ)

對(duì)于box-sizing的屬性從無(wú)知到了解,最后到運(yùn)用自如,得益于老大的提點(diǎn),簡(jiǎn)單的屬性在實(shí)際生產(chǎn)中解決了很多布局問(wèn)題。從根本上說(shuō)還是自己見(jiàn)識(shí)和基礎(chǔ)知識(shí)太少了,寫(xiě)這篇博客放到此處提醒自己,多學(xué)一點(diǎn)知識(shí)就多解決一點(diǎn)難題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,083評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,706評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,442評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,802評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,983評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,287評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,486評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,710評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,116評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,412評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,224評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,462評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,780評(píng)論 1 92
  • 1、屬性選擇器:id選擇器 # 通過(guò)id 來(lái)選擇類名選擇器 . 通過(guò)類名來(lái)選擇屬性選擇器 ...
    Yuann閱讀 1,652評(píng)論 0 7
  • 在一個(gè)文檔中,每個(gè)元素都被表示為一個(gè)矩形的盒子。盒子模型具有4個(gè)屬性['外邊距(margin)','邊框(bord...
    weiqinl閱讀 1,329評(píng)論 2 2
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,326評(píng)論 0 11
  • H5移動(dòng)端知識(shí)點(diǎn)總結(jié) 閱讀目錄 移動(dòng)開(kāi)發(fā)基本知識(shí)點(diǎn) calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,599評(píng)論 0 26