選擇器
分類
簡單選擇器:id選擇器、類選擇器、標籤選擇器、
組合選擇器:後代選擇器(空格)、子選擇器(>)、兄弟選擇器 (+)、通用選擇器(~)
偽類(:hover)
偽元素(::before, ::firt-child,::not())
屬性選擇器
ps. 兄弟選擇器 (+)與通用選擇器(~): “+”指“自己”相鄰兄弟,“~”會應用所有兄弟
優先順序
!important 最高
內聯 1000分
id選擇器 100 分
類選擇器、屬性選擇器、偽類 10 分
標籤選擇器、組合選擇器、偽元素 1 分
優先順序按照累加計算,數值越高優先順序越高。
<!-- 優先順序 -->
<style>
p {
color: red;
}
.p {
color: grey;
}
div > p {
color: green;
}
</style>
<div>
<p class="p">1111</p>
</div>
<p class="p">222</p>
<!-- 兄弟選擇器與通用選擇器 -->
<style>
div~p {
color: red;
}
div+p {
color: green;
}
</style>
<body>
<div>111</div>
<p>1</p>
<p>2</p>
<p>3</p>
</body>
IFC/BFC
IFC
英文全程 inline formating context, 行內格式上下文。
特點:
- 自左向右排列
- 由行高
line-height
決定高度,即通過 inline-level box 計算,但是具有多個 inline-level box 的IFC,排版通過 vertical-align 決定。 - 當長度過大時,會自動換行,一行是一個 inline-level box(即行級盒模型)。
ps. 換行的相關設定
標明如何斷句:word-break: break-all 直接換行 | break-word 根據單詞,遇到空格換行 | keep-all 不換行 | normal 瀏覽器預設行為
標明是否斷句:word-wrap: break-word | normal
標明空格斷句:white-space: normal 瀏覽器預設行為 | pre-wrap 同 html 編輯換行相同 | nowrap 不換行 | pre-line 剔除空格,保留換行 | pre 同<pre>
BFC
英文 block formating context,塊級格式上下文。
特點:
- 一個 BFC 佔一行,垂直方向排列,形成的是 block-level box(即塊級盒模型)
- BFC 內部隔離
- 處在同一個BFC下,相互影響,發生 margin 重疊
- 觸發 BFC 的方式有:浮動、設定 overflow、設定 margin、絕對定位、固定定位、display: flex
盒模型
標準模式:設定了 <!DOCTYPE >
,標識 html
版本
怪異模式:未設定 <!DOCTYPE >
盒模型:content、padding、border、margin 的結構
盒模型計算方式可以通過 css3中 box-sizing: border-box | content-box; 設定計算方式,其中 content-box,是計算 content 來表示長寬,border-box 是將 content + padding + border,一起計算至長寬中,類似於IE6的怪異模式。
其他
margin 雙邊距
主要體現在兩個方面:
- 父與子邊距重疊,即子無法與父元素拉開邊距
- 兄弟邊距重疊
父與子清除邊距重疊:
- 父容器增加非 overflow: visible;,例如 overflow: scroll | hidden;
- 父容器增加 padding 或 border
- 父容器浮動
- 父容器設定 position: absolute;
- 父容器設定 display: flex
兄弟清除邊距重疊:
- 設定浮動
- 父設定 display: flex
原理是,通過宣告成 BFC 按照 BFC 規則佈局。
margin 塌陷
父元素使用了浮動導致。
z-index
border/bacground < z-index<0 < block-level < float < inline-level < z-index:0 < z-index>0
flex
使用flex能做那些佈局?(待補充)
@media
待補充
transform
有那些功能?(待補充)
常見的佈局
垂直居中,水平居中
html
<div class="father">
<div class="child"></div>
</div>
css
// 絕對定位
.father {
width: 500px;
height: 500px;
}
.child {
width: 50px;
height: 50px;
}
// 絕對定位
// flex
// transform:
// margin: 0 auto;
左固定,右適應
待補充