成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一道關于 Box-Sizing 的字節面試題

開發 前端
今天講講我很久以前面試字節時遇到的一道 CSS 面試題。

大家好,我是前端西瓜哥。今天講講我很久以前面試字節時遇到的一道 CSS 面試題。

有如下的 HTML 和 CSS 樣式,問兩個塊橙色區域寬高分別為多少?

<style>
.box {
width: 10px;
height: 10px;
border: 1px solid #000;
padding: 2px;
margin: 2px;
background-color: orange;
}
.content-box {
box-sizing: content-box;
}
.border-box {
box-sizing: border-box;
}
</style>
<div class="box content-box"></div>
<div class="box padding-box"></div>

本題考查的是 CSS 盒子模型。

CSS 盒子模型

CSS 盒子組成由 4 個區域組成,從內到外依次為:

  • Content box:內容盒子,用于顯示內容(innerHTML),默認通過 width 和 height 控制寬高。但如果 box-sizing(盒模型的意思)屬性設置為非 content-box 值,運用的規則會發生改變。
  • Padding box:內邊距盒子,通過 padding 屬性可以設置內邊距大小。
  • Border box:邊框盒子,通過 border 屬性可以設置邊框大小及樣式。
  • Margin box:外邊距盒子,通過 margin 屬性設置外邊距大小。

需要注意的是,margin 不計入盒子的實際大小。比如盒子的背景色不會覆蓋到 margin 的范圍。你可以把 margin 當作多個盒子之間的空氣墻,是用來控制盒子間的距離的。

我們可以通過 box-sizing 來控制 width 和 height 被應用到哪個盒子上,下面具體展開來說一說。

標準盒模型(content-box)

對于現代瀏覽器來說,元素默認應用標準盒模型。當然你也可以像下面這樣做顯式的設置。

.box {
box-sizing: content-box;
}

標準盒模型中,width 和 height 屬性用于設置 Content box 盒子。

我們回到題目,先看看第一個橙色塊的寬高。

.box {
width: 10px;
height: 10px;
border: 1px solid #000;
padding: 2px;
margin: 2px;
background-color: orange;
}
.content-box {
box-sizing: content-box;
}
<div class="box content-box"></div>

content 的寬度為 10px。

padding 為 2px,這個 padding 是 padding-left、padding-right、padding-bottom、padding-left 的簡寫屬性。盒子的寬需要將 padding-left 和 padding-right 都計算在內。

然后是左右兩個 border 條。margin 不計算在盒模型中。

所以對于盒模型來說,寬度就是 16px(10 + 2 * 2 + 1 * 2),高度同理,也是 16px。

這個就是答案了嗎?

并不是,因為我們要找到的橙色塊的寬高,其實就是 Padding box 的寬高,這個塊并不包括黑色的 border 邊框線。所以我們的第一個橙色塊寬高為 14px。

我們再深挖一下,如果我們給 border 顏色設置為透明,比如 border: 1px solid rgb(0, 0, 0, 0),你覺得橙色塊寬高為多少?

答案是 16px。背景色會先填充整個盒子,然后再在其上添加 border。如果 border 變成透明了,就會將它原本覆蓋的部分橙色區域顯現出來。

怪異盒模型(border-box)

怪異盒模型,也叫 IE 模型。

IE 瀏覽器的早期版本沒有遵循 CSS 標準,width 和 height 是用來設置 Border box 的寬高,而不是 Content box 的寬高,導致不同瀏覽器的表現不同,毫無疑問是個瀏覽器 bug。

后來 CSS3 引入了 box-sizing,讓開發者可以選擇使用哪種盒模型,提供更好的靈活性。通過下面的設置,我們可以將元素的盒模型設置為怪異盒模型。

.box {
box-sizing: border-box;
}

怪異盒模型中,width 和 height 屬性用于設置 Border box 盒子。即我們直接給元素對應的盒子設置了寬高,再通過 padding 和 border,才能計算出 Content box。

我們看看題目中第二個橙色塊的寬高如何計算。

.box {
width: 10px;
height: 10px;
border: 1px solid #000;
padding: 2px;
margin: 2px;
background-color: orange;
}
.border-box {
box-sizing: border-box;
}
<div class="box border-box">

盒模型寬為 10px,減去 border 的 2px(左右兩條 1px 的邊框線),計算出來的就是 Border box 盒子的寬度 8px。高度計算同理。

所以本題的答案是:第一個橙色塊的寬高為 14px,第二個橙色塊的寬高為 8px。

結尾

對于 DOM 元素來說,我們有兩種盒模型:

  1. box-sizing: content-box:width 和 height 對 Content box 生效的標準盒模型,是默認的盒模型;
  2. box-sizing: border-box:width 和 height 對 Border box 生效的怪異盒模型。

另外,box-sizing 僅支持上面兩種值,是沒有 padding-box 這種盒模型的,不要想太多。

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-02-04 18:24:10

SeataJava業務

2024-10-11 17:09:27

2011-05-23 11:27:32

面試題面試java

2018-03-06 15:30:47

Java面試題

2015-09-02 14:09:19

面試題程序設計

2009-08-11 10:12:07

C#算法

2009-08-11 14:59:57

一道面試題C#算法

2019-09-02 15:06:16

面試字節跳動算法

2024-05-27 07:48:23

2021-05-31 07:55:44

smartRepeatJavaScript函數

2017-11-21 12:15:27

數據庫面試題SQL

2009-08-11 15:09:44

一道面試題C#算法

2023-08-01 08:10:46

內存緩存

2021-03-16 05:44:26

JVM面試題運行時數據

2021-10-28 11:40:58

回文鏈表面試題數據結構

2022-02-08 18:09:20

JS引擎解析器

2017-03-10 09:33:16

JavaScript類型

2011-03-02 10:58:16

SQL server入門面試題

2017-09-13 07:15:10

Python讀寫文件函數

2021-03-27 10:59:45

JavaScript開發代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一区 | 日本一二区视频 | 一级做a爰片性色毛片视频停止 | 国产农村妇女精品一区 | 亚洲美乳中文字幕 | 午夜精品一区二区三区在线视 | 久久精品国产99国产精品 | 欧美5区| 男人的天堂中文字幕 | 91精品久久久 | 国产在线精品一区二区三区 | 欧美成人一区二免费视频软件 | 国产中文 | 亚洲精品中文字幕在线 | 玖玖色在线视频 | 日本中出视频 | 色婷婷狠狠 | 国产精品久久久久一区二区三区 | h免费观看 | 亚洲aⅴ精品 | a毛片 | 亚洲天堂av在线 | 三级黄视频在线观看 | 91精品中文字幕一区二区三区 | 成人av网站在线观看 | 国产jizz女人多喷水99 | 国产精品不卡 | 午夜视频免费在线观看 | 亚洲成人天堂 | 粉嫩一区二区三区四区公司1 | 精品国产乱码久久久久久闺蜜 | 性国产丰满麻豆videosex | 欧美极品一区二区 | 激情网站在线观看 | 亚洲欧美日韩电影 | 中文字幕高清av | 亚洲成人高清 | 午夜精品 | 日韩免费在线 | 国产成人久久av免费高清密臂 | 免费爱爱视频 |