2019-01-02 css3過(guò)渡動(dòng)畫(huà) css3圓角陰影透明度 運(yùn)動(dòng)曲線 圖片文字遮罩 變形 元素旋轉(zhuǎn) 動(dòng)畫(huà)

一、 動(dòng)畫(huà)
網(wǎng)頁(yè)動(dòng)畫(huà)可以通過(guò)以下幾種方式實(shí)現(xiàn)(gif、flash 除外),
css3 動(dòng)畫(huà)
SVG 動(dòng)畫(huà)
JS 動(dòng)畫(huà)(包括 css、SVG 的屬性修改實(shí)現(xiàn)的動(dòng)畫(huà))

最早 JS 通過(guò) setTimeout() 或者 setInterval() 方法設(shè)置一個(gè)時(shí)間,
來(lái)控制幀與幀之間的時(shí)間間隔。

setTimeout() 直接用跳出來(lái)終止下一幀。
setInterval() 使用 clearInterval() 來(lái)取消周期執(zhí)行。
但是這樣效果可能不夠流暢,且會(huì)占用額外的資源。
后來(lái),有了一個(gè)requestAnimationFrame(),讓瀏覽器決定最優(yōu)幀速率、選擇繪制下一幀的最佳時(shí)機(jī)。
requestAnimationFrame() 用 cancelAnimationFrame() 來(lái)結(jié)束。
css3 動(dòng)畫(huà)
能夠執(zhí)行補(bǔ)間狀態(tài)的條件是,屬性值能夠轉(zhuǎn)換成數(shù)值,這樣就能參與運(yùn)算。如:

顏色(color,background-color,border-color…)
長(zhǎng)度/大?。╳idth,height,font-size,border-width,border-radius…)
透明度(opacity)
堆疊順序(z-index)你吖補(bǔ)間它有毛用
而不能參與運(yùn)算就意味著不能拿來(lái)補(bǔ)間狀態(tài),也就是沒(méi)有中間狀態(tài),如:

position(absolute、fixed、relative…)
background-image(一個(gè)確定的 url)

一拍腦門(mén)就能想到,創(chuàng)建一個(gè)補(bǔ)間動(dòng)畫(huà)的條件有:

開(kāi)始狀態(tài)
結(jié)束狀態(tài)
執(zhí)行時(shí)間
補(bǔ)間效果
假如有個(gè)方塊,寬度從 10px 變成 100px。

開(kāi)始狀態(tài)呢,在原 css 里就可以定義了 width: 10px。

結(jié)束狀態(tài)呢,我們可以通過(guò)用 JS 直接修改 width 值,或者增加一個(gè) class 選擇器的方式,
或者是 :hover 等其他表示狀態(tài)的偽類(lèi),讓 width: 100px。

而這時(shí),你需要一個(gè)補(bǔ)間動(dòng)畫(huà)屬性來(lái)聲明 執(zhí)行時(shí)間 和 補(bǔ)間效果,
它就是 transition,中文譯作 過(guò)渡,就是我所說(shuō)的補(bǔ)間的意思。

transition 為以下屬性的簡(jiǎn)寫(xiě)

transition-property 規(guī)定哪個(gè)屬性應(yīng)用過(guò)渡
transition-duration 執(zhí)行時(shí)間
transition-timing-function 補(bǔ)間效果,默認(rèn)為 ease
transition-delay 延遲多少時(shí)間開(kāi)始
css3 還提供了一個(gè) animation 屬性來(lái)創(chuàng)建更豐富的自定義動(dòng)畫(huà),而減少 JS 的介入。

比如:

你想一個(gè)動(dòng)畫(huà)中擁有多個(gè)狀態(tài)
每個(gè)狀態(tài)修改的屬性值較多
循環(huán)播放
逆向播放
可自動(dòng)開(kāi)始,可中途暫停
animation 和 @keyframes 配合使用。

@keyframes 用來(lái)定義動(dòng)畫(huà),animation 則可以多處應(yīng)用,他們通過(guò)一個(gè) name 來(lái)連接彼此,
因此 @keyframes 必須要起個(gè)名字,而 animation 則有個(gè) animation-name。

