果凍公開課第五課 五分鐘理清盒模型的前世今生

2021-09-11 03:26:17 字數 2465 閱讀 1769

在前端程式設計師眼中,頁面其實可以被視為乙個個盒子組成的

那麼,這些盒子是如何構建起整個頁面的呢?

如何理解盒模型?

文字解析:

在上一節裡面

我們知道了文件流和網頁中的dom都可以看作是盒子

而無論是文件流還是網頁狀態,要把一些元素比如h1 h2 h3放到另外乙個元素中

都需要他們屬於這個元素的子節點,這個元素則是h1 h2 h3的父節點

這個父節點,它就像是乙個打包盒,把它的子級元素打包到一起,然後作為乙個整體來進行布局

這個打包盒我們通常會用哪個元素呢?

答案是div

雖然從理論上來講大多數html元素都可以擔任打包盒這個職責

在不考慮語義的情況下,通常都會使用div

無法區分更多的語義

因此創造出了各種專有的打包盒:

如section article hgroup等等

由此我們可以知道div是盒子,而其他的元素也都是盒子

如果想要將盒子在乙個二維的頁面中陳列開

除了它們自身出現的順序以外,還由5個基本屬性來調節它們的位置和大小

這5個屬性分別是:

寬 高 內邊距 邊框和外邊距

寬和高 決定了盒子內部空間有多大

盒子裝的內容都是放在這個區域當中

邊框就是盒子本身

可以修改盒子的厚度 材料以及顏色

內邊距和外邊距好比是給盒子內外新增的透明抗震材料

改變內邊距可以改變內容與盒子之間的距離

改變外邊距則可以改變盒子之間的距離,通過這些基本屬性改變盒子的⼤小會影響到布局

盒⼦⼤小的計算模型有兩種

標準盒⼦模型ie盒⼦模型

通過改變css屬性box-sizing的值來改變

第⼀種標準盒⼦模型

box-sizing為content-box

這種行為模式下,盒⼦子的寬和⾼只決定元素的content內容部分

⽽內邊距padding和邊框border是在content外部另外繪製

也就是說

width = content

第⼆種ie盒⼦模型

box-sizing為border-box

這種⾏為模式下,為盒⼦設定的寬和⾼決定了元素的邊框border⼤小,

那麼盒⼦的內邊距padding和邊框border都將在已設定好的寬⾼內繪製

也就是說

width = content + padding + border

因此如果為兩個盒子設定同樣的css屬性

不同的盒模型將會佔據不同的⻚面寬度

標準盒⼦模型下的盒⼦會這樣計算:

width = content = 300px

然後再額外計算padding和border的值

因此盒⼦實際佔據了了500px

ie盒⼦模型下的盒子則會這樣計算

width = content + padding + border = content + 50px * 2 + 50px * 2 = 300px

不用額外計算padding和border的值

width 設定是多少,盒子就實際佔據多少

不過通過減量計算得到盒子的content部分就只剩下100px了

在實際的開發中

為了在橫向方向上盡量不出現滾動條

通常會希望盒⼦實際佔據的寬度不超過⻚面寬度

標準盒⼦模型的解決⽅案是通過數學計算

設定寬度時需要⽤希望的寬度減去內邊距和邊框寬度

但這樣開發起來實在太過複雜

幸好我們有ie盒子模型

內邊距和邊框不會再增加盒⼦寬度

有的開發者甚⾄會這樣設定他們的css**

以保證所有盒⼦的計算都統一而且簡單直觀

怎麼樣是不是很簡單?

學會後趕緊上手寫點**練習一下吧。

第五課 文法

1.名詞 場所 行 來 帰 使用移動動詞時,移動的方向用助詞 表示。京都 行 我要去京都。日本 來 我來到了日本。帰 我要回家。注 助詞 讀作 2.行 行 完全否定疑問詞所問的全部範疇時,用助詞 與否定形式一起使用。行 也不去。何 食 什麼也不吃。第6課 沒有任何人在。第10課 3.名詞 交通工具 ...

C語言第五課

主要內容 二維陣列 字串陣列 多維陣列 理解 一 二維陣列 有兩個下標的陣列稱為二維陣列 定義 型別修飾符 陣列名 常量表示式1 常量表示式2 第一維的長度 第二維的長度 示例 定義乙個2行3列的二維陣列 int array 2 3 這是乙個標準的二維陣列 二維陣列的元素也稱為雙下標變數 0 1 2...

C語言第五課

c函式若不宣告型別,則預設為 int 型 在函式中,指標可以 被調函式 修改 主調函式 1 int func int a main 2 void func int num main int num 2 func int b 野指標會 指向任一地方 int pum printf x pum 指標偏移的...