Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
天我們學(xué)習(xí)的內(nèi)容有:過渡,動(dòng)畫,轉(zhuǎn)換,伸縮盒子。
可以說今天學(xué)習(xí)的內(nèi)容都是重量級(jí)的大佬,學(xué)好了,使用css3做出酷炫的效果 So Easy!~~
1.過渡
在css3中,有一個(gè)屬性可以設(shè)置過渡效果。
它就是transition,所謂的過渡效果,指的就是以動(dòng)畫的形式慢慢演化樣式屬性變化的過程。
A.案例:通過transition設(shè)置焦點(diǎn)過渡效果
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>div{width: 200px;height: 200px;margin:200px;background: url(girl.jpg);border-radius:50%;transition:all 1s linear 0.3s;cursor: pointer;}div:hover{box-shadow: 0px 0px 20px blue;}</style></head><body><div></div></body></html>
注意頁面中的代碼:
第一,我們給div添加了一個(gè)hover偽類樣式,當(dāng)我們鼠標(biāo)懸停在div上方的時(shí)候,會(huì)給div盒子添加一個(gè)藍(lán)色的盒子陰影。
第二,我們給div盒子添加了一個(gè)transition樣式,設(shè)置的值為:all 1s linear 0.3s;
這四個(gè)數(shù)據(jù)分別對(duì)應(yīng)
transition-property(需要過渡的屬性):如果設(shè)置為all表示所有樣式屬性都需要過渡。
transition-duration(過渡的時(shí)間):以秒作為單位,設(shè)置過渡的時(shí)間
transition-timing-function(過渡的方式):常用的有l(wèi)inear(勻速),ease(先慢后快),ease-in,ease-out,ease-in-out等
transition-delay(延遲的時(shí)間):以秒作為單位進(jìn)行延遲,延遲之后開始進(jìn)行過渡效果。
所以,我們通過transition這個(gè)復(fù)合屬性設(shè)置的過渡效果為:
all:需要過渡所有的屬性
1s:過渡的時(shí)間為1秒
linear:勻速過渡
0.3s:在延遲0.3秒之后開始過渡動(dòng)畫。
如果大家理解了上面的描述,那么也就不難理解咱們鼠標(biāo)放到div上之后,為啥會(huì)慢慢出現(xiàn)藍(lán)色的光暈了,就是因?yàn)樵蹅兲砑恿诉^渡,所以,慢慢的就會(huì)給盒子添加陰影效果。
2.動(dòng)畫:
在學(xué)習(xí)完了過渡之后,發(fā)現(xiàn)咱們可以使用transition去以動(dòng)畫的形式展示樣式的改變以及變化的過程,這可以幫助我們來實(shí)現(xiàn)一些過渡的動(dòng)畫。
但是,有的時(shí)候,我們的需求會(huì)更加的復(fù)雜,要求會(huì)更加的多變,那么,transition可能就無法滿足我們的需要了,我們需要有更加炫酷,復(fù)雜的效果呈現(xiàn)。
那么,動(dòng)畫animation就可以滿足我們的需要。
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>@keyframes moveAndChange{0%{left:0px;top:0px;}25%{left:200px;top:200px;background:green;border-radius: 0;}50%{left:400px;top:200px;background:blue;border-radius: 50%;}75%{left:400px;top:0px;background:#ccc;border-radius: 0;}100%{left:0px;top:0px;background:red;border-radius: 50%;}}div{margin:200px;width: 200px;height: 200px;position: absolute;background:red;border-radius:50%;animation: moveAndChange 5s linear 0.5s infinite normal;}</style></head><body><div></div></body></html>
代碼效果如下:
同樣,讓我們來關(guān)注編寫的代碼:
1.在樣式中,首先我們使用@keyframes 來定義了一個(gè)復(fù)雜的動(dòng)畫,在css3中,新增了@keyframes可以來幫助我們添加動(dòng)畫。代碼如下:
/*動(dòng)畫的名字叫做moveAndChange*/
@keyframes moveAndChange{
/*動(dòng)畫最初的時(shí)候,將left設(shè)置為0px,top設(shè)置為0px*/
0%{
left:0px;
top:0px;
}
/*當(dāng)動(dòng)畫進(jìn)行到25%的時(shí)候,使用動(dòng)畫將left過渡到200px,top過渡到200px,
背景顏色過渡為綠色,圓角過渡為0(無圓角)*/
25%{
left:200px;
top:200px;
background:green;
border-radius: 0;
}
/*當(dāng)動(dòng)畫進(jìn)行到50%的時(shí)候,使用動(dòng)畫將left過渡到400px,top過渡到200px,
背景顏色過渡為藍(lán)色,圓角過渡為50%(正圓)*/
50%{
left:400px;
top:200px;
background:blue;
border-radius: 50%;
}
/*當(dāng)動(dòng)畫進(jìn)行到75%的時(shí)候,使用動(dòng)畫將left過渡到400px,top過渡到0,
背景顏色過渡為灰色,圓角過渡為0(無圓角)*/
75%{
left:400px;
top:0px;
background:#ccc;
border-radius: 0;
}
/*當(dāng)動(dòng)畫結(jié)束的時(shí)候,使用動(dòng)畫將left過渡到0x,top過渡到0px,
背景顏色過渡為紅色,圓角過渡為50%(正圓)*/
100%{
left:0px;
top:0px;
background:red;
border-radius: 50%;
}
}
這是一個(gè)比較復(fù)雜的動(dòng)畫效果,可以發(fā)現(xiàn),它通過百分比的形式將一個(gè)完整的動(dòng)畫拆分成了5個(gè)部分,每個(gè)部分都有不同的樣式效果,而當(dāng)我們采用該動(dòng)畫的元素就會(huì)按照設(shè)置的順序和樣式效果進(jìn)行動(dòng)畫的過渡和展示。
2.上面我們只是通過@keyframes創(chuàng)建了一個(gè)動(dòng)畫,我們還需要通過特定的語法來使用這個(gè)動(dòng)畫。
就是下面這句代碼了:
animation: moveAndChange 5s linear 0.5s infinite normal;
它是一個(gè)復(fù)合屬性,設(shè)置了6個(gè)值,分別對(duì)應(yīng):
animation-name(設(shè)置動(dòng)畫的名稱):用來設(shè)置動(dòng)畫的名字,我們這里寫的是moveAndChange ,也就是說我們就是要使用我們剛剛創(chuàng)建的動(dòng)畫。
animation-duration(設(shè)置整個(gè)動(dòng)畫的時(shí)間):以秒作為單位,我們這里寫的是5s,表示整個(gè)動(dòng)畫的時(shí)間為5秒
animation-timing-function(設(shè)置播放動(dòng)畫的方式):播放動(dòng)畫的方式,常用的有l(wèi)inear(勻速),ease(先慢后快),ease-in,ease-out,ease-in-out等,我們使用的是linear勻速播放動(dòng)畫。
animation-delay(設(shè)置動(dòng)畫的延遲):以秒作為單位,我們寫的是0.5s,表示延遲0.5秒之后開始播放動(dòng)畫。
animation-iteration-count(設(shè)置動(dòng)畫播放的次數(shù)):播放動(dòng)畫的次數(shù),我們這里寫的是infinite ,表示動(dòng)畫將會(huì)被播放無限次,如果寫數(shù)字,那么就會(huì)播放數(shù)字對(duì)應(yīng)的次數(shù)。
animation-direction(設(shè)置是否反向播放動(dòng)畫):我們寫的是normal,表示正常播放動(dòng)畫,如果寫的是
alternate則表示要反向播放動(dòng)畫,大家也可以自己試一試這個(gè)效果。
最終,我們通過@keyframes創(chuàng)建動(dòng)畫,通過animation設(shè)置動(dòng)畫,成功完成了這個(gè)復(fù)雜的動(dòng)畫效果。
3.轉(zhuǎn)換
在css3中,我們通過transform屬性可以設(shè)置元素的轉(zhuǎn)換效果,具體的效果如下:
A.平移
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>body{background:pink;}div{width: 200px;height: 200px;position: absolute;background: green;left:0px;top:0px;transform: translate(300px,300px);}</style></head><body><div></div></body></html>
代碼效果如下:
如上圖所示,本來div盒子的位置是left:0,top:0;
但是我們通過transform: translate(300px,300px);將盒子進(jìn)行了偏移,所以,盒子的位置發(fā)生了改變。
B.旋轉(zhuǎn)
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>body {background: pink;}div {width: 200px;height: 200px;margin: 200px;position: absolute;background: green;left: 0px;top: 0px;transform: rotate(45deg);}</style></head><body><div></div></body></html>
代碼效果如下:
如上圖所示,本來div盒子應(yīng)該是四四方方的。
但是,經(jīng)過我們的代碼transform: rotate(45deg); //deg為單位,表示度數(shù)。
進(jìn)行了45度的旋轉(zhuǎn)之后,呈現(xiàn)出來的就是一個(gè)菱形的盒子了,旋轉(zhuǎn)的正方向?yàn)轫槙r(shí)針,負(fù)方向?yàn)槟鏁r(shí)針。
C.縮放
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>body {background: pink;}div {width: 200px;height: 200px;margin: 200px;position: absolute;background: green;left: 0px;top: 0px;transform: scale(0.5,0.25);}</style></head><body><div></div></body></html>
代碼效果如下:
如上圖所示,本來盒子的寬高為200*200,而我們通過transform: scale(0.5,0.25);進(jìn)行的縮放
scale的第一個(gè)參數(shù)為0.5,表示橫向縮小為0.5倍
scale的第二個(gè)參數(shù)為0.25,表示縱向縮小為0.25倍。
scale的參數(shù)如果為1,則表示不進(jìn)行任何縮放,小于1就是做縮小,而大于1表示做放大。
小結(jié):transform轉(zhuǎn)換中其實(shí)還包含了skew(傾斜),matrix(矩陣轉(zhuǎn)換),相對(duì)來說用到的不是特別多,所以在本文中我們便不再做介紹。
4.flex布局
Flex布局,可以簡便、完整、響應(yīng)式地實(shí)現(xiàn)各種頁面布局。
Flex是Flexible Box的縮寫,翻譯成中文就是“彈性盒子”,用來為盒裝模型提供最大的靈活性。任何一個(gè)容器都可以指定為Flex布局。
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>div{box-sizing: border-box;}.parent {width: 600px;height: 200px;margin: 100px;position: absolute;background: green;left: 0px;top: 0px;display: flex;justify-content: flex-start}.parent div{width: 20%;border:1px solid #ccc;background:pink;}</style></head><body><div><div>1</div><div>2</div><div>3</div><div>4</div></div></body></html>
代碼效果如下:
如圖所示,咱們通過display:flex將.parent元素設(shè)置為了flex盒子,那么子元素將會(huì)按照justify-content設(shè)置的方式進(jìn)行元素的排列,目前看來,和我們沒有設(shè)置flex盒子的效果是一致的。
接下來我們更改一下,將justify-content設(shè)置為flex-end,效果如下圖所示:
所以我們就應(yīng)該發(fā)現(xiàn),flex-start是讓所有的子元素從父元素的左側(cè)開始排列
而flex-end是讓所有的子元素從元素的右側(cè)開始排列。
我們?cè)賮砀囊幌拢瑢ustify-content設(shè)置為center,效果如下圖所示:
更厲害了,子元素在父盒子的中央位置排列顯示了。
然后,我們?cè)賹ustify-content設(shè)置為space-around,效果如下圖所示:
它是平均分配的形式為每一個(gè)子元素設(shè)置了間距,但是看起來有點(diǎn)變扭。
所以我們推薦將justify-content設(shè)置為space-between,效果如下圖:
我們還可以通過flex-wrap來設(shè)置子元素是否換行顯示,以及flex-direction設(shè)置子元素排列的順序。
這兩個(gè)屬性可以設(shè)置的值如下:
flex-wrap: nowrap;//不換行,會(huì)自動(dòng)收縮
flex-wrap: warp;//換行,會(huì)自動(dòng)收縮
flex-wrap: warp-reverse;//反轉(zhuǎn),從默認(rèn)的從上到下排列反轉(zhuǎn)為從下到上。
flex-direction:row; //從左至右一行一行進(jìn)行子元素的排列
flex-direction:column; //從上到下一列一列進(jìn)行子元素的排列
flex-direction:row-reverse; //從右至左一行一行進(jìn)行子元素的排列
flex-direction:column-reverse; //從下到上一列一列進(jìn)行子元素的排列
案例代碼如下:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>div{box-sizing: border-box;}.parent {width: 600px;height: 200px;margin: 100px;position: absolute;background: green;left: 0px;top: 0px;display: flex;justify-content: space-between;flex-wrap: nowrap;flex-direction: row-reverse;}.parent div{width: 20%;border:1px solid #ccc;background:pink;}</style></head><body><div><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div></div></body></html>
我們?cè)O(shè)置了flex-wrap: nowrap;(不換行,壓縮所有的子元素在一行中顯示),以及flex-direction: row-reverse;(反向排列)
代碼效果如下:
如果設(shè)置為flex-wrap: warp(換行顯示無法在一行顯示的子元素),則效果如下:
如果將flex-direction: column;,則會(huì)縱向排列元素,效果如下圖:
除了上面的這些給伸縮盒子父元素設(shè)置的樣式之外,我們還可以可以伸縮盒子的子元素設(shè)置flex屬性,用來設(shè)置平均分配整個(gè)父盒子的空間。
代碼如下:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>div{box-sizing: border-box;}.parent {width: 600px;height: 200px;margin: 100px;position: absolute;background: green;left: 0px;top: 0px;display: flex;justify-content: space-between;}.parent div{flex:1;width: 20%;border:1px solid #ccc;background:pink;}</style></head><body><div><div>1</div><div>2</div><div>3</div><div>4</div></div></body></html>
效果如下:
如上圖所示,每個(gè)盒子平均分配了父盒子的空間,原本寬度為20%,現(xiàn)在被拉伸了。
除此之外,咱們還可以使用flex屬性進(jìn)行進(jìn)一步的設(shè)置,代碼如下:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Document</title><style>div{box-sizing: border-box;}.parent {width: 600px;height: 200px;margin: 100px;position: absolute;background: green;left: 0px;top: 0px;display: flex;justify-content: space-between;}.parent div:nth-of-type(1){flex:1;border:1px solid #ccc;background:red;}.parent div:nth-of-type(2){flex:2;border:1px solid #ccc;background:green;}.parent div:nth-of-type(3){flex:2;border:1px solid #ccc;background:blue;}.parent div:nth-of-type(4){flex:1;border:1px solid #ccc;background:pink;}</style></head><body><div><div>1</div><div>2</div><div>3</div><div>4</div></div></body></html>
效果如下圖:
我們分別給四個(gè)子盒子設(shè)置了flex:1 , flex:2, flex:2 ,flex:1.
這是什么意思呢?
四個(gè)flex加起來一共是6.那么第一個(gè)盒子就占據(jù)整個(gè)父盒子的1/6寬度。
同理,另外三個(gè)盒子分別占據(jù)2/6,2/6,1/6的寬度,所以就形成了我們現(xiàn)在看到的效果。
原文來源于:黑馬程序員社區(qū)
學(xué)習(xí)資源:
想學(xué)習(xí)css,可以關(guān)注:黑馬程序員頭條號(hào),后臺(tái)回復(fù):css
以往,想在HTML上實(shí)現(xiàn)動(dòng)畫效果,要不就用被喬布斯恨死的了Flash 動(dòng)畫,要不就用網(wǎng)頁動(dòng)畫圖像或者JavaScript 實(shí)現(xiàn)效果。在CSS3之后,就可以用CSS在HTML上實(shí)現(xiàn)動(dòng)畫了。
要?jiǎng)?chuàng)建 CSS3 動(dòng)畫,你需要了解 @keyframes 規(guī)則。現(xiàn)在 @keyframes 創(chuàng)建動(dòng)畫時(shí),需將其綁定到一個(gè)選擇器,否則動(dòng)畫不會(huì)有任何效果。
用CSS3原生代碼創(chuàng)建動(dòng)畫,語法是@keyframes animationname {keyframes-selector {css-styles;}},其中animationname :必需,動(dòng)畫的名稱;
keyframes-selector:必需,動(dòng)畫時(shí)長的百分比合法的值:0-100%, from(與 0% 相同),to(與 100% 相同)
css-styles:必需,一個(gè)或多個(gè)合法的 CSS 樣式屬性。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>動(dòng)起來</title>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation: myfirst 5s;
-webkit-animation: firstan 5s; /* Safari and Chrome */
}
@keyframes firstan {
0% {
background: red;
left: 0px;
top: 0px;
}
25% {
background: yellow;
left: 200px;
top: 0px;
}
50% {
background: blue;
left: 200px;
top: 200px;
}
75% {
background: green;
left: 0px;
top: 200px;
}
100% {
background: red;
left: 0px;
top: 0px;
}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0% {
background: red;
left: 0px;
top: 0px;
}
25% {
background: yellow;
left: 200px;
top: 0px;
}
50% {
background: blue;
left: 200px;
top: 200px;
}
75% {
background: green;
left: 0px;
top: 200px;
}
100% {
background: red;
left: 0px;
top: 0px;
}
}
</style>
</head>
<body>
<div/>
</body>
</html>
輸出結(jié)果
如果每次都要自己手動(dòng)用CSS去創(chuàng)建動(dòng)畫,那效果太低了。為此,有人專門專門開發(fā)了CSS動(dòng)畫庫animation.css。可以在線https://animate.stylek看效果,它里面的動(dòng)畫效果,可以滿足大多數(shù)需求了。下載https://github.com/animate-css/animate.css里的animate.min.css文件,放到HTML文件相同目錄下。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用動(dòng)畫庫實(shí)現(xiàn)動(dòng)畫</title>
<link rel="stylesheet" type="text/css" href="animate.min.css"/>
</head>
<body>
<main class="animate__animated animate__fadeInLeft">
老陳說編程,動(dòng)畫效果行
</main>
</body>
</html>
輸出結(jié)果
好了,有關(guān)CSS動(dòng)畫效果的內(nèi)容,老陳講完了,如果覺得對(duì)你有所幫助,希望老鐵能轉(zhuǎn)發(fā)點(diǎn)贊,讓更多的人看到這篇文章。你的轉(zhuǎn)發(fā)和點(diǎn)贊,就是對(duì)老陳繼續(xù)創(chuàng)作和分享最大的鼓勵(lì)。
一個(gè)當(dāng)了10年技術(shù)總監(jiān)的老家伙,分享多年的編程經(jīng)驗(yàn)。想學(xué)編程的朋友,可關(guān)注:老陳說編程。分享Python,前端(小程序)、App和嵌入式方面的干貨。關(guān)注我,沒錯(cuò)的。
#前端##HTML5##CSS##程序員##Web#
animate.css是一堆很酷,有趣且跨瀏覽器的動(dòng)畫,供你在項(xiàng)目中使用。非常適合強(qiáng)調(diào),主頁,滑塊和一般的加水效果。
animate.css v4正在進(jìn)行許多改進(jìn)和重大更改,包括CSS自定義屬性支持(又稱CSS變量)和類前綴,以確保安全使用。感興趣的小伙伴可以上github關(guān)注進(jìn)展以及提供反饋!
animate.css的受歡迎程度毋庸置疑,在Github上star數(shù)高達(dá)接近63k,這是一個(gè)非常可觀的數(shù)據(jù),我相信其實(shí)大多數(shù)人或多或少都用過它
https://daneden.github.io/animate.css/
$ npm install animate.css --save
或者 yarn:
$ yarn add animate.css
要在你網(wǎng)站中使用animate.css,只需將樣式表放入文檔的<head>中,然后將動(dòng)畫類(animated)與任何動(dòng)畫名稱一起添加到元素中,那么一個(gè)簡單的動(dòng)畫效果就實(shí)現(xiàn)了,一下就是一個(gè)最簡單的例子:
<head> <link rel="stylesheet" href="animate.min.css"> </head>
<h1 class="animated infinite bounce delay-2s">Example</h1>
以下是你可以使用的所用動(dòng)畫效果class
可以更改動(dòng)畫的持續(xù)時(shí)間,添加延遲或更改動(dòng)畫播放的次數(shù):
.yourElement { animation-duration: 3s; animation-delay: 2s; animation-iteration-count: infinite; }
將animate.css與Javascript結(jié)合使用時(shí),可以使用animate.css進(jìn)行大量其他工作。一個(gè)簡單的例子:
const element = document.querySelector('.my-element') element.classList.add('animated', 'bounceOutLeft')
還可以檢測(cè)動(dòng)畫何時(shí)結(jié)束:
const element = document.querySelector('.my-element') element.classList.add('animated', 'bounceOutLeft') element.addEventListener('animationend', function() { doSomething() })
可以使用以下簡單功能來添加和刪除動(dòng)畫:
function animateCSS(element, animationName, callback) { const node = document.querySelector(element) node.classList.add('animated', animationName) function handleAnimationEnd() { node.classList.remove('animated', animationName) node.removeEventListener('animationend', handleAnimationEnd) if (typeof callback === 'function') callback() } node.addEventListener('animationend', handleAnimationEnd) }
并像這樣使用它:
animateCSS('.my-element', 'bounce') // or animateCSS('.my-element', 'bounce', function() { // Do something after animation })
注意,這些示例使用的是ES6的const聲明,不再支持IE10和某些古老的瀏覽器。
可以直接在元素的class屬性上添加延遲,如下所示:
<div class="animated bounce delay-2s">Example</div>
通過添加這些類,可以控制動(dòng)畫的速度,如下所示:
<div class="animated bounce faster">Example</div>
Animate.css由gulp.js提供支持,這意味著你可以輕松創(chuàng)建自定義版本。
有些時(shí)候你看到別人的網(wǎng)站,感覺速度也不是很快,但是很自然,那么很有可能是使用了動(dòng)畫,使用動(dòng)畫不會(huì)加快網(wǎng)站的訪問速度,但是可以讓網(wǎng)頁瀏覽器來更加的平滑、更加的自然,使用起來會(huì)感覺很舒適,不會(huì)給人卡頓的感覺!
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。