CSS3 是最新的 CSS 標準,并且完全向后兼容,不過目前W3C 仍然在對 CSS3 規范進行開發,雖然標準的規范還沒有正式發布,但是現代瀏覽器已經支持相當多的 CSS3 屬性了。CSS3 提供了很多可以把玩的新特性,模糊了之前只控制樣式的定義,讓之前很難處理的樣式(如:圓角、多列等)和只能通過Javascript來實現的動畫效果等現在都能通過CSS3 新特性提供的屬性很輕松的實現,功能是越來越強大。
一、CSS3 邊框
在 css3 中新增的邊框屬性如下:
創建圓角邊框 示例
在CSS2中添加圓角很棘手,我們不得不在每個角落使用不同的圖像。但是在CSS3中通過添加一個屬性就可以搞定,那就是border-radius
,代碼如下:
語法: border-radius : length length;
length: 由浮點數字和單位標識符組成的長度值(如:20px)。不可為負值,如果為負值則與0展示效果一樣。第一個值設置其水平半徑,第二個值設置其垂直半徑,如果第二個值省略則默認第二個值等于第一個值。
div{
border: 1px solid;
/* 設置每個圓角水平半徑和垂直半徑都為30px */
border-radius: 30px;
}
border-radius
是4個角的縮寫方法。四個角的表示順序與border
類似按照border-top-left-radius
、border-top-right-radius
、border-bottom-right-radius
、border-bottom-left-radius
的順序來設置:
div{
border: 1px solid;
/* 如果 / 前后的值都存在,那么 / 前面的值設置其水平半徑,/ 后面值設置其垂直半徑,如果沒有 / ,則水平和垂直半徑相等 */
border-radius: 10px 15px 20px 30px / 20px 30px 10px 15px;
/* 上面寫法等價于下面的寫法,第一個值是水平半徑,第二個值是垂直半徑 */
border-top-left-radius: 10px 20px;
border-top-right-radius: 15px 30px;
border-bottom-right-radius: 20px 10px;
border-bottom-left-radius: 30px 15px;
}
border-radius
指定不同數量的值遵循對角相等的原則,即指定了值的取指定值,沒有指定值的與對角值相等,對角相等模型如下:
邊框陰影
通過屬性box-shadow
向邊框添加陰影。
語法: {box-shadow : [inset] x-offset y-offset blur-radius extension-radius spread-radiuscolor}
說明:對象選擇器 {box-shadow:[投影方式] X軸偏移量 Y軸偏移量 模糊半徑 陰影擴展半徑 陰影顏色}
div{
/* 內陰影,向右偏移10px,向下偏移10px,模糊半徑5px,陰影縮小10px */
box-shadow: inset 10px 10px 5px -10px #888888;
}
box-shadow屬性的參數設置取值:
陰影類型:此參數可選。如不設值,默認投影方式是外陰影;如取其唯一值inset ,其投影為內陰影;
X-offset:陰影水平偏移量,其值可以是正負值。如果值為正值,則陰影在對象的右邊,其值為負值時,陰影在對象的左邊;
Y-offset:陰影垂直偏移量,其值也可以是正負值。如果為正值,陰影在對象的底部,其值為負值時,陰影在對象的頂部;
Blur-radius:陰影模糊半徑:此參數可選,但其值只能是為正值,如果其值為0時,表示陰影不具有模糊效果,其值越大陰影的邊緣就越模糊;
Extension-radius陰影擴展半徑:此參數可選,其值可以是正負值,如果值為正,則整個陰影都延展擴大,反之值為負值時,則縮小;
陰影顏色:此參數可選。如不設定顏色,瀏覽器會取默認色,但各瀏覽器默認取色不一致,特別是在webkit內核下的safari和chrome瀏覽器下表現為透明色,在Firefox/Opera下表現為黑色(已驗證),建議不要省略此參數。
邊框圖片
語法:
- border-image : border-image-source || border-image-slice [ / border-image-width] || border-image-repeat
- border-image : none | image [ number | percentage]{1,4} [ / border-width>{1,4} ] ? [ stretch | repeat | round ]{0,2}
div{
border-image:url(border.png) 30 30 round;
border-image: url(border.png) 20/10px repeat;
}
border-image的參數說明:
- none:是border-image的默認值,如果取值為none時,表示邊框無背景圖片;
- image:設置border-image的背景圖片,這個跟background-image一樣,使用絕對或相對的url地址,來指定背景圖片;
- number:number是一個數值,用來設置邊框的寬度,其單位是px,其實就像border-width一樣取值,可以使用1~4個值,其具體表示四個方位的值,可以參考border-width的設置方式;
- percntage:percntage也是用來設置邊框的寬度,跟number不同之處是,其使用的是百分比值來設置邊框寬度;
- stretch,repeat,round:他們是用來設置邊框背景圖片的鋪放方式,類似于background-position,其中stretch是拉伸,repeat是重復,round是平鋪,stretch為默認值。
border-image-slice
這玩意比較復雜,感覺是看明白了,但是就是做不出例子的效果,不知道是資源圖片的原因還是寫法的原因,還是瀏覽器的原因還是寫例子的人自己都沒整明白,這東西現在比較糊,到時整明白在整理。
二、CSS3 背景
background-size
屬性 示例
在 CSS3 之前,背景圖片的尺寸是由圖片的實際尺寸決定的。在 CSS3 中,可以設置背景圖片的尺寸,這就允許我們在不同的環境中重復使用背景圖片。可以像素或百分比規定尺寸。如果以百分比規定尺寸,那么尺寸相對于父元素的寬度和高度。
div{
background:url(bg_flower.gif);
/* 通過像素規定尺寸 */
background-size:63px 100px;
/* 通過百分比規定尺寸 */
background-size:100% 50%;
background-repeat:no-repeat;
}
background-origin
屬性 示例
規定背景圖片的定位區域,背景圖片可以放置于 content-box
、padding-box
或 border-box
區域,
div{
background:url(bg_flower.gif);
background-repeat:no-repeat;
background-size:100% 100%;
/* 規定背景圖片的定位區域 */
background-origin:content-box;
}
區域的具體劃分如下:
background-clip
屬性 示例
與background-origin
屬性相似,規定背景顏色的繪制區域,區域劃分與background-origin
屬性相同。
div{
background-color:yellow;
background-clip:content-box;
}
CSS3 多重背景圖片 示例
CSS3 允許為元素設置多個背景圖像
body{
background-image:url(bg_flower.gif),url(bg_flower_2.gif);
}
三、CSS3 文本效果
text-shadow
屬性 示例
給為本添加陰影,能夠設置水平陰影、垂直陰影、模糊距離,以及陰影的顏色。
h1{
text-shadow: 5px 5px 5px #FF0000;
}
text-wrap 屬性 示例
設置區域內的自動換行。
語法: text-wrap: normal | none | unrestricted | suppress | break-word;
/* 允許對長單詞進行拆分,并換行到下一行 */
p {word-wrap:break-word;}
值 | 描述 |
---|---|
normal | 只在允許的換行點進行換行。 |
none | 不換行。元素無法容納的文本會溢出。 |
break-word | 在任意兩個字符間換行。 |
suppress | 壓縮元素中的換行。瀏覽器只在行中沒有其他有效換行點時進行換行。 |
四、CSS3 字體
字體定義
在 CSS3 之前,web 設計師必須使用已在用戶計算機上安裝好的字體。但是通過 CSS3,web 設計師可以使用他們喜歡的任意字體。當找到或購買到希望使用的字體時,可將該字體文件存放到 web 服務器上,它會在需要時被自動下載到用戶的計算機上。字體需要在 CSS3 @font-face 規則中定義。
/* 定義字體 */
@font-face{
font-family: myFont;
src: url('Sansation_Light.ttf'),
url('Sansation_Light.eot'); /* IE9+ */
}
div{
font-family:myFont;
}
使用粗體字體
"Sansation_Light.ttf"文件 是定義的正常字體,"Sansation_Bold.ttf" 是另一個字體文件,它包含了 Sansation 字體的粗體字符。只要 font-family 為 "myFirstFont" 的文本需要顯示為粗體,瀏覽器就會使用該字體。
(其實沒弄清楚這樣處理的原因,經測試直接在html中通過 b 標簽也可以實現加粗的效果)
/* 定義正常字體 */
@font-face{
font-family: myFirstFont;
src: url('/example/css3/Sansation_Light.ttf'),
url('/example/css3/Sansation_Light.eot'); /* IE9+ */
}
/* 定義粗體時使用的字體 */
@font-face{
font-family: myFirstFont;
src: url('/example/css3/Sansation_Bold.ttf'),
url('/example/css3/Sansation_Bold.eot'); /* IE9+ */
/* 標識屬性 */
font-weight:bold;
}
div{
font-family:myFirstFont;
}
五、CSS3 2D 轉換
通過 CSS3 轉換,我們能夠對元素進行移動、縮放、轉動、拉長或拉伸,轉換是使元素改變形狀、尺寸和位置的一種效果。
translate() 方法 示例
通過 translate(x , y) 方法,元素根據給定的 left(x 坐標) 和 top(y 坐標) 位置參數從其當前位置移動,x為正值向右移動,為負值向左移動;y為正值向下移動,為負值向上移動;
div{
transform: translate(50px,100px);
-ms-transform: translate(50px,100px); /* IE 9 */
-webkit-transform: translate(50px,100px); /* Safari and Chrome */
-o-transform: translate(50px,100px); /* Opera */
-moz-transform: translate(50px,100px); /* Firefox */
}
rotate() 方法 示例
控制元素順時針旋轉給定的角度。為正值,元素將順時針旋轉。為負值,元素將逆時針旋轉。
div{
transform: rotate(30deg);
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Safari and Chrome */
-o-transform: rotate(30deg); /* Opera */
-moz-transform: rotate(30deg); /* Firefox */
}
scale() 方法 示例
根據給定的寬度(X 軸)和高度(Y 軸)參數,控制元素的尺寸的增加、減少。
div{
transform: scale(2,4);
-ms-transform: scale(2,4); /* IE 9 */
-webkit-transform: scale(2,4); /* Safari 和 Chrome */
-o-transform: scale(2,4); /* Opera */
-moz-transform: scale(2,4); /* Firefox */
}
skew() 方法 示例
根據給定的水平線(X 軸)和垂直線(Y 軸)參數設置元素翻轉給定的角度。
/* 設置圍繞 X 軸把元素翻轉 30 度,圍繞 Y 軸翻轉 20 度。 */
div{
transform: skew(30deg,20deg);
-ms-transform: skew(30deg,20deg); /* IE 9 */
-webkit-transform: skew(30deg,20deg); /* Safari and Chrome */
-o-transform: skew(30deg,20deg); /* Opera */
-moz-transform: skew(30deg,20deg); /* Firefox */
}
matrix() 方法 示例
matrix() 方法把所有 2D 轉換方法組合在一起。matrix() 方法需要六個參數,包含數學函數,允許旋轉、縮放、移動以及傾斜元素。
/* 使用 matrix 方法將 div 元素旋轉 30 度 */
div{
transform:matrix(0.866,0.5,-0.5,0.866,0,0);
-ms-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* IE 9 */
-moz-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* Firefox */
-webkit-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* Safari and Chrome */
-o-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* Opera */
}
2D Transform 方法匯總
函數 | 描述 |
---|---|
matrix(n,n,n,n,n,n) | 定義 2D 轉換,使用六個值的矩陣。 |
translate(x,y) | 定義 2D 轉換,沿著 X 和 Y 軸移動元素。 |
translateX(n) | 定義 2D 轉換,沿著 X 軸移動元素。 |
translateY(n) | 定義 2D 轉換,沿著 Y 軸移動元素。 |
scale(x,y) | 定義 2D 縮放轉換,改變元素的寬度和高度。 |
scaleX(n) | 定義 2D 縮放轉換,改變元素的寬度。 |
scaleY(n) | 定義 2D 縮放轉換,改變元素的高度。 |
rotate(angle) | 定義 2D 旋轉,在參數中規定角度。 |
skew(x-angle,y-angle) | 定義 2D 傾斜轉換,沿著 X 和 Y 軸。 |
skewX(angle) | 定義 2D 傾斜轉換,沿著 X 軸。 |
skewY(angle) | 定義 2D 傾斜轉換,沿著 Y 軸。 |
六、CSS3 3D 轉換
CSS3 允許使用 3D 轉換來對元素進行格式化
rotateX() 方法 示例
/* 設置元素圍繞其 X 軸以給定的度數進行旋轉 */
div{
transform: rotateX(120deg);
-webkit-transform: rotateX(120deg); /* Safari 和 Chrome */
-moz-transform: rotateX(120deg); /* Firefox */
}
rotateY() 旋轉 示例
/* 設置元素圍繞其 Y 軸以給定的度數進行旋轉 */
div{
transform: rotateY(130deg);
-webkit-transform: rotateY(130deg); /* Safari 和 Chrome */
-moz-transform: rotateY(130deg); /* Firefox */
}
2017百度前端學院熱身試題 百度前端學院熱身試題-第三題 就重點考察了元素2D、3D轉換的內容,說明這部分是比較適用比較重要的部分,要熟練掌握。
七、CSS3 過渡
通過 CSS3可以在不使用 Flash 動畫或 JavaScript 的情況下,當元素從一種樣式變換為另一種樣式時為元素添加效果。
要實現這一點,必須規定以下兩項內容:
- 設置添加過渡效果的 CSS 屬性;
- 設置過渡效果的時長;
注意: 如果時長未設置,則不會有過渡效果,因為默認值是 0。
單項改變 示例
/* 設置將變化效果添加在“寬度”上,時長為2秒;該時長在其他屬性上并不適用 */
div{
transition: width 2s;
-moz-transition: width 2s; /* Firefox 4 */
-webkit-transition: width 2s; /* Safari 和 Chrome */
-o-transition: width 2s; /* Opera */
}
/* 配合在一起使用的效果就是當鼠標移上去的時候寬度變為300px,這個過程耗時2秒 */
div:hover{
width:300px;
}
注意: 當鼠標移出元素時,它會逐漸變回原來的樣式。
多項改變 示例
如需向多個樣式添加過渡效果,請添加多個屬性,由逗號隔開。
/* 同時向寬度、高度和轉換添加過渡效果 */
div{
transition: width 2s, height 2s, transform 2s;
-moz-transition: width 2s, height 2s, -moz-transform 2s;
-webkit-transition: width 2s, height 2s, -webkit-transform 2s;
-o-transition: width 2s, height 2s,-o-transform 2s;
}
/* 當鼠標移上時寬度和高度都變成200px,同時旋轉180度,每個屬性變化都耗時2秒 */
div:hover{
width:200px;
height:200px;
transform:rotate(180deg);
-moz-transform:rotate(180deg); /* Firefox 4 */
-webkit-transform:rotate(180deg); /* Safari and Chrome */
-o-transform:rotate(180deg); /* Opera */
}
過渡屬性詳解 詳解
transition
是簡寫屬性,
語法: transition : transition-property | transition-duration | transition-timing-function | transition-delay;
/* 設置在寬度上添加過渡效果,時長為1秒,過渡效果時間曲線為linear,等待2秒后開始過渡 */
div{
transition: width 1s linear 2s;
-moz-transition: width 1s linear 2s; /* Firefox 4 */
-webkit-transition: width 1s linear 2s; /* Safari and Chrome */
-o-transition: width 1s linear 2s; /* Opera */
}
屬性 | 描述 |
---|---|
transition | 簡寫屬性,用于在一個屬性中設置四個過渡屬性。 |
transition-property | 規定應用過渡的 CSS 屬性的名稱。 |
transition-duration | 定義過渡效果花費的時間。默認是 0。 |
transition-timing-function | 規定過渡效果的時間曲線。默認是 "ease"。 |
transition-delay | 規定過渡效果何時開始。默認是 0。 |
八、CSS3 動畫
通過 CSS3可以創建動畫,這些動畫可以取代網頁中的畫圖片、Flash 動畫以及 JavaScript。
CSS3 中通過@keyframes 規則來創建動畫。在 @keyframes 中規定某項 CSS 樣式,就能創建由當前樣式(動畫開始前的樣式)逐漸改為新樣式(需要變到的樣式)的動畫效果。
通過from , to關鍵字設置動畫發生的時間 示例
/* 通過@keyframes 創建動畫 */
@keyframes myfirst{
from {background: red;}
to {background: yellow;}
}
/* Firefox */
@-moz-keyframes myfirst {
from {background: red;}
to {background: yellow;}
}
/* Safari 和 Chrome */
@-webkit-keyframes myfirst {
from {background: red;}
to {background: yellow;}
}
/* Opera */
@-o-keyframes myfirst {
from {background: red;}
to {background: yellow;}
}
/*
將創建的動畫綁定到選擇器,并至少指定以下兩項 CSS3 動畫屬性
1.指定動畫的名稱;
2.指定動畫的時長;
*/
div{
animation: myfirst 5s;
-moz-animation: myfirst 5s; /* Firefox */
-webkit-animation: myfirst 5s; /* Safari 和 Chrome */
-o-animation: myfirst 5s; /* Opera */
}
通過百分比設置動畫發生的時間 示例
動畫是使元素從一種樣式逐漸變化為另一種樣式的效果。可以改變任意多的樣式任意多的次數。可以用關鍵詞 "from" 和 "to"來設置動畫變化發生的時間,其效果等同于 0% 和 100%。0% 是動畫的開始,100% 是動畫的完成。為了得到最佳的瀏覽器支持,應該始終定義 0% 和 100% 選擇器。
/* 當動畫為 25% 及 50% 時改變背景色,然后當動畫 100% 完成時再次改變 */
@keyframes myfirst{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
/* 同時改變背景色和位置 */
@keyframes myfirst{
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;}
}
動畫屬性詳解
animation
是除了 animation-play-state
屬性所有動畫屬性的簡寫屬性。
語法: animation : animation-name | animation-duration | animation-timing-function | animation-delay | animation-iteration-count | animation-direction
/* 應用的動畫為myfirst,一個動畫周期為5秒,動畫的速度曲線為linear,動畫2秒后播放,播放次數為infinite,即無限循環,動畫下一周期是否逆向播放取值alternate,即逆向播放 */
div{
animation: myfirst 5s linear 2s infinite alternate;
/* Firefox: */
-moz-animation: myfirst 5s linear 2s infinite alternate;
/* Safari 和 Chrome: */
-webkit-animation: myfirst 5s linear 2s infinite alternate;
/* Opera: */
-o-animation: myfirst 5s linear 2s infinite alternate;
}
屬性 | 描述 |
---|---|
@keyframes | 規定動畫。 |
animation | 所有動畫屬性的簡寫屬性,除了 animation-play-state 屬性。 |
animation-name | 規定 @keyframes 動畫的名稱。 |
animation-duration | 規定動畫完成一個周期所花費的秒或毫秒。默認是 0。 |
animation-timing-function | 規定動畫的速度曲線。默認是 "ease"。 |
animation-delay | 規定動畫何時開始。默認是 0。 |
animation-iteration-count | 規定動畫被播放的次數。默認是 1。 |
animation-direction | 規定動畫是否在下一周期逆向地播放。默認是 "normal"。 |
animation-play-state | 規定動畫是否正在運行或暫停。默認是 "running"。 |
animation-fill-mode | 規定對象動畫時間之外的狀態。 |
九、CSS3 多列
通過 CSS3夠創建多個列來對文本進行布局,就像我們經常看到的報紙的布局一樣。
CSS3 創建多列 示例
column-count
屬性規定元素應該被分隔的列數。
/* 將div中的文本分為3列 */
div{
column-count:3;
-moz-column-count:3; /* Firefox */
-webkit-column-count:3; /* Safari 和 Chrome */
}
CSS3 規定列之間的間隔 示例
column-gap
屬性規定列之間的間隔。
/* 設置列之間的間隔為 40 像素 */
div{
column-gap:40px;
-moz-column-gap:40px; /* Firefox */
-webkit-column-gap:40px; /* Safari 和 Chrome */
}
CSS3 列規則 示例
column-rule
屬性設置列之間的寬度、樣式和顏色規則。
語法: column-rule : column-rule-width | column-rule-style | column-rule-color
div{
column-rule:3px outset #ff0000;
-moz-column-rule:3px outset #ff0000; /* Firefox */
-webkit-column-rule:3px outset #ff0000; /* Safari and Chrome */
}
屬性 | 描述 |
---|---|
column-count | 規定元素應該被分隔的列數。 |
column-fill | 規定如何填充列。 |
column-gap | 規定列之間的間隔。 |
column-rule | 設置所有 column-rule-* 屬性的簡寫屬性。 |
column-rule-width | 規定列之間規則的寬度。 |
column-rule-style | 規定列之間規則的樣式。 |
column-rule-color | 規定列之間規則的顏色。 |
column-span | 規定元素應該橫跨的列數。 |
column-width | 規定列的寬度。 |
columns | 語法 : column-width column-count。 |
十、CSS3 用戶界面
CSS3 resize 示例
在 CSS3中resize
屬性設置是否可由用戶調整元素尺寸。
/* 設置div可以由用戶調整大小 */
div{
resize:both;
overflow:auto;
}
CSS3 box-sizing 示例
box-sizing
屬性允許您以確切的方式定義適應某個區域的具體內容。
這個屬性沒太懂
/* 規定兩個并排的帶邊框方框 */
div{
box-sizing:border-box;
-moz-box-sizing:border-box; /* Firefox */
-webkit-box-sizing:border-box; /* Safari */
width:50%;
float:left;
}
CSS3 outline-offset 示例
outline-offset
屬性對輪廓進行偏移,并在超出邊框邊緣的位置繪制輪廓。
輪廓與邊框有兩點不同:
- 輪廓不占用空間;
- 輪廓可能是非矩形;
/* 規定邊框邊緣之外 15 像素處的輪廓 */
div{
border:2px solid black;
outline:2px solid red;
outline-offset:15px;
}