1. 程式人生 > 其它 >(十三).CSS3中的變換(transform),過渡(transition),動畫(animation)

(十三).CSS3中的變換(transform),過渡(transition),動畫(animation)

1 變換 transform

1.1 變換相關 CSS 屬性

CSS 屬性名 含義
transform 設定變換方式
transform-origin 設定變換的原點 使用關鍵字或座標設定位置
transform-style 設定子元素處於3D空間還是2D空間 flat:2D空間,預設值。
preserve-3d:3D空間
perspective 設定觀察者與平面距離 長度
perspective-origin 設定觀察者位置 使用關鍵字或座標設定位置
backface-visibility 設定元素背面是否可見 visible:可見,預設值。
hidden:不可見

總結:

1. 行內元素無法設定變換
2. 需要設定給變換的元素的屬性:
   transform、tranform-origin、backface-visibility
   需要設定給變換元素的父元素的屬性:
   transform-style、perspective、perspective-origin

1.2 2D 變換的方法

① 位移 translate 方法

translateX()				設定水平方向位移
translateY()				設定垂直方向位置
translate()					同時設定水平方向和垂直方向的位移

位移的變換方法引數的設定規則:

1. 使用長度設定位移距離,允許負值
   使用百分比,水平位移參照元素自身寬度,垂直位移參照元素自身高度
2. translate() 如果只設置一個值,表示水平位移的距離,垂直方向不位移。

位移的應用(絕對或固定定位元素的水平和垂直居中):

/* 水平垂直居中的方案 */
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

② 縮放 scale 方法

scaleX()				設定水平方向的縮放比例
scaleY()				設定垂直方向的縮放比例
scale()					同時設定水平方向和垂直方向的縮放比例

縮放的變換方法引數的設定規則:

1. 使用純數字(倍數)或者百分比表示縮放的比例
2. 使用負數元素自身會反轉過來
3. scale() 如果只設置一個值,表示同時設定水平方向和垂直方向的縮放比例

③ 旋轉 rotate 方法

rotate()

變換方法引數的設定規則:

1. 使用角度,可以是負值,角度單位是 deg
2. 預設是順時針旋轉
3. 預設旋轉中心是元素中心

1.3 3D 變換的方法

① 3D 位移

translateZ()				設定沿z軸位移的距離
translate3D(x,y,z)			同時設定x、y、z軸位移的距離,必須設定3個長度

② 3D 縮放

scaleZ()
scale3D(x,y,z)				同時設定x、y、z軸的縮放,必須設定三個倍數
3D 縮放沒有效果!

③ 3D 旋轉

rotateX()				x軸旋轉
rotateY()				y軸旋轉
rotateZ()				z軸旋轉,等同於2D旋轉 rotate()
rotate3D()				同時沿x軸、y軸、z軸一起旋轉,設定4個值,前三個都是0或者1,對應的軸是否旋轉,第4個值設定角度

2 過渡 transition

2.1 過渡相關 CSS 屬性

CSS 屬性名 含義
transition-property 設定哪些屬性可以過渡 all,預設值.
1個或多個屬性,使用逗號分隔。
transition-duration 設定過渡的持續時間 時間單位 s、ms
transition-delay 設定過渡的延遲時間 時間單位 s、ms
transition-timing-function 設定過渡的運動曲線
transition 複合屬性 1個時間表示duration,如果兩個時間第一是duration,第二個是delay

哪些 CSS 屬性可以過渡?

1. 屬性的值是長度的,如 width、height、margin、padding、border-width 等等
2. 屬性的值是顏色的,如 color、background-color、border-color 等等
3. 屬性的值是純數字,如 opacity、font-weight
4. 變換屬性 transform

什麼時候設定過渡相關的屬性 transition?

在元素的樣式變化之前,提前設定過渡相關的屬性。

貝塞爾曲線線上工具:

https://cubic-bezier.com

transition-timing-function 設定過渡運動曲線:

ease			平滑過渡,預設值
linear			勻速
ease-in			加速運動
ease-out		減速運動
ease-in-out		先加速再減速
cubic-bezier()	特定的貝塞爾曲線設定運動曲線
steps()			分步運動 ,第一個引數設定步數,第二個引數指定每一步發生的時間點,預設是end,也可以選擇start,end 表示先等待,start表示先運動
step-start		等同於 steps(1,start)
step-end		等同於 steps(1,end)

2.2 觸發過渡的條件

使用者的行為和動作導致元素樣式發生改變,如果元素設定了過渡效果,樣式的改變具有過渡動畫效果

1. 偽類選擇器 :hover :active :focus :checked
2. JS 的事件
3. CSS 媒體查詢

3 動畫 animation

3.1 關鍵幀

@keyframes 關鍵幀名字 {
    from {}
    to {}
}

@keyframes 關鍵幀名字 {
    100% {}
}

@keyframes 關鍵幀名字 {
    from {}
    40% {}
    80% {}
    to {}
}

Tips:在關鍵幀中使用2d或3d變換,需要設定相關元素或父元素的屬性

關鍵幀與元素的關係:

1. 一個元素可以設定多個關鍵幀
2. 一個關鍵幀可以設定到多個元素上

3.2 動畫相關 CSS 屬性

CSS 屬性名 含義
animation-name 設定關鍵幀 多個使用功逗號分隔
animation-duration 設定動畫持續時間 時間
animation-delay 設定動畫延遲時間 時間
animation-timing-function 設定動畫運動曲線 同 transition-timing-function
animation-iteration-count 設定動畫執行次數 數字。
infinite:無數次
animation-direction 設定動畫運動方向 normal:正常方向,預設值。
reverse:反向運動。
alternate:交替運動。
alternate-reverse:反向交替運動。
animation-play-state 設定動畫運動狀態 running:正在運動,預設值。
paused:暫停。
animation-fill-mode 設定規定動畫在播放之前或之後的顯示狀態 none:預設值。
forwards:動畫結束後處於結束幀狀態。
backwards:動畫開始之前處於起始幀狀態。
both:兼具forwards和backwards的狀態
animation 複合屬性 不限制順序和數量,第一個時間表示animation-duration,第二個時間表示animation-delay