animation 在應(yīng)用時(shí),你可以自定義它:

animation-duration 執(zhí)行時(shí)間
animation-time-function 補(bǔ)間效果,默認(rèn)是 ease
animation-delay 延遲多少時(shí)間開(kāi)始
animation-iteration-count 循環(huán)播放次數(shù)
animation-direction 是否在下一周期逆向播放
animation-play-state 動(dòng)畫(huà)是否暫停,通過(guò)它,可以實(shí)現(xiàn)是否自動(dòng)播放。要中途暫停的話,就要修改值,通過(guò)偽類(lèi)或 JS 實(shí)現(xiàn)
animation-fill-mode 這個(gè)屬性倒是有點(diǎn)出乎意料之外,請(qǐng)自行研究使用場(chǎng)景
可見(jiàn) w3c 規(guī)范制定者們考慮到我們要用起來(lái)簡(jiǎn)單呢,基本上和我們思維方式一致。

實(shí)現(xiàn)動(dòng)畫(huà)的多個(gè)狀態(tài)是在 @keyframes 定義時(shí)完成的。

采用 0%~100% 的分割方式,我們就不用在 執(zhí)行時(shí)間 之外考慮時(shí)間問(wèn)題了。
SVG 動(dòng)畫(huà)
css3 動(dòng)畫(huà)屬性只管得住自己的 css 屬性,SVG 繪制的圖形,還得 SVG 自己解決。而對(duì)于 SVG 的 css 樣式,一般兩種皆可。

SVG 大大們的思維方式就有點(diǎn)繞了,竟然提供了 5 種動(dòng)畫(huà) 標(biāo)簽讓我選擇:

set 相當(dāng)于 animate 的 calcMode="discrete",忽略
animate
animateColor 相當(dāng)于 animate 的 attributeName="color",忽略
animateTransform
animateMotion
我們先來(lái)看看和 css3 最像的 animate 標(biāo)簽,擁有的屬性有

attributeName 規(guī)定哪個(gè)屬性應(yīng)用過(guò)渡
from 開(kāi)始狀態(tài)
to/by 結(jié)束狀態(tài),至少出現(xiàn)一個(gè)
values 多個(gè)狀態(tài)時(shí),忽略 from/to/by
begin 延遲多少時(shí)間開(kāi)始
dur 執(zhí)行時(shí)間
calcMode,keyTimes,keySplines 自定義補(bǔ)間效果
repeatCount,repeatDur 循環(huán)播放次數(shù)/持續(xù)時(shí)間

animateTransform 主要是為了 attributeName="transform",
跟 css3 動(dòng)畫(huà)結(jié)合 transform 變換類(lèi)似,多了一個(gè) type="scale" 屬性用來(lái)區(qū)分相關(guān)參數(shù)。

animateMotion 是 SVG 甩 css3 動(dòng)畫(huà)一條街的強(qiáng)大技能,可以讓SVG各種圖形沿著特定的 path 路徑運(yùn)動(dòng)。

SVG 動(dòng)畫(huà)比 css 動(dòng)畫(huà)更強(qiáng)大,所以也更復(fù)雜。

細(xì)分成這 5 類(lèi)標(biāo)簽,大概是性能考慮,人工簡(jiǎn)單區(qū)分一下數(shù)值、顏色、變換,可以為計(jì)算機(jī)省去大量的無(wú)用運(yùn)算。

CSS3動(dòng)畫(huà)的實(shí)現(xiàn)
1.transform 變形
.div{
transform:translate(x,y);
}
.div{
transform:scale(x,y);//xy方向倍數(shù)
}
.div{
transform:rptate(-30deg);//角度
}
.div{
transform:skew(x,y);//xy方向傾斜角度
}

2.transition 過(guò)渡
transition: width 3s ease(快-慢-快)/linear(線性勻速)/ease in(慢-快)/ease out(快-慢)

3.animation 動(dòng)畫(huà)
@keyframes 自定義名稱(chēng){
from/to/百分百{
樣式屬性:樣式;
}
}

二、圓角

