css基礎--盒子模型
盒子模型
1 絕大多數標籤都可以看作盒子,可以設定寬高或設定內容;在CSS中,"box model"這一術語是用來設計和佈局時使用。
CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充,和實際內容。
盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。
下面的圖片說明了盒子模型(Box Model):
content 盒子的內容
padding 內邊距 內容到邊框的距離
border 邊框
margin 外邊距 元素與元素的間距
2 盒子模型的屬性
1) width 寬 height高 均指內容放入寬高,而非盒子的
2) padding 內邊距 內容到邊框的距離
padding:10px; 一個值相當於四個方向值相同(上 右 下 左)
padding:10px 20px; 上10px 右20px 下10px 左20px
padding:10px 20px 30px; 上 右 下 左20px
padding:10px 20px 30px 40px; 上 右 下 左
上 padding-top
右padding-right
下 padding-bottom
左padding-left
2)border 邊框
按三要素:border-width 邊框寬度
border-style 邊框樣式 solid實線 dashed虛線
border-color 邊框顏色
按方向:border:10px solid blue 四個方向均同樣設定
border-top
border-right
border-bottom
border-left
background-color:#000;黑
border-width:20px;
border-style:solid dashed dotted doble; 上右下左
border-color:red green blue pink; 上右下左
border-bottom:5px solid blue; 下邊框設定3個樣式
3)margin 外邊距 元素與元素的間距
margin:20px 30px 上右下左 同padding
margin-top
margin-right
margin-bottom
margin-left
水平居中: text-align:center;
margin: 0 auto; 上下邊距為0 auto讓有寬度的塊級元素水平居中 eg:div p
3 margin塌陷問題及解決
父子margin塌陷
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; } /*margin 父子塌陷問題 父親沒有設定padding border 內容時,子元素垂直方向的margin會疊加給父親 一旦發生塌陷,疊加規則:父親最終垂直方向的margin為父子中最大的margin值,並非相加 解決方法: 1 把兒子的margin轉換成父親的padding 注意盒子總高度變化問題 2 給父親增加一個屬性 overflow:hidden; //觸發了BFC */ .box1{ width: 150px; height: 150px; background-color: pink; /* padding: 20px; */ /* overflow: hidden; */ } .p1{ width: 50px; /*內容的寬*/ height: 50px; /*內容的高*/ background-color: aqua; padding: 10px 20px; /*內邊距 內容到邊框的距離 上下為10px 左右20px*/ border: 2px dashed red; border-bottom: 2px solid blue; margin: 20px; } </style> </head> <body> <div class="box1"> <p class="p1">這是內容1</p> </div> </body> </html>margin父子塌陷
4 並列元素(兄弟塌陷)
垂直方向上相遇的盒子模型,會發生margin塌陷;現象就是元素二者之間的距離並非之和,而是二者之間最大的
解決方法:只配置一個方向即可
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box1,.box2{ width: 50px; height: 50px; background-color: red; } /* 並列元素(兄弟)塌陷:垂直方向上的盒子模型,會發生margin塌陷 即兩個盒子模型的margin值選二者中最大的 解決方式:只設置一個方向 */ .box1{ margin-bottom: 50px; /*只在其中一個設定,即只設置margin-bottom 或margin-top*/ /* margin-bottom: 30px; */ /*會發生並列元素塌陷*/ } .box2{ margin-top: 0px; /* margin-top: 20; */ } </style> </head> <body> <div class="box1"></div> <div class="box2"></div> </body> </htm並列元素塌陷
5 背景屬性
1)背景顏色 background-color
2) 背景圖片 background-img:url(xxx.jpeg); // 預設平鋪
3)背景重複 background-repeat:repeat-x; //不寫時預設圖片平鋪
控制圖片平鋪:repeat x,y方向均重複; repeat-x x方向平鋪; repeat-y y方向平鋪; no-repeat 不平鋪; 4)背景圖定位 background-position:50px 50px; background-position:center center; background-position:50% 50%; //圖片中心點參考body100%移動50% 相當於center center background-position:left top; //左上 background-position:right bottom; //右下 簡寫:background:blue url(xxx.jpg) no-repeat cener cernter fixed; //若不需要,後四個屬性值可以不寫<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 預設圖片平鋪
控制圖片平鋪:repeat x,y方向均重複; repeat-x x方向平鋪;repeat-y y方向平鋪;
no-repeat 不平鋪;
*/
.box1{
width: 1500px;
height: 1500px;
/* background-image: url(../ddr.png);
background-repeat: no-repeat;
background-position: right bottom; */
/*簡寫 若不需要設定,後面四個屬性值可以不寫*/
background: grey url(../ddr.png) no-repeat center center fixed;
}
</style>
</head>
<body>
<div class="box1"></div>
</body>
</html>
background
5 css元素的顯示模式
元素根據表現的特性分為:塊級元素、行內元素、行內塊元素
預設特點:
塊級元素 div p li dt dd h1~h6 ul dl
1)獨佔一行
2)設定寬高有效 (padding margin line-height)
3)不設定寬高,預設是父親的100%
行內元素 span em i b strong
1)可以與其他行內元素並排
2)設定寬高無效 (行高 line-height可設定,不支援垂直方向 padding margin)
3)元素靠內容撐開
行內塊元素 img
1)可以與其他行內元素 或 行內塊元素並排
2)可以設定寬高
一般通過如下方法去除預設的padding margin
*{
padding:0;
margin:0;
}
6 display 改變元素的顯示模式
display:block; 轉化為塊級元素
display:inline; 轉化為行內元素
display:inline-block; 轉化為行內塊元素
display:none; 隱藏元素