1. 程式人生 > 實用技巧 >CSS3 新特性

CSS3 新特性

CSS3 新特性

一、CSS3 新增選擇器

1、屬性選擇器

屬性選擇器可以根據元素特定屬性來選擇元素,這樣就不用藉助類或者id選擇器

選擇符:

E[att]:選擇具有att屬性的E 元素

E[att='val']:選擇具有att屬性並且屬性值的等於value的E元素

E[att^='val']:匹配具有att屬性並且屬性值以val開頭的E元素

E[att$='val']:匹配具有att屬性並且屬性值以val結尾的E元素

E[att*='val']:匹配具有att屬性並且屬性值含有val的E元素

注意:類選擇器、屬性選擇器、偽類選擇器,權重為10

2、結構選擇器

結構偽類選擇器主要根據文件結構來選擇元素,常用於根據父級選擇器裡面的子元素

選擇符:

E:first-child:匹配父元素中的第一個子元素E

E:last-child:匹配父元素中的最後一個子元素E

E:nth-child(n):匹配父元素中的第n個子元素E

E:first-of-type:指定型別E的第一個

E:first-of-last:指定型別E的最後一個

E:nth-of-type(n):指定型別E的第n個

區別:

  • nth-child對父元素裡面的所有孩子排序選擇(序號是固定的)先找到第n個孩子,然後再看看是否和E匹配
  • nth-of-type對父元素裡面指定子元素進行排序選擇,先去匹配E,然後再根據E找第n個孩子

3、偽元素選擇器

偽元素選擇器可以幫助我們利用CSS建立新標籤,而不需要HTML標籤,從而簡化HTML結構

選擇符:

::before:在元素內部的前面插入內容

::after:在元素內部的後面插入內容

注意:

  • before 和after 建立一個元素,但是屬於行內元素
  • 新建立的這個元素在文件樹中是找不到的,所以我們稱為偽元素
  • 語法:element::before{}
  • before和after必須有content屬性
  • before在父元素內容的前面建立元素,after在父元素內容的後面插入元素
  • 偽元素選擇器和標籤選擇器一樣,權重為1

二、CSS3盒子模型

CSS3中可以通過box-sizing來指定盒模型,有2個值:即可指定為content-box、border-box,這樣我們計算盒子大小的方式就發生了改變。

  • box-sizing:content-box 盒子大小為width+padding+border(預設)

  • box-sizing:border-box 盒子大小為width

    如果盒子模型我們改為了 box-sizing: border-box,那padding和border就不會撐大盒子了(前提padding和border不會超過width寬度)

三、CSS3濾鏡filter

filter CSS屬性將模糊或顏色偏移等圖形效果應用於元素

語法:filter:函式(); eg:filter:blur(5px); blur模糊處理 數值越大越模糊

四、CSS3 calc函式

calc()這個函式讓你在宣告CSS屬性值時執行一些計算

eg:width:calc(100%-80px);括號裡面可以使用+、-、* 、/來進行計算

五、CSS3過渡

過渡是CSS3中具有顛覆性的特徵之一,可以在不使用Flash動畫或JavaScript的情況下,元素從一種樣式轉變為另一種樣式時為元素新增效果。經常和:hover一起搭配使用

過渡動畫:是一種狀態漸漸的過渡到另外一個狀態。

語法:transition:要過渡的屬性 花費時間 運動曲線 何時開始

屬性:想要變化的css屬性,寬度高度 背景顏色都可以,如果想要所以屬性都變化過渡,寫一個all就可以

花費時間:單位是秒(必須寫單位) eg:1s

運動曲線:預設是ease(可以省略)

何時開始:單位是秒(必須寫單位)可以設定延遲觸發時間 預設是0s(可以省略)

六、2D轉換

