你知不知道HTML元素都是裝在盒子裡的?
不管你要用HTML顯示什麼內容,統統都會被放到一個長方形的盒子裡。但瀏覽器呈現給我們的是一個二維世界,二維世界裡的盒子跟我們這個世界的盒子不一樣。二維世界裡的盒子雖然只有寬和高兩個維度,但從能裝東西這個角度來說,那確實是盒子。
你在瀏覽器介面上看到的所有HTML元素都是裝在盒子裡的,不過你可能看不到盒子,要仔細觀察才能發現一些蛛絲馬跡。而且這個盒子還不止一層,足足有三層,大概是這個樣子的:
圖一:盒子模型示意圖 (源自Introduction to the CSS box model)
你要顯示的內容在最裡面,然後外面有一個padding
層,接下來是border
層,最外一層叫margin
。這三層裡有可能可以直接看到的只有border
,其它兩層雖然你可以感覺到它們的存在,但從視覺上來說,它們是完全透明的。
在繼續往下看之前,先考慮兩個問題:
- 為什麼要搞個盒子?
- 這個盒子關我啥事兒?
第一個問題說來話長,如果確實像知道,還是去找制定CSS標準的那幫人,或者做瀏覽器的聊聊吧。說實話我也不知道為啥。
第二個問題,先假設你要買一套400*100的房子(畫素,不是米!),規格說明是這樣的:
div {
width: 400px;
height: 100px;
border: 6px solid #949599;
margin: 20px;
padding: 20px;
}
你一看width
和height
沒問題,就一蹦一跳地去交錢了。結果算賬的時候,你發現開發商要跟你收492*192的錢,你是不是想問候他老母?但還沒等你開口,他就拿出設計圖:
圖二、盒子模型設計圖(源自Opening the Box Model)
然後甩給你兩個公式:
- width = margin-right + border-right + padding-right + width + padding-left + border-left + margin-left
- height = margin-top + border-top + padding-top + height + padding-bottom + border-bottom + margin-bottom
並且還沒等你看明白,就拿出計算器一通按,然後笑眯眯地看著你,請你自己看492和192是怎麼來的。
- Width: 492 = 20 + 6 + 20 + 400 + 20 + 6 + 20
- Height: 192 = 20 + 6 + 20 + 100 + 20 + 6 + 20
簡單來說,寬度要把所有橫向的數都加起來,不能漏掉margin
、border
和padding
的left
和right
;高度要把豎向的所有數都加起來,不能漏掉margin
、border
和padding
的top
和bottom
。
所以說,你本來只想放一個400px*100px的圖片,但瀏覽器卻要給你492px*192px,如果你毫無心理準備,肯定會有點小激動吧。因此在設計頁面時,一定要掌握盒子模型,要知道還有公攤面積這回事兒。不過這裡只是簡單介紹了一下,要深入瞭解,可以到兩張圖片的出處去看一下。
另外,chrome瀏覽器的開發者工具可以檢視所有頁面元素的盒子。這裡還有個小程式,可以調節幾個關鍵的屬性值,你可以直觀地感受下。
相關文章
- 【譯】10 個你不知道你需要的 HTML 元素HTML
- js在html裡的引用方法JSHTML
- HTML————3、HTML元素HTML
- 你感受到的都是 滯在法相里.
- HTML元素HTML
- HTML 元素HTML
- HTML 裡 img 元素的 src 和 srcset 屬性有何區別?HTML
- 如何在TypeScript程式碼裡獲得HTML元素的css屬性TypeScriptHTMLCSS
- 在HTML裡遍歷檢視HTML
- HTML form 元素HTMLORM
- HTML fieldset元素HTML
- HTML <p> 元素HTML
- HTML p元素HTML
- HTML <img> 元素HTML
- HTML <dialog> 元素HTML
- HTML 元素的預設值HTML
- 說說你對HTML元素的顯示優先順序的理解HTML
- HTML 空元素 And 可替換元素HTML
- 同樣都是“遊戲盒子” 為什麼Roblox在iOS平臺不受限制?遊戲iOS
- 如果你的 HTML 裡全是 div,那就要小心了HTML
- Django中的templates(你的HTML頁面放哪裡)DjangoHTML
- HTML——② HTML 元素、屬性詳解HTML
- HTML input 元素概述HTML
- html塊級元素HTML
- HTML的行內元素與塊級元素的區別?HTML
- HTML常用元素的預設值HTML
- HTML 塊級元素和內聯元素HTML
- 你可能從未聽說過這15個HTML元素方法!HTML
- vue.nextTick()方法,在html元素上面設定ref後,在vue中使用VueHTML
- HTML元素拖動JSHTMLJS
- HTML----元素層級HTML
- html元素,屬性修改HTML
- HTML 自閉和元素HTML
- 【前端】HTML__內聯元素與塊元素前端HTML
- HTML 替換元素與非替換元素HTML
- html 子元素div影響父元素高度HTML
- Html/CSS03(盒子模型傳參)HTMLCSS模型
- 你知道短網址是什麼嗎?知不知道它的實現原理?
- 現在,你可以在雲盒子企業網盤APP發起工作流了APP