CSS3离我们越来越近了。尽管,很多人指出CSS3这样那样的缺陷,如标准还没有最后完善、浏览器的支持也不够全面。但是,有哪次变革毋须阵痛呢?技术的革新是大势所趋,早点熟悉它绝对没有坏处。
本文中,笔者带各位熟悉一下CSS3的一些新特性;并给出目前主流浏览器对它的支持情况。算是CSS3的快速入门了。
投入CSS3的怀抱
很多博客文章中都会谈到CSS3的一些缺点还不够完美(尤其是浏览器的兼容性),这让很多网页设计者们对它敬而远之。不要以这个借口就不使用CSS3,没有它,我们还停留在CSS2.1阶段呢。
其实目前大部分浏览器都是全面或部分支持CSS3的(IE<9.0除外)。尤其对于日趋壮大的手机、平板电脑用户来说。由于其内嵌的浏览器多不是IE内核的^_^。
基于这个原因,笔者会在下面的每个示例中明确地给出该项css3属性浏览器的兼容性,以供各位设计时参考。
第三方前缀(Vendor Prefixes)
这个属性其实最初是为网页测试设计的。但在实际的应用中,利用第三方前缀来为不同浏览器设置同一属性也屡见不鲜。
目前这些前缀有:
-moz- : 火狐浏览器
-webkit-: 基于webkit核心的浏览器,如Safari、Chrome。
-o-:Opera浏览器
-ms-:IE浏览器
带第三方前缀的属性为网站兼容性提供很好的便利。
常用CSS3新属性:
CSS圆角
这个恐怕是使用最多的CSS3属性了。在此之前如果要为div标签或按钮添加圆角那可要大费周折地做一堆类和图片来实现。到了CSS3只要一句语法就能搞定:
使用方法:
- border-radius: [<length> | <%>];
- border-radius: [top-left] [top-right] [bottom-right] [bottom-left];
- border-top-left-radius: [<length> | <%>];
和其他CSS属性一样,可以定义一条总的规则;也可以为每个角定义不同角度。如何使用第三方前缀,用法略有区别:
WebKit(chorme浏览器,safari浏览器)
使用border-radius定义圆角时,webkit浏览器只认前两个值。解决方法是使用长格式定义如border-top-left-radius。
Mozilla(friefox火狐浏览器)
火狐浏览器的长格式圆角定义与其他略有不同
- -moz-border-radius-topleft:10px;
- -moz-border-radius-topright:10px;
- -moz-border-radius-bottomleft:10px;
- -moz-border-radius-bottomright:10px;
示例:
CSS代码:
- #1 {border-radius:10px;}
- #2 {border-radius:50%;}
- #3 {border-radius:25px 5px;}
- #4 {border-radius:40px 30px 20px 10px;}
兼容性
IE9+,Safari 3.2以上[WebKit的前缀],Safari 5以上,Chrome 4 +和Firefox 3.0 + [-MOZ-前缀 Opera 10.5 +
CSS颜色(Color)
CSS3颜色最大的改进是支持了alpha透明度选项。而之前CSS却无法做到这点。
- color: rgba([<0-255>],[<0-255>],[<0-255>],[<0-1.0>]);
- color: hsla([<0-360>],[<%>],[<%>],[<0-1.0>]);
HSL为色彩体系的:色相(Hue),饱和度(Saturation),明度(Lightness),,透明度(Alpha)
最后一个选项指定透明度。另外,边框的颜色和阴影也支持这种带透明度选项的颜色设定。如果希望和老的浏览器兼容,那么就要额外定义一个。
- color:rgb(0,0,0); color: rgba(0,0,0,0.5);
示例:
- #1 {background:rgba(255,255,255,0.3);}
- #2 {background:rgba(45,35,200,0.5);}
- #3 {background:hsla(225,90%,10%,0.2);}
- #4 {background:hsla(125,100%,50%,0.5);}
兼容性:
IE9 +,Safari 3.2以上,Chrome 5 +和Firefox 3.0 +,Opera 10.1 +
CSS文字阴影 (Text Shadow)
该属性可以指定文字显示阴影,以及阴影的颜色、位置、模糊度
- text-shadow: [color] [x-coordinate] [y-coordinate] [blur radius];
- text-shadow: #000000 10px -5px 3px;
指定的颜色可以是任意的RGB或HSL色表中的一个。X,Y表示阴影的相对位置,可正可负。
模糊度的值可以大于等于0的任意整数,默认为0。
其实,CSS文字阴影早在CSS2.0的标准制定中就被提了出来。可惜到3.0版本才得以实现。遗憾的是,目前IE 9系列仍然不支持这个属性。
示例:
CSS代码:
- #1 {text-shadow:rgba(0,0,0,0.5) 1px 1px 0;}
- #2 {text-shadow:rgba(0,0,0,0.7) 5px 5px 3px;}
- #3 {text-shadow:rgba(45,35,200,0.7) -10px -10px 3px;}
兼容性:
Safari 3.2 +,Chrome4 +,火狐3.0 +,Opera 10.1 +
盒子阴影(Box Shadow)
CSS盒子的概念各位如果不清楚的请搜索之。盒子阴影和文字阴影略有不同,一个是基于div之类的块元素,另一个则是针对文字。
- text-shadow: [x-coordinate] [y-coordinate] [blur radius] [color];
- text-shadow: 10px -5px 3px #000000;
- text-shadow: inset 10px -5px 3px #000000;
它的定义方法和文字阴影差不多。之前只有在PS中才有的内阴影、外阴影如今只需一句css定义了。
- text-shadow: inset 10px -5px 3px #000000, 10px -5px 3px #000000;
示例:
CSS代码:
- #1 {box-shadow:10px 10px 0 #666666;}
- #2 {box-shadow:-10px -10px 5px #666666;}
- #3 {box-shadow:inset -5px -5px 0 rgba(255,255,255,0.5);}
- #4 {box-shadow:5px 5px 5px #666666, inset 5px 5px 5px rgba(255,255,255,0.5);}
兼容性
SupportIE9+, Safari 3.2+[-webkit- prefix], Safari 5+, Chrome 4+, Firefox 3.5+ [-moz- prefix], Opera 10.5+
CSS多重背景
可以为一个div定义多个背景图片。而在此之前,我们实现的方法是使用多个div,并为每个div定义一个背景图片。
- background: url([image]) [position] [repeat], url([image]) [position] [repeat];
示例:
- {background:url(lollipop.png) 10px 10px no-repeat,
- url(stripes.png) left bottom repeat-x,
- url(diagonal-pattern.jpg), #FFFFFF;
- }
兼容性
IE9+, Safari 3.2+, Chrome 4+, Firefox 3.6+, Opera 10.5+
需要注意的是,如果要保持对旧浏览器的兼容,则需要额外再定义一个background以作备用
背景大小
CSS3既然能够制定多重背景,那么指定背景大小也不在话下。
- background-size: [<length> | <%> | <auto>] [<length> | <%> | <auto>];
- background-size: 100% auto;
- background-size: 100% auto, 10px 10px;
兼容性
IE9+, Safari 3.2+, Chrome 4+, Firefox 3.6[-moz- prefix], Firefox 4+, Opera 10.5+
background-clip 和 background-origin
这两个属性用来确定背景的定位。
background-clip 用来判断 background 是否包含 border 区域。
background-origin 用来决定 background-position 计算的参考位置。
- background-origin: [<border-box> | <padding-box> | <content-box>];
- background-clip: [<border-box> | <padding-box> | <content-box>];
对于 background-clip:
如果是 padding 值,则 background 包括padding范围,border 是透明的。如果是 border 值,则background 包括border 区域。如果 background-image(in CSS3 via W3C) 图片有多个,对应的 background-clip 值之间用逗号分隔。
对于 background-origin:
如果是 padding 值,则 position 相对于 padding 边缘(”0 0″ 为 padding 边缘的左上角,而 “100% 100%” 为右下角)。如果是 border 值,则意味着相对 border 边缘。而 border 值则相对于内容边缘。与 background-clip 相同,多个值也用逗号分隔。如果 background-clip 是 padding 值,background-origin 是 border 值,并且 background-position 是 “top left”(默认初始值),则背景图左上角将会被截取掉部分。
具体效果看下面的图示:
兼容性
IE9+, Safari 3.2+[-webkit- prefix], Chrome 4+[-webkit- prefix], Firefox 4+, Opera 10.5+
图片边框
在CSS2中边框只能是一成不变的一条直线,要么是实线,要么是虚线。如此乏味的设计当然不能满足网页设计的需要。应运而生了许多边框设计方案。
到CSS3里,人家给你统一了,直接可以定义图片边框,简单而又有趣。
- border-image: [img] [slice] [<repeat> | <round> | <stretch>];
- border-top-image: [img] [slice] [<repeat> | <round> | <stretch>];
- border-corner-image: [img] [slice] [<repeat> | <round> | <stretch>];
- border-top-left-image: [img] [slice] [<repeat> | <round> | <stretch>];
示例:
- #1 {border-image:url(border.jpg) 15 15 15 15 round;}
- #2 {border-width:15px; border-image:url(border.jpg) 15 15 15 15 round;}
- #3 {border-width:15px; border-image:url(border.jpg) 15 15 15 15 stretch;}
- #4 {border-width:20px; border-image:url(border.jpg) 15 15 15 15 repeat;}
基于这个定义我们就可以设计五花八门的独特边框啦^_^
兼容性
Safari 3.2+[-webkit- prefix], Chrome 5+[-webkit- prefix], Firefox 3.5+ [-moz- prefix], Opera 10.5+
其他一些新特性:
讲了不少,其实CSS3的新特性远不止这么多。笔者也不能一个个全都说一遍^_^。挑几个常用的属性为各位详细叙述下。
余下的,笔者简单提一下,如果感兴趣的朋友可以自己搜索一下自行阅读啦。
选择符
选择符类型 | 表达式 | 描述 |
子串匹配的属性选择符 | E[att^="val"] | 匹配具有att属性、且值以val开头的E元素 |
子串匹配的属性选择符 | E[att$="val"] | 匹配具有att属性、且值以val结尾的E元素 |
子串匹配的属性选择符 | E[att*="val"] | 匹配具有att属性、且值中含有val的E元素 |
结构性伪类 | E:root | 匹配文档的根元素。在HTML中,根元素永远是HTML |
结构性伪类 | E:nth-child(n) | 匹配父元素中的第n个子元素E |
结构性伪类 | E:nth-last-child(n) | 匹配父元素中的倒数第n个结构子元素E |
结构性伪类 | E:nth-of-type(n) | 匹配同类型中的第n个同级兄弟元素E |
结构性伪类 | E:nth-last-of-type(n) | 匹配同类型中的倒数第n个同级兄弟元素E |
结构性伪类 | E:last-child | 匹配父元素中最后一个E元素 |
结构性伪类 | E:first-of-type | 匹配同级兄弟元素中的第一个E元素 |
结构性伪类 | E:only-child | 匹配属于父元素中唯一子元素的E |
结构性伪类 | E:only-of-type | 匹配属于同类型中唯一兄弟元素的E |
结构性伪类 | E:empty | 匹配没有任何子元素(包括text节点)的元素E |
目标伪类 | E:target | 匹配相关URL指向的E元素 |
UI元素状态伪类 | E:enabled | 匹配所有用户界面(form表单)中处于可用状态的E元素 |
UI元素状态伪类 | E:disabled | 匹配所有用户界面(form表单)中处于不可用状态的E元素 |
UI元素状态伪类 | E:checked | 匹配所有用户界面(form表单)中处于选中状态的元素E |
UI元素状态伪类 | E::selection | 匹配E元素中被用户选中或处于高亮状态的部分 |
否定伪类 | E:not(s) | 匹配所有不匹配简单选择符s的元素E |
通用兄弟元素选择器 | E ~ F | 匹配E元素之后的F元素 |
Media Queries
Media Queries可以针对不同设备的一些Media属性设定不同的CSS属性或者是不同的CSS文件调用。
- @media screen and (max-width: 800px) {
- body {background: #000000;}
- }
可以看到在不同的宽度设置下,呈现不同的布局。这对于正如日中天的移动平台应用无疑有着巨大的影响力。
兼容性
IE9+, Safari 3.2+, Chrome 5+, Firefox 3.5+, Opera 10.1+
后记:
这片东拼西凑的东西终于写完了,笔者深感欣慰。上班时间快到了,css快速入门到此结束。笔者自己其实也是学员之一。希望这篇文章能对你有点小小的作用^_^。
背景大小
CSS3既然能够制定多重背景,那么指定背景大小也不在话下
- background-size: [<length> | <%> | <auto>] [<length> | <%> | <auto>];
- background-size: 100% auto; background-size: 100% auto, 10px 10px;