西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁(yè)西西教程DreamWeaver → CSS3中的新特性:顏色、圓角、陰影、漸變效果和等多瀏覽器支持介紹

CSS3中的新特性:顏色、圓角、陰影、漸變效果和等多瀏覽器支持介紹

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2013/2/6 10:19:12字體大小:A-A+

作者:西西點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: CSS3

  • 類型:網(wǎng)頁(yè)設(shè)計(jì)大。1KB語(yǔ)言:英文 評(píng)分:6.6
  • 標(biāo)簽:
立即下載

這篇文章的目標(biāo)讀者是網(wǎng)頁(yè)開發(fā)人員。本文首先講訴了CSS3的瀏覽器前綴,接著將講述一些基于標(biāo)準(zhǔn)的擴(kuò)展。在CSS3特性的部分里,將涉及圓角,rgba顏色,陰影,漸變,動(dòng)畫變換,和2D轉(zhuǎn)換等。

前綴

有一些瀏覽器在CSS3還未標(biāo)準(zhǔn)化之前就已經(jīng)實(shí)現(xiàn)了CSS3的特性。因此,在語(yǔ)法還未被標(biāo)準(zhǔn)規(guī)定下來之前,一些CSS3的樣式就在那些瀏覽器中加上了其特定的前綴。例如在firefox和Safari上,漸變的CSS3語(yǔ)法就不相同。Firefox 使用 -moz-linear-gradient,而 Safari (WebKit) 則使用 -webkitgradient。同理,很多的CSS3語(yǔ)法都被不同的瀏覽器加上了不同的前綴。

常見的前綴有:
• Chrome: -webkit-
• Safari: -webkit-
• Firefox: -moz-
• IE: -ms-
• Opera: -o-

目前,你應(yīng)該首先聲明帶瀏覽器前綴的樣式,然后再聲明W3C標(biāo)準(zhǔn)的樣式。這是為了保證當(dāng)未來的瀏覽器只支持標(biāo)準(zhǔn)化后的CSS3樣式時(shí),你的代碼仍然能夠有效運(yùn)行。

#prefix-example {
   -moz-box-shadow: 0 3px 5px #FFF;
   -webkit-box-shadow: 0 3px 5px #FFF;
   box-shadow: 0 3px 5px #FFF;
}

顏色

CSS3提供了一些新方法來定義顏色,比如增加了alpha透明度的設(shè)置。在以前,想實(shí)現(xiàn)透明效果通常是平鋪一個(gè) 1px × 1px 的背景圖片,現(xiàn)在你可以拋棄那種做法了。

新增加的 rgb 樣式可以允許你用數(shù)字來定義RGB的值,而不再需要使用16進(jìn)制了。 如果你想自己轉(zhuǎn)化兩者的對(duì)應(yīng)值,你可以使用Safari自帶的 Web Inspector 工具,在 Styles 面板上點(diǎn)擊相應(yīng)的顏色即可。

下面的代碼等同于 #FFF, 就是白色:

#rgb-example {
   // rgb(red, green, blue);
   color: rgb(255, 255, 255);
}

你也可以使用新增的 hsl 樣式。HSL分別代表色度、飽和度、亮度。

色度:代表在顏色盤上的度數(shù),0度表示紅色,120度表示綠色,240度表示藍(lán)色。在之間的表示相應(yīng)的中間色。

飽和度:一個(gè)百分比值,100% 表示完全顯示該顏色。

亮度: 也是一個(gè)百分比值,0% 表示暗(黑色),100% 表示亮(白色)。

如果采用rgb或者h(yuǎn)sl寫法,那么增加alpha透明度非常簡(jiǎn)單,只需要在后面加上一個(gè) 0 到1之間的小數(shù)即可。 0表示完全透明,1表示完全不透明。

#alpha-example {
   background: hsla(324, 100%, 50%, .5);
   border: 1em solid rgba(0, 0, 0, .3);
   color: rgba(255, 255, 255, .8);
}

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 完全支持
• Opera: 完全支持
• Safari: 完全支持
• IE: 完全支持

圓角

過去,在CSS2.1的環(huán)境下實(shí)現(xiàn)圓角效果簡(jiǎn)直就是一種打擊。因?yàn)槟峭ǔP枰~外的HTML代碼段,圖片甚至JavaScript代碼。