CSS3 使用border-radius屬性設(shè)置圓角效果

該屬性可以通過(guò)設(shè)置圖片或塊級(jí)元素四個(gè)角的圓角半徑像素?cái)?shù)來(lái)實(shí)現(xiàn)該效果。W3C規(guī)定該屬性的可能取值為:

none,默認(rèn)值,表示元素沒(méi)有圓角效果

length,由浮點(diǎn)數(shù)字和單位標(biāo)識(shí)組成的長(zhǎng)度值

%,由百分比設(shè)置的圓角值

該屬性可以分別設(shè)置元素的四個(gè)圓角效果,采用下列格式來(lái)實(shí)現(xiàn)。

格式:border-radius: 左上角 右上角 右下角 左下角;

通常,四個(gè)方向的角半徑均采用length取值來(lái)實(shí)現(xiàn),該取值必須為浮點(diǎn)數(shù)字和單位標(biāo)識(shí)共同組成。同時(shí)規(guī)定,該取值不得取負(fù)數(shù)。
例1:利用整數(shù)來(lái)實(shí)現(xiàn)圓角取值。

div{

width: 200px; height: 150px;

border: solid 1px #aaaaaa;

border-radius: 10px 5px 10px 5px;

background-color: #ff5857;

}

上述實(shí)例設(shè)置了一個(gè)div塊級(jí)元素,其寬度為200px,高度為150px。為了能夠看到其圓角效果,增加了顏色為#ff5857的背景顏色,并且添加了1px大小的邊框,其邊框?yàn)閷?shí)線,邊框顏色為#aaaaaa。最后設(shè)置其圓角效果,左上角和右下角均為10px,右上角和左下角均為5px。

三、圖片文字遮罩
1.給圖片動(dòng)態(tài)添加半透明遮罩

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style type="text/css">  
        .demo{  
            width:425px;  
            height:283px;  
            position: relative;  
            overflow:hidden;  
        }  
        demo img{  
        width:100%;  
        }  
        .demo i{  
            position:absolute;  
            top:0;  
            width:100%;  
            height:100%;  
            background-color: rgba(251,251,251,0);  
            transition: background-color 0.5s;  
        }  
        .demo:hover i{  
            background-color: rgba(251,251,251,0.3);  
        }  
    </style>  
</head>  
<body>  
<p class="demo">  
        <img src="2.jpg">  
        <i></i>  
</p>  
</body>  
</html>  

2.文字遮罩效果
html代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="share.css">
</head>
<body>
<div class="dark"> <h1>IMAGES</h1> </div>
</body>
</html>

css代碼

.dark h1 {
    margin: 0;
    font-size: 18vw;
    text-transform: uppercase;
    font-family: Montserrat, sans-serif;
    line-height: 2.5;
    color: #000000;
    background: #ffffff;
}
.dark {
    text-align: center;
    background-size: cover;
    background-image: url(timg3.jpg);
}
.dark h1 { mix-blend-mode: lighten; }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CSS3 有3種和動(dòng)畫(huà)相關(guān)的屬性:transform, transition, animation。 概況 其中 ...
    一Left一閱讀 3,428評(píng)論 0 3
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類(lèi)選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,136評(píng)論 0 2
  • CSS參考手冊(cè) 一、初識(shí)CSS3 1.1 CSS是什么 CSS3在CSS2.1的基礎(chǔ)上增加了很多強(qiáng)大的新功能。目前...
    沒(méi)汁帥閱讀 4,296評(píng)論 1 13
  • 1、屬性選擇器:id選擇器 # 通過(guò)id 來(lái)選擇類(lèi)名選擇器 . 通過(guò)類(lèi)名來(lái)選擇屬性選擇器 ...
    Yuann閱讀 1,771評(píng)論 0 7
  • 大女兒思思出生前,親朋長(zhǎng)輩對(duì)我說(shuō),你自由自在的日子以后是不會(huì)有了,往后的日子就如雨燕被綁了翅膀,再也飛不起來(lái)了;孩...
    蘭若隨筆閱讀 811評(píng)論 1 4

友情鏈接更多精彩內(nèi)容