轉換(``transform` ) 是CSS3中具有顛覆性的特徵之一,可以實現元素的位移、旋轉、縮放等效果

  • 移動:translate
  • 旋轉:rotate
  • 縮放:scale

1、2D轉換之移動 translate

2D移動是2D轉換裡面的一種功能,可以改變元素在頁面中位置,類似定位。

  • 語法:

    transform: translate(x,y);或者分開寫
    transform: translateX(n);
    transform: translateY(n);
    
  • 注意:

    • 定義2D轉換中的移動,沿著X和Y軸移動元素
    • translate最大的優點:不會影響到其他元素的位置
    • translate中的百分比單位是相對於自身元素的transla:(50%,50%);
    • 對行內標籤沒有效果

2、2D轉換之旋轉 rotate

2D旋轉是指讓元素在2維平面內順時針旋轉或者逆時針旋轉。

  • 語法:transform:rotate(度數)
  • 注意:
    • rotate裡面跟度數,單位是deg 比如rotate(45deg)
    • 角度為正時,順時針,負時,為逆時針
    • 預設旋轉的中心點是元素的中心點

3、2D 轉換中心點 transform-origin

設定元素轉換中心點

  • 語法:transform-origin: x y ;

  • 注意:

    • 注意後面引數x和y用空格隔開
    • x y 預設轉換的中心點是元素的中心點(50% 50%)
    • 還可以給x y設定畫素 或者方位名詞 (top、bottom、left、right、center)

4、2D 轉換之縮放scale

控制元素的放大和縮小

  • 語法:transform: scale(x,y)
  • 注意:
    • 其中的x和y用逗號分離
    • transform: scale(1,1) 寬高都放大一倍,相對於沒有放大
    • transform: scale(2,2) 寬高都放大2倍
    • transform: scale(2) 只寫一個引數,第二個引數則和第一個引數一樣,相當於 scale(2,2)
    • transform: scale(0.5,0.5) 縮小
    • salce縮放最大的優勢:可以設定轉換中心點縮放,預設以中心點縮放的,而且不影響其他盒子

5、2D轉換綜合寫法

  • 格式:transform:translate() rotate() scale()...等

  • 其順序會影響轉換的效果。(先旋轉會改變座標軸方向)

  • 當我們同時有位移和其他屬性的時候,記得要將位移放到最前

七、CSS3 3D轉換

動畫是CSS3中具有顛覆性的特徵之一,可以通過設定多個節點來精確控制一個或一組動畫,常用來實現複雜的動畫效果。相比較過渡,動畫可以實現更多變化,更多控制,連續自動播放等效果。

1、動畫的基本使用

製作動畫分兩步:

  • 先定義動畫

    • 用keyframes定義動畫(類似定義類選擇器)

      @keyframes 動畫名稱 {
                      0% {
                          width: 100px;
                      }
                      100% {
                          width: 200px;
                      }
                  }
      
      動畫序列
      • 0%是動畫的開始,100%是動畫的完成,這樣的規則就是動畫序列

      • 在@keyframes中規定某項CSS樣式,就能建立由當前樣式逐漸改為新樣式的動畫效果

      • 動畫是使元素從一種樣式逐漸變化為另一種樣式的效果,您可以改變任意多的樣式任意多的次數

      • 請用百分比來規定變化發生的時間,或用關鍵詞“from”和“to”,等同於0%和100%

  • 再使用(呼叫)動畫

      /* 呼叫動畫 */
                animation-name: 動畫名稱;
                /* 持續時間 */
                animation-duration: 持續時間;
    
    

2、動畫常見屬性

  • @keyframes:規定動畫

  • animation:所有動畫的簡寫屬性,除了animation-play-state屬性

  • animation-name:規定@keyframes動畫的名稱。(必須)

  • animation-duration:規定動畫完成一個週期所花費的秒或毫秒,預設是0(必須的)

  • animation-timing-function:規定動畫的速度曲線,預設是“ease”

    • linear:動畫從頭到尾的速度是相同的勻速
    • ease:預設,動畫以低速開始,然後加快,在結束前變慢
    • ease-in:動畫以低速開始
    • ease-out:動畫以低速結束
    • ease-in-out:動畫以低速開始和結束
    • step():指定了時間函式中的間隔數量(步長)
  • animation-delay:規定動畫何時開始,預設是0

  • animation-iteration-count:規定動畫被播放的次數,預設是1,還有infinite無限迴圈播放

  • animation-direction:規定動畫是否在下個週期逆向播放,預設是“normal”,alternate逆播放

  • animation-play-state:規定動畫是否正在執行或暫停,預設是“running”,還有“pause”

  • animation-fill-mode:規定動畫結束後狀態,保持forward回到起始backwards

3、動畫簡寫屬性

animation:動畫名稱 持續時間 運動曲線 何時開始 播放次數 是否反方向 動畫起始或者結束的狀態

  • 簡寫屬性裡面不包含animation-play-state
  • 暫停動畫:animation-play-state: puased;經常和滑鼠經過等其他配合使用
  • 想要動畫走回來,而不是直接跳回來:annimation-direction: alternate
  • 盒子動畫結束後,停在結束位置:animation-fill-mode: forwords

4、透視 perspective

如果想要網頁產生3D效果需要透視(理解成3D物體投影到2D平面內)

  • 透視的單位是畫素

  • 透視寫到被觀察的元素的父盒子上

    • d:視距,視距是一個距離人的眼鏡到螢幕的距離
    • z:z軸,物體距離螢幕的距離,z軸越大我們看到的物體就越大

  • translform:translateZ(100px) :僅在Z軸移動有了透視,就能看到translateZ引起的變化

5、3D旋轉 rotate3d

3D旋轉指可以讓元素在三維平面內沿著x軸,y軸,z軸或者自定義軸進行旋轉

語法:

 /* 沿著x軸正方向旋轉45度 */
 transform: rotateX(45deg);
 /* 沿著y軸正方向旋轉45度 */
 transform: rotateY(45deg);
 /* 沿著Z軸正方向旋轉45deg */
 transform: rotateZ(45deg);
 /* 沿著自定義軸旋轉deg為角度 */
 transform: rotate3d(x,y,z,deg);

6、3D呈現 transfrom-style

  • 控制子元素是否開啟三維立體環境

  • transform-style: flat子元素不開啟3d立體空間 預設的

  • transform-style: preserve-3d; 子元素開啟立體空間

  • 程式碼寫給父級,影響的是子盒子