1. 程式人生 > 實用技巧 >Java自學-圖形介面 容器

Java自學-圖形介面 容器

CSS盒子模型

1. 盒子模型的組成

CSS盒子模型本質上是一個盒子,封裝周圍的HTML元素。

包括:邊框border、外邊距margin、內邊距padding、實際內容content。

2. 邊框border

div {
    border: border-width border-style border-color;
}
屬性 作用
border-width 邊框粗細,單位px
border-style 邊框樣式,solid(實線)、dashed(虛線)、dotted(點線)
border-color 邊框顏色,預定義值/十六進位制/rgb()
線形 樣式
dashed 虛線 - - - - - - - -
dotted 點線 .................
屬性 作用
border-left 左邊框
border-right 右邊框
border-top 上邊框
border-bottom 下邊框

2.1 邊框寫法

簡寫:

border: 1px solid blue;/*沒有順序規定,一般按照這種順序*/

分開寫法:

border-top: 1px solid blue;/*只設定上邊框*/
border-right: 1px dashed red;/*只設定右邊框*/;
border-bottom: 2px solid #ccc;/*只設定下邊框*/
border- left: 3px dotted #123456;/*只設定左邊框*/

2.2 表格的細線邊框border-collapse

該屬性控制瀏覽器繪製表格邊框的方式,它控制相鄰單元格的邊框。

border-collapse: collapse;/*表示相鄰邊框合併在一起*/

2.3 邊框影響盒子實際大小的解決方案

如果一個盒子加了邊框,會出現撐大盒子的情況,因此有兩種解決方案。

  1. 測量盒子大小的時候,不量邊框
  2. 如果測量的時候包含了邊框,則需要width/height減去邊框寬度

3. 內邊距padding

內邊距:邊框與內容之間的距離。

屬性 作用
padding-left 左內邊距
padding-right 右內邊距
padding-top 上內邊距
padding-bottom 下內邊距

padding的簡寫屬性可以有1~4個值。

值的個數 表達意思
padding: 5px 上下左右都是5px內邊距
padding: 5px 10px 上下5px,左右10px
padding: 5px 10px 15px 上5px,左右10px,下15px
padding: 5px 10px 15px 20px 上5px,右10px,下15px,左20px

3.1 內邊距影響盒子實際大小的解決方案

如果盒子已經有了寬度和高度,此時再指定內邊框,會影響盒子的實際大小,撐大盒子。因此有兩種解決方案。

  1. 讓width/height減去多出來的內邊距大小
  2. 如果盒子本身沒有指定width/height屬性,則此時padding不會撐開盒子

4. 外邊距margin

外邊距:控制盒子與盒子之間的距離。

屬性 作用
margin-left 左外邊距
margin-right 右外邊距
margin-top 上外邊距
margin-bottom 下外邊距

margin的簡寫和padding一致。

4.1 外邊距讓塊級盒子水平居中

利用外邊距讓塊級盒子水平居中所滿足的條件:

  1. 盒子必須指定了寬度
  2. 盒子左右的外邊距都設定為auto

常見的寫法:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;(建議使用)

注:行內元素、行內塊元素水平居中,給其父元素新增text-align: center;即可。

4.2 外邊距合併

使用margin定義塊元素的垂直外邊距時,可能會出現外邊距的合併。

4.2.1 相鄰塊元素垂直外邊距的合併

如上圖,出現了取兩個值中的較大者的現象,即為相鄰塊元素垂直外邊距的合併。

解決方案:儘量只給一個盒子新增margin值。

4.2.2 巢狀塊元素垂直外邊距的塌陷

如上圖,出現了父元素塌陷較大的外邊距值的現象,即為巢狀塊元素垂直外邊距的塌陷。

解決方案:

  1. 為父元素定義上邊框
  2. 為父元素定義上內邊距
  3. 為父元素新增overflow: hidden;(推薦使用)

5. 清除內外邊距

這也是CSS的第一行程式碼。

* {
    padding: 0;/*清除內邊距*/
    margin: 0;/*清除外邊距*/
}

注:

  • 行內元素為了照顧相容性,儘量只設置左右內外邊距
  • 但是轉換為塊級或行內塊元素就無要求