現(xiàn)在,事情變得容易多了,你只需要使用 border-radius 樣式。就像 padding 或者 margin的樣式定義一樣,你可以使用4個(gè)radius來定義4個(gè)角,或者使用2個(gè)radius定義水平的和垂直的角,或者使用1個(gè)radius定義所有的角。如果你設(shè)置一個(gè)足夠大的 radius,甚至可以將整個(gè)容器組成一個(gè)圓形。

#rounded-corner{
   border-radius: 20px;
   // horizonal, vertical
   border-radius: 20px 20px;
   // top left, top right, bottom right, bottom left
   border-radius: 20px 20px 20px 20px;
}

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 完全支持
• Opera: 完全支持
• Safari: 需要使用 -webkit- 前綴
• IE: 版本9 以上支持

陰影

在CSS3之前,很多開發(fā)人員不會(huì)理會(huì)陰影效果,因?yàn)槟鞘且粋(gè)大麻煩。現(xiàn)在CSS3提供了 box-shadow 樣式,可以讓你輕松實(shí)現(xiàn)陰影效果。但是注意不要過度使用陰影效果,因?yàn)槟强赡軒頌g覽器渲染的性能問題。

box-shadow 可以接受若干選項(xiàng):垂直方向的偏移,水平方向的偏移,模糊的半徑,陰影擴(kuò)展的距離,以及顏色。如果你還給出inset選項(xiàng),陰影將向容器內(nèi)擴(kuò)展,否者默認(rèn)情況下,陰影是向容器外擴(kuò)展的。另外,你也可以對(duì)一個(gè)容器使用若干個(gè)陰影,通過使用逗號(hào)隔開他們各自的定義,如同下列代碼所示:

#drop-shadows{
// horizonal offset, vertical offset, blur radius, color
box-shadow: 10px 5px 15px #000;
// inset shadows
box-shadow: 10px 5px 15px #000 inset;
// horizonal offset, vertical offset, blur radius, spread distance, color
box-shadow: 10px 5px 15px 15px #000;
// multiple shadows
box-shadow: 0 1px 1px #FFF inset, 5px 5px 10px #000;
}

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 需要使用 -webkit- 前綴
• Opera: 完全支持
• Safari: 需要使用 -webkit- 前綴
• IE: 版本9 以上支持

文字陰影

在CSS3之前,可能唯一實(shí)現(xiàn)文字陰影的方法就是使用加工好的圖片代替文字——真是一個(gè)淫蕩的方法。(沒錯(cuò),原文就是這么寫的 ==。

現(xiàn)在,CSS3允許你通過 text-shadow 樣式來增加文字陰影。只需要傳入幾個(gè)參數(shù):垂直偏移、水平偏移、模糊半徑(可選參數(shù))、顏色。

#text-shadow{
// horizonal offset, vertical offset, color
text-shadow: 1px 1px #FFF;
// horizonal offset, vertical offset, blur radius, color
text-shadow: 1px 1px .3em rgba(255, 255, 255, .8);
}

文字陰影與容器陰影不同點(diǎn)就是:它不支持陰影擴(kuò)展半徑和向內(nèi)的陰影。

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 完全支持
• Opera: 完全支持
• Safari: 完全支持
• IE: 不支持

漸變效果

以前,實(shí)現(xiàn)漸變效果通常是靠平鋪背景圖片。背景圖片是固定的寬度或者高度,然后靠圖像編輯軟件制造漸變效果。

CSS3增加了對(duì)線性漸變和徑向漸變漸變的支持,也被看作最有用的新特性之一。有若干個(gè)種CSS方法可以生成漸變,你只需要聲明對(duì)應(yīng)的顏色即可。

對(duì)于線性漸變,只需要傳入顏色列表即可。

