position
屬性
position
用來指定一個元素在文件中的位置
- static:正常佈局;
top
,right
,bottom
,left
,z-index
屬性失效 - relative:相對定位
- absolute:絕對定位,相對最近一個非
static
祖先元素定位;脫離文件流(以及float屬性) - fixed:固定定位,相對於螢幕視口(viewport)的位置來指定元素位置,頁面滾動位置也固定;脫離文件流
- sticky:粘性定位,先按照relative定位,再按照fixed定位。詳見MDN
display
屬性
display
是指定元素的呈現
- none:關閉一個元素的顯示
- inline:行內顯示
- block:塊級顯示
- table:表格顯示
- list-item:列表行顯示
- flex:flexbox模型顯示
- grid:柵格盒模型
衍生題
display:none、visibility:hidden:、opacity:0
之間的區別
display: none
徹底消失,render tree中也不存在(dom tree中存在);可能會引起reflowvisibility: hidden
渲染為空盒子,在render tree中存在;不會引起reflow
;效能更好;也不會觸發事件opacity: 0
將元素隱藏起來,也不會改變頁面佈局,但是會觸發點選事件
替換元素&非替換元素
內容是否能夠修改、替換;例如修改<img>
標籤修改src
屬性就會變化,這是替換標籤
下面列舉一些替換元素,除了替換元素都是非替換元素
img
:display:inline
iframe
:display:inline
video
&audio
:display:inline
input
:display:inline-block
button
:display:inline-block
select
:display:inline-block
注:vertical-align
屬性適用於inline
元素和table-cell
元素
居中:實現水平垂直佈局
flex
:主軸(justify-content
)和交叉軸(align-items
)均為center
transform
:(居中塊)採用相對佈局,top:50%
,left:50%
再加上transform: translate(-50%; -50%)
實現水平垂直居中table
:這個不用講了margin
負值:(居中塊)採用相對佈局 +top:50%
,left:50%
+margin-top: -height/2
,margin-left: -width/2
- 絕對定位:父級節點相對定位,居中塊絕對定位而且
top:0;left:0;right:0;bottom:0;
+margin:auto;
佈局:實現三欄自適應佈局
float
佈局:左邊float:left
,右邊float:right
,中間塊設定min-width
即可absoluate
定位:中間塊設定距離父級節點的left:100px;right:100px;
即可;當然父級節點positon
不能為static
flex
佈局:中間塊flex-grow
為1(預設0);左右兩邊設定flex-basis:100px
即可table
佈局:table``table-cell
很容易grid
佈局:父級節點需要display:grid;
然後網格流方向為grid-auto-flow:column;
再然後grid-template-columns: 100px auto 100px;
設定列寬
BFC
BFC是塊級格式化上下文(Block Format Context),我們可以把它看作一個大盒子,一個獨立的容器。這個容器就是一個BFC,其內部和外部不會有任何影響,在這個大盒子(BFC)中,你可以隨便佈局、浮動。
面對的問題
我們建立BFC是為了解決實際中的問題,如
邊距重疊/邊距吞噬
- 同一個BFC內,邊距會發生重疊,公共邊距為邊距大的那個(水平方向邊距永遠不會重疊)
- 如果需要清除邊距重疊,可以建立兩個BFC即可
清除內部浮動,父級元素高度未加上浮動元素高度
- 內部元素浮動,父級高度未加上浮動元素高度
- 清除內部元素浮動,父級高度加上浮動元素高度
浮動aslide重疊
- 左邊aslide和右邊main重疊
- 右邊main建立BFC,不會和左邊aslide重疊
如何建立BFC
- float不為none
- overflow為auto、hidden
- display為inline-block、table=cell、flex
- position不為static或relative
BFC的特性
- 計算BFC高度時,浮動子元素也會參與計算
- BFC內部的box一個接一個放
- BFC是頁面上一個獨立元素,和外界元素互不影響
- BFC不會和浮動元素重疊
清除浮動
在清除浮動之前,我們先了解一下浮動的原理:
浮動和position:absoluate;|position:fixed;
一樣都會脫離文件流。當一個元素浮動的時候,他會脫離當前文件流,向左或向右浮動,直到遇到父元素或者另外一個浮動元素。
浮動會造成哪些問題,為什麼要清除浮動
- 浮動造成父元素高度坍塌:浮動會脫離當前文件流,父元素高度不會被撐開,計算父元素高度時不會加上浮動子元素的高度
- 浮動元素和非浮動元素重疊:aslide(浮動元素)和main重疊
清除浮動的方法
- 建立BFC,因為BFC不和浮動元素重疊
- 新增額外標籤,並設定
clear:both
clearfix
方法
.clearfix:before,
.clearfix:after {
content: '';
display: block;
clear: both;
}
複製程式碼
盒模型
分類
- IE盒模型:計算盒子高度/寬度時會加上
padding/margin/border
;box-sizing:border-box;
- 標準盒模型:計算盒子高度/寬度時會不加上
padding/margin/border
;box-sizing:content-box;
(預設)
獲取盒模型高度
dom.style.height
獲取內聯csswindow.getComputedStyle(dom).height
或者window.getComputedStyle(dom).getPropertyValue("height")
(IE9下不支援)應用活動樣式表後的元素的所有CSS屬性的值dom.getBoundingClientRect().height
返回元素的大小及其相對於視口的位置
Html5 新特性
H5新增標籤
語義化標籤
- header 頁頭
- footer 頁尾
- nav 導航欄 (
- section 表示文件中的一個區域(或節)
- article 文件、頁面、應用或網站中的獨立結構
- aside 側邊欄或者嵌入內容
canvas
& svg
canvas
通過JavaScript繪製2D圖形svg
通過xml描述2D圖形
表單標籤
- datalist 一組
- output 表示計算或使用者操作的結果
多媒體標籤
- audio 音訊內容
- video 視訊內容
- source 表示多媒體資源
其他問題
z-index
和position
z-index
屬性指定了一個具有定位屬性(即position
屬性值是非static
的元素)的元素及其子代元素的z-order
。
z-index
只能在positon: relatice|absoluate|fixed;
的元素上使用z-index
控制元素在垂直螢幕方向(z軸)上顯示z-index
只能決定同一個父元素下的同級子元素堆疊順序
link & import 引入CSS區別
import
是CSS引入樣式表的語法,link
則是HTML提供的標籤。link
在頁面載入時同時載入,import
是在頁面載入完成之後再載入。- 可以使用操作DOM,插入
link
標籤改變樣式,import
不可以。
偽類和偽元素的區別
- 偽類,當前元素屬於某種狀態時,為其新增相應的樣式,狀態會隨著使用者行為而變化。如
:hover
,:focus
- 偽元素,建立一些DOM樹種不存在的元素,並新增樣式。例如
:before
會在元素之前新增一些內容。使用者看的到,但這些內容不存在於DOM樹中。