[持續更新]CSS3學習筆記(二)漸變&圓角&陰影&變換&動畫
1. 顏色模式
在網頁中常見的顏色模式有:RGB,HSLA。
RGB 大家不陌生,分別代表red,green,blue。使用6位16進位制數表示。#00FF00;
RGBA 就說多了一個Aplha透明通道。這個數值用0~1的數字來表示。rbga(255,255,255,0.3);
HSLA 分別代表色調Hue,飽和度Saturation,亮度Light,透明度Alpha。
但是在實際應用中,通常是HSLA調整顏色,之後轉換成rbg的顏色模式表示。
在相容方面:IE8及以下版本不支援HSLA顏色表示法。
IE6及之前的版本不支援RGBA的,可以使用IE特有的濾鏡來新增效果。
如果是圖片,指定透明度使用opacity屬性,該屬性值也是0~1的數。
.image{
filter:Alpha(Opacity);/IE相容程式碼/
opacity:0.2
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
2. 漸變
CSS3中新增的漸變可以說是使用CSS來代替圖片完成美化效果,減少圖片使用。
漸變分為線性漸變(linear-gradient),和發射漸變(radial-grandient)。
線性漸變語法:
background:linear-gradient(方向,開始顏色,結束顏色);
方向預設是從上到下漸變,可以指定left/to right, 還可以指定角度0deg, 或者左下角bottom left等,顏色可以指定多個,還可以對每部分顏色指定寬度等;
background:linear-gradient(red,blue); background:linear-gradient(left,red,blue); background:linear-gradient(45deg,red,blue); background:linear-gradient(red,blue); background:linear-gradient(45deg,red,blue); background:linear-gradient(bottom left, red,blue); background:linear-gradient(left, red 15%,orange 15%,blue 70%);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
另外,該屬性需要寫明瀏覽器特有的標識,下面給出一個彩虹色的css漸變。
. linear-gradient {
background:-webkit-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
background:-o-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
background:-moz-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
background:linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
放射漸變跟線性漸變差不多,第一個引數為中心店位置,預設為中心。
#radial-gradient {
width: 300px;
height: 300px;
float: left;
border-radius:50%;
background:-webkit-radial-gradient(bottom left,red,orange,yellow,green,blue,indigo,violet);
background:-o-radial-gradient(bottom left,red,orange,yellow,green,blue,indigo,violet);
background:-moz-radial-gradient(bottom left,red,orange,yellow,green,blue,indigo,violet);
background:radial-gradient(bottom left,red,orange,yellow,green,blue,indigo,violet);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
在實際的工作中,漸變變得很有用。比如Bootstrap的按鈕背景色就是漸變色,這樣使得按鈕有一種立體感,使人更容易點選。
3. 圓角和陰影
圓角屬性:border-radius,該屬性的值可以是畫素,也可以是百分比。注意的是,當元素長寬比為1:1時,圓角值為50%即為原型,並且圓角值不會比50%更大。圓角的值不能超過長寬比的一半。
.radius {
border-radius:20px;/4個角都是相同的值/
-moz- border-radius:20px;/支援老版本FF/
-webkit- border-radius:20px;/支援老版本webkit核心/
}
也可指定4個角不同的圓角值。
.radius {
border-top-left-radius:20px;/左上/
border-top-right-radius:20px;/右上/
border-bottom-left-radius:20px;/左下/
border-bottom-right-radius:20px;/右下/
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
邊框陰影跟之前講的文字陰影很像。IE6~8不支援。
語法:box-shadow:{color 水平偏移垂直偏移 模糊距離 陰影尺寸 inset};
屬性ps的同學可能會對這幾個值比較熟悉,因為這些值也是ps中設定陰影的必須值。簡單來說:
inset 內部陰影,可選為outset 外部陰影。決定陰影是對外還是對內。
水平偏移:陰影向右便宜的距離,負值表示向左。
陰影尺寸:就是陰影向外延伸出去的長度。
模糊距離:相當於是對陰影尺寸做了漸變,漸變長度就是設定的值。
另外,和邊框不同的是,陰影是不佔空間的。
3.變換和動畫
CSS3中大家瞭解最多的要數其新增的變換和動畫效果,新的屬性可是實現以前只有javascript才能實現的效果,簡化了網頁編寫的工作,提升了開發效率,當然也是十分的酷炫,而且節省流量。
1. 變換(transform)
transform屬性有很多值:旋轉(rotate),扭曲(skew),位移(translate),縮放(scale)。
1.1 rotate旋轉變換
簡單的2D旋轉:會將元素按照中軸線順時針旋轉指定的角度。
.rotate {
transform:rotate(20deg);
-ms-transform:rotate(20deg);/* IE9 */
-moz-transform:rotate(20deg);
-webkit-transform:rotate(20deg);
-o-transform:rotate(20deg);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
還可使用rotateX沿X軸向上旋轉,rotateY沿Y軸向上旋轉
.rotateX {
transform:rotateX(20deg);
-ms-transform:rotateX(20deg);/* IE9 */
-moz-transform:rotateX(20deg);
-webkit-transform:rotateX(20deg);
-o-transform:rotateX(20deg);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
這裡要注意的是,我們直觀地感受就是在使用rotateX時,元素在縱向被壓縮了,其實是元素的上半部分向內凹陷,下半部分向外突出形成的一種旋轉效果。
複雜的3D效果:元素會沿著xyz軸構建向量,最後偏轉一定角度。
rotate3d {
transform:rotate3d(1,0,0,10deg);
-ms-transform:rotate3d(0,1,0,10deg);
-moz-transform:rotate3d(0,0,1,10deg);
-webkit-transform:rotate3d(1,1,1,10deg);
-o-transform:rotate3d(0,0,0,10deg);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
這裡需要理解下:rotate3d共接受四個值,前三個值分別代表xyz是否旋轉,1代表旋轉,0代表不旋轉;最後一個是旋轉的角度。例子中的transform:rotate3d(1,0,0,10deg);其實就等價於transform:rotateX(10deg);當xyz軸都旋轉時,相當於整個模型旋轉。
這個還是比較抽象,需要具有一定的空間想象力。
不懂的可以看看這個:
http://jingyan.baidu.com/article/d621e8da0aa7192865913f05.html
1.2 skew扭曲變換
用過ps的同學會對這些熟悉些:
.skew {
transform:skew(30deg,10deg);
}
該屬性接受兩個引數:第一個引數是元素的中軸線沿著當前的中軸線逆時針旋轉的角度,元素的水平線不變,第二個引數正好相反。
也可使用skewX,和skewY單一方向變換。
該屬性不支援3D效果。
1.3 scale比例縮放
按照比例縮放:
.scale {
transform:scale(1.1,0.8);
}
該段程式碼表示元素按照原尺寸分別在橫向和縱向上放大到1.1,0.8倍。
也可使用scaleX,scaleY,scaleZ在單個方向上縮放,不過會造成拉伸,影象失真。
1.4 translate位移變換
translate就是平面上的xy軸位移
.translate {
transform:translate(100px,200px);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
也可使用translateX,translateY,translateZ,當方向位移。
2. 漸變(transition)
.transition {
height: 200px;
transition:height 1.0s;
}
.transition:hover {
height: 500px;
}
這個屬性有點類似jquery的animaite屬性,是一種簡單的動畫。
元素的高度200,當滑鼠在其上懸停時高度變為500,這是一個瞬間的效果,用了該屬性會是這個過程在1.0s內完成,這樣我們看到的就是一個動畫。
如果要同時改變多個屬性,使用逗號隔開。
transition: width 1.0s, height 1.0s;
transition還可選擇多種動畫函式:
ease 逐漸變慢 預設;
linear 勻速
ease-in 加速
ease-out 減速
ease-in-out減速然後減速
cubic-bezier 自定義一個時間曲線
transition:all 0.5s ease-in-out 1s;/*1s表示動畫的延遲時間*/<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
3. 關鍵幀(@keyframes)
使用關鍵幀來完成動畫效果。
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>animation</title>
<style type="text/css">
#keyframes{
width:200px;
height: 200px;
background-color: red;
float: left;
position: relative;
animation:myAnimate 5s infinite alternate;
-webkit-animation:myAnimate 5s infinite alternate;
}
@keyframes myAnimate {
0% {background-color: red;left: 0px; top: 0px;}
25% {background-color: red;left: 100px; top: 0px;}
50% {background-color: red;left: 100px; top: 100px;}
75% {background-color: red;left: 200px; top: 200px;}
100% {background-color: blue;left: 200px; top: 200px;}
}
@-webkit-keyframes myAnimate {
0% {background-color: red;left: 0px; top: 0px;}
25% {background-color: red;left: 100px; top: 0px;}
50% {background-color: red;left: 100px; top: 100px;}
75% {background-color: red;left: 200px; top: 200px;}
100% {background-color: blue;left: 200px; top: 200px;}
}
</style>
</head>
<body>
<div id="keyframes">
</div>
</body>
</html>
屬性anmiation後面跟上動畫名,動畫執行一次的時間,動畫訓話的次數(infinite表示迴圈alertnate表示動畫完成之後反向執行),和動畫執行的速度(transition中的速度函式一致)。
@keyframes後面緊跟動畫名稱來定義動畫,定義動畫的每步執行操作。
也可為元素新增屬性:
animate-play-state:paused;/*running用於啟動動畫*/
-webkit-animate-play-state:paused;
通過javascript容易來控制動畫的暫停。