linear-gradient(#CCC, #DDD, white) 從CCC變到DDD,再變到FFF

默認(rèn)情況下,漸變效果是垂直的。但是你可以通過傳入位置值來改變它的方向。

// horizontal gradient
linear-gradient(left, #CCC, #DDD, #FFF);
// or with a specific angle
linear-gradient(-45deg , #CCC , #FFF)

如果你希望更多地控制漸變效果從哪個(gè)位置開始,你可以在顏色旁邊使用聲明一個(gè)百分比或者像素值。

linear-gradient(white , #DDD 20% , black)  在容器高度20%的地方已經(jīng)變成DDD了

你也可以漸變到透明,或者從透明漸變到不透明:

radial-gradient( rgba(255, 255, 255, .8) , transparent )

Safari目前使用的是不同的語(yǔ)法,在不久的將來它將變得兼容標(biāo)準(zhǔn)寫法。但是現(xiàn)在,你需要這樣使用:

// -webkit-gradient(<type>, <point> [, <radius>]?, <point> [, <radius>]? [, <stop>]*);
-webkit-gradient(linear, left top, left bottom, from(#FFF), color-stop(10%, #DDD), to(#CCC) );

盡管主流的瀏覽器都支持漸變,但是幾乎都要其瀏覽器前綴寫法:

• Firefox: with -moz-
• Chrome: with -webkit-
• Safari: alternative implementation
• IE >= 10: with -ms-
• Opera >= 11.1: with -o-

所以,一個(gè)支持跨瀏覽器的漸變效果實(shí)現(xiàn)的CSS代碼如下:

#gradient-example {
/* Fallback */
background: #FFF;
/* Chrome < 10, Safari < 5.1 */
background: -webkit-gradient(linear, left top, left bottom, from(#FFF), to(#CCC));
/* Chrome >= 10, Safari >= 5.1 */
background: -webkit-linear-gradient(#FFF, #CCC);
/* Firefox >= 3.6 */
background: -moz-linear-gradient(#FFF, #CCC);
/* Opera >= 11.1 */
background: -o-linear-gradient(#FFF, #CCC);
/* IE >= 10 */
background: -ms-linear-gradient(#FFF, #CCC);
/* The standard */
background: linear-gradient(#FFF, #CCC);
}

多重背景

就像你可以在CSS3里設(shè)置多重陰影一樣(逗號(hào)隔開),你也可以設(shè)置多重背景。

以前,實(shí)現(xiàn)多重背景通常需要?jiǎng)?chuàng)建若干嵌套的DOM元素,F(xiàn)在CSS3讓你只需使用"逗號(hào)隔開"的寫法加上若干個(gè)背景樣式了。這極大地簡(jiǎn)化了代碼量。

#multiple-backgrounds{
   background: url(snowflakes.png) top repeat-x,
               url(chimney.png) bottom no-repeat,
               -moz-linear-gradient(white, #CCC),
               #CCC ;
}

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 完全支持
• Opera: 完全支持
• Safari:  完全支持
• IE: 版本9 以上支持

選擇符

CSS3提供了若干新的選擇符:

:first-child
選擇Collection中的第一個(gè)元素
:last-child
選擇Collection中的最后一個(gè)元素
:only-child
選擇只有一個(gè)孩子的元素
:target
選擇跟URL的hash值對(duì)應(yīng)的元素
:checked
選擇被checked狀態(tài)的check元素

我想要重點(diǎn)講述的是下面一些選擇符:

第N個(gè)孩子

:nth-child 選擇符讓你改變每N個(gè)元素的樣式。例如,下面的代碼將選擇每第3個(gè)元素:

#example:nth-child( 3n ) { /* ... */ }

下面的代碼將選擇奇數(shù)號(hào)元素或者偶數(shù)號(hào)元素:

/* Even children */
#example:nth-child( 2n ) { /* ... */ }
#example:nth-child( even ) { /* ... */ }
/* Odd children */
#example:nth-child( 2n+1 ) { /* ... */ }
#example:nth-child( odd ) { /* ... */ }

你也可以使用反向的Nth-child選擇符。例如,下面代碼將選擇最后一個(gè)元素:

/* Last child */
#example:nth-last-child( 1 )

實(shí)際上,:first-child 選擇符等同于 :nth-child(1),同理, :last-child 等同于 :nth-last-child(1) 。

直接孩子選擇符

你可以使用 大于符號(hào)> 來限制只選擇直接孩子元素

/* Only directly descendant divs */
#example > div { }

否定選擇符

你可以使用 :not 來否定一個(gè)簡(jiǎn)單的選擇符。不過,目前否定選擇符并不支持復(fù)雜的選擇符,例如你不能這樣用  p:not(h1 + p)

/* Only directly descendant children, except ones with the "current" class */
#example > *:not(.current) {
display: none
}

瀏覽器支持:
• Firefox: 完全支持
• Chrome: 完全支持
• Opera: 完全支持
• Safari:  完全支持
• IE: 版本9 以上支持

變換效果(Transition)

CSS3增加了對(duì)transition的支持,使得你可以借由樣式變化創(chuàng)造簡(jiǎn)單的動(dòng)畫效果。你需要做的是傳入以下參數(shù):變換持續(xù)時(shí)間,屬性,變換的方式(可選)。你可以使用秒(s)或微秒(ms)作為持續(xù)時(shí)間參數(shù)。

/* duration, property, animation type (optional) */
transition: 1.5s opacity ease-out
/* Multiple transitions */
transition: 2s opacity , .5s height ease-in
transition: .5s height , .5s .5s width

有若干種時(shí)間點(diǎn)序列(timing sequence)方式可供選擇:

• linear
• ease-in
• ease-out
• ease-in-out

或者,你可以自定義一個(gè)時(shí)間點(diǎn)序列(timing sequence)。時(shí)間點(diǎn)序列的目的是控制transition效果在不同時(shí)間子段中的速度。

#transition-example {
position: absolute;
/* cubic-bezier(x1, y1, x2, y2) */
transition: 5s left cubic-bezier(0.0, 0.35, .5, 1.3);
}

在Safari和Chrome中,一旦transition完成,一個(gè)名叫 WebKitTransitionEvent 的事件將在該元素上觸發(fā)。 在Firefox中,這個(gè)事件叫做 transitionend。不好的地方是,使用CSS3有若干缺點(diǎn):比如,在變換過程中你不能作過多的控制,以及并不是所有的DOM元素都是可變換的(transitionable)。這就意味著,transition只能被用于簡(jiǎn)單的動(dòng)畫。另外,一些瀏覽器(例如 Safari)對(duì)transition做了硬件層面上的渲染加速。

#transition-example {
width: 50px;
height: 50px;
background: red;
-webkit-transition: 2s background ease-in-out;
-moz-transition: 2s background ease-in-out;
-o-transition: 2s background ease-in-out;
transition: 2s background ease-in-out;
}
#transition-example:hover {
background: blue;
}

由于某些原因,如果你想在漸變效果之上做transition,那么必須至少有一個(gè)端點(diǎn)具有alpha值。另外,你也不能在某些值之間作transition,比如height:0和 height:auto之間。

瀏覽器支持:
• Firefox: with -moz-
• Chrome: with -webkit-
• Safari: with -webkit-
• IE >= 10.0: with -ms-
• Opera: with -o-

邊框圖像

使用 border-image 樣式,你可以設(shè)置一張圖片作為DOM元素的邊框。第一個(gè)參數(shù)指出圖片的URL,接著一個(gè)參數(shù)指出需要的圖片是怎樣從原圖片上切割的,最后一個(gè)參數(shù)指出圖片的伸展方式?蛇x的伸展方式有round(平鋪),repeat(重復(fù)),和stretch(縮放)。

border-image: url(border.png) 14 14 14 14 round round;
border-image: url(border.png) 14 14 14 14 stretch stretch;

瀏覽器支持:
• Firefox: with -moz-
• Chrome: with -webkit-
• Safari: with -webkit-
• IE: 不支持
• Opera: with -o-

Box Sizing(盒模型的大小調(diào)整?)

你是否曾經(jīng)有過這樣的想法,使一個(gè)元素的寬度為100%,但是它仍然具有padding和margin值? 對(duì)于傳統(tǒng)的盒模型來說,CSS對(duì)于百分比寬度的計(jì)算時(shí)參考的是父容器的寬度,然后再加上margin和padding。因此,如果一個(gè)元素有100%的寬度,再加上padding和margin或者border,它一定會(huì)溢出的(overflow)。

現(xiàn)在,通過設(shè)置 box-sizing屬性的值為 border-box (它的默認(rèn)值是contetbox),你可以改變盒模型大小計(jì)算的方式,讓它一并考慮borders、margins、padding,和content。

.border-box {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

該特性目前已被各瀏覽器廣泛支持了,而且它是安全穩(wěn)定的除非你考慮在IE8之前的版本中使用。

形狀變換(Transformations)

拜CSS3所賜,我們可以實(shí)現(xiàn)簡(jiǎn)單的2D形狀變換。比如,可以讓元素旋轉(zhuǎn),縮放,傾斜。下面的代碼是把一個(gè)元素逆時(shí)針旋轉(zhuǎn)30度。

transform: rotate( -30deg );

下面的代碼是把一個(gè)元素沿著X方向和Y方向各自傾斜一定的角度。

transform: skew( 30deg , -10deg );

下面的代碼是使用scale表達(dá)式把一個(gè)元素的大小增加或減少一定的比例。默認(rèn)情況下,一個(gè)元素的scale應(yīng)該是1.0。

transform: scale(1.2);

注意,你可以通過并排這些transformation函數(shù),從而達(dá)到實(shí)現(xiàn)多種變換的效果。

transform: rotate(30deg) skewX(30deg);

瀏覽器支持:
• Firefox: with -moz-
• Chrome: with -webkit-
• Safari: with -webkit-
• IE >= 9: with -ms-
• Opera: with -o-

活動(dòng)盒模型(Flexible Box Model)

CSS3引進(jìn)了活動(dòng)盒模型的概念。這個(gè)概念在其他GUI框架上已經(jīng)存在很久了,比如在Adobe Flex上;顒(dòng)盒模型有什么用呢?比如,在以前,如果你想讓list元素按照水平方向排列,你需要使用元素浮動(dòng),F(xiàn)在活動(dòng)盒模型讓你可以完成這個(gè)效果。請(qǐng)參照以下的代碼。

.hbox {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
-webkit-box-pack: left;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
-moz-box-pack: left;
}
.vbox {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
}

首先,我們?cè)O(shè)置該元素的display屬性值為 -webkit-box 或者 -moz-box。然后,設(shè)置direction的值,告訴該元素的子元素將如何排列它們的盒子。默認(rèn)情況下,所有的子元素會(huì)相同地?cái)U(kuò)展以適應(yīng)父元素的大小,但是,你可以設(shè)置 box-flex 改變這種行為。

通過設(shè)置 box-flex 為0,就使得子元素不會(huì)擴(kuò)展。如果設(shè)置 box-flex 為1甚至更高的值,那么子元素將擴(kuò)展以占領(lǐng)其他的空白的空間。例如,可以設(shè)置邊欄(sidebar)的 flex值為0,設(shè)置主欄的 flex值為1,這樣邊欄不會(huì)擴(kuò)展,主欄將擴(kuò)展到占滿剩余的空間。

#sidebar {
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;
width: 200px;
}
#content {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
}

瀏覽器支持:
• Firefox: with -moz-
• Chrome: with -webkit-
• Safari: with -webkit-
• IE >= 10: with -ms-
• Opera: 不支持

自定義字體

@font-face 樣式可以讓你在網(wǎng)頁(yè)中使用自定義字體。這樣,該網(wǎng)頁(yè)的顯示就可以不再依賴于用戶電腦中已安裝的字體了。目前支持字體類型為 TrueType 或者 OpenType 的字體。字體文件必須放在跟該網(wǎng)頁(yè)相同的域名上。
使用 @font-face 時(shí)首先要給出該字體的font-family,然后給出指向字體文件的地址。

@font-face {
font-family: "Bitstream Vera Serif Bold";
src: url("/fonts/VeraSeBd.ttf");
}

接著在網(wǎng)頁(yè)中的任何地方使用該字體了。font-family的值跟上面的font-family值對(duì)應(yīng)。

#font-example {
font-family: "Bitstream Vera Serif Bold";
}

字體將以異步下載的方式下載到用戶瀏覽器中,并且在下載完成后作用與網(wǎng)頁(yè)上。在下載還未完成的時(shí)間里,那些字體會(huì)暫時(shí)以瀏覽器默認(rèn)字體顯示。因此,如果考慮用戶體驗(yàn),可以先指定一個(gè)其他已安裝的可選字體來替換瀏覽器的默認(rèn)字體。

瀏覽器支持:
• Firefox: full support
• Chrome: full support
• Safari: full support
• IE >= 9: full support
• Opera: full support

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)

      沒有數(shù)據(jù)