盒子模型

CSS盒子模型

HTML每個元素都可以看做為一個盒子

具備四個屬性

? 內(nèi)容(content)

  • 元素的內(nèi)容width/height

? 內(nèi)邊距(padding)

  • 素和內(nèi)容之間的間距

? 邊框(border)

  • 元素自己的邊框

? 外邊距(margin)

  • 元素和其他元素之間的間距
18cb47bec04.png

? 因為盒子有四邊, 所以margin/padding/border都包括top/right/bottom/left四個邊:

18cb47dc9c7.png

內(nèi)容 - 寬度和高度

? 設置內(nèi)容是通過寬度和高度設置的:

  • 寬度設置: width
  • 高度設置: height

? 注意: 對于行內(nèi)級非替換元素來說, 設置寬高是無效的!

另外還可以設置如下屬性:

  • min-width: 最小寬度
  • max-width: 最大寬度
  • 移動端適配時,可以設置最大寬度和最小寬度

下面兩個不太常用:

  • min-height: 最小高度
  • max-height: 最大高度

內(nèi)邊距 - padding

? padding屬性用于設置盒子的內(nèi)邊距, 通常用于設置邊框和內(nèi)容之間的間距;
? padding包括四個方向, 所以有如下的取值:

  • padding-top:上內(nèi)邊距
  • padding-right:右內(nèi)邊距
  • padding-bottom:下內(nèi)邊距
  • padding-left:左內(nèi)邊距

? padding單獨編寫是一個縮寫屬性:

  • padding-top、padding-right、padding-bottom、padding-left的簡寫屬性
  • padding縮寫屬性是從零點鐘方向開始, 沿著順時針轉動的, 也就是上右下左;

? padding并非必須是四個值, 也可以有其他值;

padding的其他值

18cb482cd1b.png

邊框 border

  • 邊框寬度
    • border-top-width、border-right-width、border-bottom-width、border-left-width
    • border-width是上面4個屬性的簡寫屬性
  • 邊框顏色
    • border-top-color、border-right-color、border-bottom-color、border-left-color
    • border-color是上面4個屬性的簡寫屬性
  • 邊框樣式
    • border-top-style、border-right-style、border-bottom-style、border-left-style
    • border-style是上面4個屬性的簡寫屬性

邊框樣式的取值

  • groove:凹槽, 溝槽, 邊框看上去好象是雕刻在畫布之內(nèi)
  • ridge:山脊, 和grove相反,邊框看上去好象是從畫布中凸出來
18cb4860c4e.png

同時設置的方式

  • 如果我們相對某一邊同時設置 寬度 樣式 顏色 , 可以進行如下設置 :

    • border top
    • border right
    • border bottom
    • border left
    • border :統(tǒng)一設置 4 個方向的邊框
  • 邊框顏色、寬度、樣式的編寫順序任意

18cb487d5c4.png

圓角 – border-radius

這四個屬性 border-top-left-radius、border-top-right-radius、border-bottom-right-radius,和 border-bottom,left-radius 簡寫為一個屬性。

? border-radius常見的值:

  • 數(shù)值: 通常用來設置小的圓角, 比如6px;
  • 百分比: 通常用來設置一定的弧度或者圓形;

外邊距 - margin

? margin屬性用于設置盒子的外邊距, 通常用于元素和元素之間的間距;
? margin包括四個方向, 所以有如下的取值:

  • margin-top:上內(nèi)邊距
  • margin-right:右內(nèi)邊距
  • margin-bottom:下內(nèi)邊距
  • margin-left:左內(nèi)邊距

? margin單獨編寫是一個縮寫屬性:

  • margin-top、margin-right、margin-bottom、margin-left的簡寫屬性
  • margin縮寫屬性是從零點鐘方向開始, 沿著順時針轉動的, 也就是上右下左;

? margin也并非必須是四個值, 也可以有其他值;

margin的其他值

18cb49303a2.png

上下margin的傳遞

