天天看點

CSS3一、CSS3新增選擇器二、CSS3盒模型三、css3函數四、CSS3過渡效果五、CSS32D轉換六、CSS3動畫七、CSS33D轉換

CSS3

  • 一、CSS3新增選擇器
    • 1.屬性選擇器
    • 2.結構僞類選擇器
    • 3.僞元素選擇器
  • 二、CSS3盒模型
  • 三、css3函數
    • 1.filter 函數
    • 2.calc函數
  • 四、CSS3過渡效果
  • 五、CSS32D轉換
    • 1.什麼是轉換(transform)
    • 2.移動:translate
    • 3.旋轉:rotate
    • 4.設定中心點
    • 5.縮放:scale
    • 6.2D轉換的綜合寫法
  • 六、CSS3動畫
    • 1.動畫步驟
    • 2.動畫的常用屬性
    • 3.動畫速度調節
  • 七、CSS33D轉換
    • 1.三維坐标系
    • 2.3D移動
    • 3.透視perpective
    • 4.3D旋轉
    • 5.3d呈現 transfrom-style

一、CSS3新增選擇器

1.屬性選擇器

可以不借助類和id來選擇元素,可以通過标簽的屬性來選擇

input[value]{
}
/*表示選擇必須有value這個屬性的input*/

input[value=22]{
}
/*表示選擇必須有value這個屬性,且value值為2的input,不要加雙引号*/

input[class^=icon]{
}
/*表示選擇必須有class這個屬性,且值為icon開頭的input,不要加雙引号*/

input[class$=icon]{
}
/*表示選擇必須有class這個屬性,且值為icon結尾的input,不要加雙引号*/

input[class*=icon]{
}
/*表示選擇必須有class這個屬性,且值含有icon的input,不要加雙引号*/

           

2.結構僞類選擇器

這個權重是12

是根據文檔結構來選擇的

以一個冒号

ul li:first-child{
}
/*要是不寫li 表示選擇ul裡的第一個元素,最好加上li,表示選擇的是li類型的标簽*/
/*表示比對父元素中第一個子元素li*/
ul li:last-child{
}
/*表示比對父元素中最後一個子元素li*/
ul li:nth-child(n){
}
/*表示比對父元素中第n個子元素li,n可以是even表示是偶數,odd表示是奇數,n也可以是個公式,n是從0開始計算的,
直接寫n表示所有,且隻能寫n這個字母,
2n 是偶數
2n+1 是奇數
5n 是5的倍數
n+5 表示從第5個開始,包含第5個
-n+5 表示前5個,包含第5個
但是要是第一個元素不是li,而是div,就不起作用。因為在解析的時候,會把父元素裡的子盒子都邊上号,一定要标簽和 序号都對上,才能起作用。


*/
ul li:first-of-type{
}
/*表示比對父元素中指定類型li的第一個*/

ul li:last-of-type{
}
/*表示比對父元素中指定類型li的最後一個*/
ul li:nth-of-type(n){
}

/*表示比對父元素中指定類型li的第n個,
nth-of-type是先看前面的标簽,再看後面的n。表示會把父元素中前面的标簽先編上号,再從這裡面找,和nth-child剛好相反。
nth-child是先找孩子,再找标簽,它會把父元素中所有的子标簽都編上号。
*/
           

3.僞元素選擇器

權重為1

利用僞元素來創造标簽。新版是雙冒号,老版本浏覽器是單冒号,盡量使用雙冒号

div::before{
      content:"";
      display:inline-block;
}
/*before是父盒子裡面的前面,*/
div::after{
}
div:hover::before{

}
/*移動顯示僞元素*/
           

僞元素再文檔樹中是找不到的。

一般都是用在字型圖示

僞元素必須有content屬性。

1.清除浮動

額外标簽法

二、CSS3盒模型

固定盒子的大小,使盒子不受邊框和内邊距的影響撐大。

div{
    box-sizing:content-box/borde-box;
}
           

content-box:就是預設值,還是受邊框和padding的大小

border-box: 盒子最終的大小就是width的大小,不會再變化,增加padding和border不會撐大盒子,會自動減小内容的區域,但是padding和border不能超過盒子的寬度。、、

三、css3函數

1.filter 函數

filter 濾鏡屬性,filter是一個函數

模糊和偏移圖檔的顔色

filter:blur(5px)

img{
filter:blur(5px)
}

/*括号裡的值越大,圖檔變模糊。*/

img:hover{
filter:blur(0)
}
/*等于0 就會取消*/
           

2.calc函數

動态計算屬性

div{
  width:calc(100% - 80px)
}
           

裡面的-号左右一定要加空格。