? margin-top傳遞

  • 如果塊級元素的頂部線和父元素的頂部線重疊,那么這個塊級元素的margin-top值會傳遞給父元素

? margin-bottom傳遞

  • 如果塊級元素的底部線和父元素的底部線重寫,并且父元素的高度是auto,那么這個塊級元素的margin-bottom值會傳遞給父元素

? 如何防止出現(xiàn)傳遞問題?

  • 給父元素設置padding-top\padding-bottom
  • 給父元素設置border
  • 觸發(fā)BFC: 設置overflow為auto

? 建議

  • margin一般是用來設置兄弟元素之間的間距
  • padding一般是用來設置父子元素之間的間距

上下margin的折疊

? 垂直方向上相鄰的2個margin(margin-top、margin-bottom)有可能會合并為1個margin,這種現(xiàn)象叫做collapse(折疊)

? 水平方向上的margin(margin-left、margin-right)永遠不會collapse

? 折疊后最終值的計算規(guī)則

  • 兩個值進行比較,取較大的值

? 如何防止margin collapse?

  • 只設置其中一個元素的margin

上下margin折疊的情況

? 兩個兄弟塊級元素之間上下margin的折疊
? 父子塊級元素之間margin的折疊

18cb499a423.png

外輪廓 - outline

? outline表示元素的外輪廓

  • 不占用空間
  • 默認顯示在border的外面

? outline相關屬性有

  • outline-width: 外輪廓的寬度
  • outline-style:取值跟border的樣式一樣,比如solid、dotted等
  • outline-color: 外輪廓的顏色
  • outline:outline-width、outline-style、outline-color的簡寫屬性,跟border用法類似

? 應用實例

  • 去除a元素、input元素的focus輪廓效果

盒子陰影 - box-shadow

  • box-shadow屬性可以設置一個或者多個陰影
    • 每個陰影用表示
    • 多個陰影之間用逗號,隔開,從前到后疊加

? shadow的常見格式如下

18cb49bfa56.png
  • 第1個<length>:offset-x, 水平方向的偏移,正數(shù)往右偏移
  • 第2個<length>:offset-y, 垂直方向的偏移,正數(shù)往下偏移
  • 第3個<length>:blur-radius, 模糊半徑
  • 第4個<length>:spread-radius, 延伸半徑
  • <color>:陰影的顏色,如果沒有設置,就跟隨color屬性的顏色
  • inset:外框陰影變成內(nèi)框陰影

盒子陰影

在線測試陰影效果

https://html-css-js.com/css/generator/box-shadow/

18cb49e08bf.png

文字陰影 - text-shadow

? text-shadow用法類似于box-shadow,用于給文字添加陰影效果
? shadow的常見格式如下

18cb4a1b4b2.png
  • 相當于box-shadow, 它沒有spread-radius的值;

? 我們可以通過一個網(wǎng)站測試文字的陰影:
https://html-css-js.com/css/generator/box-shadow

行內(nèi)非替換元素的注意事項

? 以下屬性對行內(nèi)級非替換元素不起作用

  • width、height、margin-top、margin-bottom

? 以下屬性對行內(nèi)級非替換元素的效果比較特殊

  • padding-top、padding-bottom、上下方向的border

CSS屬性 - box-sizing

? box-sizing用來設置盒子模型中寬高的行為
? content-box

  • padding、border都布置在width、height外邊

? border-box

  • padding、border都布置在width、height里邊

box-sizing: content-box

? 元素的實際占用寬度 = border + padding + width
? 元素的實際占用高度 = border + padding + height

18cb4a3d560.png

box-sizing: border-box

? 元素的實際占用寬度 = width
? 元素的實際占用高度 = height

18cb4a42d35.png

IE盒子模型

18cb4a48053.png

元素的水平居中方案

? 在一些需求中,需要元素在父元素中水平居中顯示(父元素一般都是塊級元素、inline-block)
? 行內(nèi)級元素(包括inline-block元素)

  • 水平居中:在父元素中設置text-align: center

? 塊級元素

  • 水平居中:margin: 0 auto
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容