在知道一個子元素的高度後,為了使另外一個子元素随父盒子變化,就可以使用

div>.son{
 witdh:calc(100% - 30px)
}
           

四、CSS3過渡效果

是一個狀态漸漸的過渡到另外一個狀态

div{
 witdh:100px;
 height:100px
 /*transition: 要過度的屬性    時間 運動取消 何時開始;*/
 transition: witdh 0.5s ,height 0.5s
  /*transition: all 0.5s*/
 /*多個變化的屬性逗号隔開或者時間什麼都一樣時,直接寫一個all就行*/
}
div:hover{
    witdh:300px
    height:300px
}
           

過渡屬性:witdh/height/背景顔色/内外邊距都性,想要所有的屬性直接寫all

時間:機關是s.

運動的曲線:ease(預設,速度逐漸慢下來)/linear(勻速)/ease-in(加速)/ease-out(減速)/ease-in-out(先加速後減速)

何時開始:機關是s,可以設定延遲觸發。預設是0s

五、CSS32D轉換

1.什麼是轉換(transform)

可實作元素的位移、旋轉、縮放等效果,在二維平面上改變标簽的位置和形狀的一種技術。transform的變化都不會影響其他的盒子,十分的友善。一般轉換都配合過渡來做。

2.移動:translate

類似于定位,可改變元素在頁面種的位置

寫法

transform:translate(x,y)
transform:translateX(x) //隻移動x軸方向
transform:translateY(y) //隻移動Y軸方向
//x就是x軸的位置,y就是y軸上的位置。網頁種往右是正x,往下是y。原點是左上角
           

移動元素方式基本有:定位,外邊距和2d移動

重點:

1.translate不會影響到其他元素的位置。可以看成移動的盒子變成脫标了,但還占據着那個位置。後面的元素不會頂上來。相當于絕對了。

2.translate中的百分比是相對于自身元素的寬高百分比

3.對行内标簽沒有效果

居中案例:

1.可以和margin-top:父盒子高度的一半/top:50%,來實作垂直居中,這個可以随盒子高度變化而變化,最好使用定位和translate來做,絕對定位。

2.以前是top50%,margin-tio:自己高度的一半,來實作垂直居中,這個是必須得有高度。

3.旋轉:rotate

讓元素在二維平面旋轉。

寫法

1.度數的機關是45deg

2.角度為正時,順時針,負時是逆時針。

3.預設旋轉的中心點是元素的中心的。

4.設定中心點

1.後面的參數x和y是用空格隔開的 。

2.x,y預設轉換的中心點是元素的中心點(50%,50%)

3.還可以給x和y設定像素或者方位名稱(top,bottom,letf,right,center)

4.移動,縮放中心點和旋轉都能修改中心點。

5.縮放:scale

放大和縮小元素

寫法

1.x和y逗号隔開

2.transform:scale(1,1):寬和高放大一倍,相當于沒有放大

3.transform:scale(2):隻寫一個參數,第二個參數和第一個參數一樣。

4.transform:scale(0.5)縮小

5.scale可以設定轉換中心的縮放,預設以中心點縮放,也可以修改縮放的中心點transform-origin,不會影響其他盒子。

6.以前的重新定義寬高變化是變的下和左右部分,上邊是不動的,不是以中心變大的,而且會影響其他盒子,而scale是中心放大,。

6.2D轉換的綜合寫法

1.順序會影響轉換的效果,先旋轉會改變坐标軸的方法

2.當我們同時有位移和其他屬性的時候,記得要将位移放到最前。

六、CSS3動畫

動畫可以設定多個節點來控制一個或一組動畫,常用來實作複雜的動畫效果。相比較過渡,動畫可以實作更多的變化,更多的控制,連續自動播放等。

1.動畫步驟

1.先定義動畫

@keyframes 動畫名稱  {
  0%{
     width :100px
}
100%{
    widt:200px
}

}
           

0表示動畫的開始,100%表示動畫的完成,這樣的規則叫動畫序列。

@keyframes 中規定某些css樣式,就能建立由目前樣式逐漸改變為新樣式的動畫

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

動畫的節點可以使用百分比來表示或者from和to,等同于0%和100%,百分比就是時間的劃分,百分百*時間,表示多長時間到那個點

百分百需要是整數

2.調用動畫

div{
     width:200px;
     height:200px;
     background-color:red;
     margin:10px;
     animation-name:動畫名稱;
     animation-duration:持續時間,機關是s;
}
           

一個元素可以的定義多個動畫

animation:move 1s,move2 3s
/*用逗号隔開即可*/
           

2.動畫的常用屬性

寫在css裡面

屬性 描述
@keyframes 規定動畫
animation 所有動畫屬性的簡寫屬性,除了animation-plat-state屬性
animation -name 規定@keyframes 動畫的名稱
animation-duration 規定動畫完成一個周期所花費的秒或毫秒,預設是0,必須的
animation-timing-function 規定動畫的速度曲線,預設是’ease’
animation-delay 規定動畫何時開始,預設是0
animation-iteration-count 規定動畫被播放的次數,預設是1,還有infinite
animation-direction 規定動畫是否在下一周期逆向播放,預設是’normal’,'alternate’逆播放
animation-play-state 規定動畫是否正在運作或暫停,預設是’running’,還有’pause’
animation-fill-mode 規定動畫結束後狀态,保持此位置是forwoards,回到起始位置是backwards

簡寫方式

按順序來寫

animation: 動畫名稱 持續時間 運動曲線 何時開始 播放次數 是否反方向 動畫結束的狀态
animation: move     5s     linear   2s    infinite alternate  forwards;
           

簡寫的屬性裡面不寫動畫的animation-play-state

animation-play-state動畫的暫停後開始經常和滑鼠經過等方式配合使用

想要動畫走回來,而不是跳回來,使用 animation-direction:alternate

盒子動畫結束後,停在結束位置: animation-fill-mode :forwoards

3.動畫速度調節

animation-timing-function屬性來控制動畫的速度

描述
linear 動畫從頭到尾的速度是相同的,勻速的
ease 預設。動畫以低速開始,然後加快,在結束前變慢
ease-in 動畫以低速開始
ease-out 動畫以低速結束
ease-in-out 動畫以低速開始和結束
steps() 指定了時間函數中的間隔數量(步長)

步長就是動畫分幾步來完成。動畫就不要在寫ease和linear了

white-space

讓文字強制在一行顯示

七、CSS33D轉換

1.三維坐标系

三維坐标系所構成的立體空間,

x軸,往右是正

y軸,往下是正

z軸,往螢幕外朝自己是正。

2.3D移動

transform:translateX(100px):僅是在x軸上移動
transform:translateY(100px):僅是在y軸上移動
transform:translateZ(100px):僅是在z軸上移動,z軸一般是px
transform:translate3d(x,y,z),其中x,y,z是要移動的距離。
           

3.透視perpective

透視也是視距:就是人的眼睛到螢幕的距離

距離視覺點越近的在電腦平面成像越大,越遠成像越小。

透視的機關是像素。

translateZ要配合透視使用。

透視寫在被觀察元素的父盒子上面。

沒有父級就給body.

視距越小,即眼睛到螢幕越近,物體越大

視距越大,即眼睛到螢幕越遠,物體越小

但是z越大,物體越大

z越小,物體越小

4.3D旋轉

transform:rotateX(45deg):沿着X軸正方向旋轉
transform:rotateY(45deg):沿着Y軸正方向旋轉
transform:rotateZ(45deg):沿着Z軸正方向旋轉
transform:rotate3d(x,y,z,45deg):沿着自定義軸旋轉正旋轉
transform:rotate3d(1,0,0,45deg):沿着x軸旋轉正旋轉45度
transform:rotate3d(1,1,0,45deg):沿着x軸,y軸,即正中間旋轉旋轉正旋轉45度
           

5.3d呈現 transfrom-style

1控制子元素是否開啟3d元素空間

2.transfrom-style:flat子元素不開腔3d空間,預設的

3.transfrom:preserve-3d,子元素開啟立體空間

4.代碼寫給父級,影響的是子盒子

5.不開啟的話,子元素不會在3d空間旋轉,而是子元素自身旋轉,寫來之後是把父盒變成立體,旋轉,不會影響子盒子的狀态。

案例:翻轉盒子

<style>
        body {
            perspective: 400px;
        }
        .box {
            position: relative;
            width: 300px;
            height: 300px;
            margin: 100px auto;
            transition: all .4s;
            /* 讓背面的紫色盒子保留立體空間 給父級添加的 */
            transform-style: preserve-3d;
        }
       
        .box:hover {
            transform: rotateY(180deg);
        }
       
        .front,
        .back {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border-radius: 50%;
            font-size: 30px;
            color: #fff;
            text-align: center;
            line-height: 300px;
        }
       
        .front {
            background-color: pink;
            z-index: 1;
        }
       
        .back {
            background-color: purple;
            /* 像手機一樣 背靠背 旋轉 */
            transform: rotateY(180deg);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="front">正面</div>
        <div class="back">反面</div>
    </div>
</body>
           

一、CSS3新增選擇器

querySelector
擷取第一個類名為指定參數的元素,
querySelectorAll
擷取指定元素的所有标簽或類名。