一、选择器
1、比较少用的一个标签:
2、常用的伪类:
all unvisited links:a:link,all visited links: a:visited,鼠标在上悬浮的连接:a:hover,获得焦点的input:input:focus,另外还有:active。:link和:visited称为连接伪类,只能用于锚元素,:hover、:active、:focus称为动态伪类,理论上可以应用于任何元素。但是IE6只注意用于锚链接的:active和:hover选择器,完全忽略:focus,IE7在任何元素上都支持:hover,但是完全忽略:active和:focus。另外,还有比较有用的:first-child伪类。
属性 | 描述 | CSS |
---|---|---|
:active | 向被激活的元素添加样式。 | 1 |
:focus | 向拥有键盘输入焦点的元素添加样式。 | 2 |
:hover | 当鼠标悬浮在元素上方时,向元素添加样式。 | 1 |
:link | 向未被访问的链接添加样式。 | 1 |
:visited | 向已被访问的链接添加样式。 | 1 |
:first-child | 向元素的第一个子元素添加样式。 | 2 |
:lang | 向带有指定 lang 属性的元素添加样式。 | 2 |
个人觉得:hover是最重要的一个伪类,很多纯css实现的组件,往往是借助于这个特性,而可以不用js辅助实现的。
另外,通过把伪类连接在一起,可以创建更复杂的行为,比如在已访问连接和未访问连接上实现不同的鼠标悬停效果。a:visited:hover {color:olive}。
关于伪类,w3c school上有清楚的描述。http://www.w3school.com.cn/css/css_pseudo_classes.asp
3、常用的选择器
元素选择器:p {color:red}
类选择器:.nav {color:red}
id选择器:#content {color:red}
后代选择器:blockquote p {padding-left:2em;}
通常上面几种选择器组合使用,就可以实现大多数选择功能。不要在每个元素上都加上不同的类,而应该在它们的祖先上应用一个id或类,然后通过后代选择器选择它们
4、通用选择器:
*{padding:0;}
5、子选择器,子选择器只选择元素的直接后代,即子元素。如,#nav>li{},注意,IE6不支持,IE7中有bug,如果父元素和子元素之间有html注释,就会有问题。在ie6中,可以通过通用选择器模拟子选择器,现在父元素的后代上应用样式,然后用通用选择器覆盖非直属后代的样式,如:
#nav li{ background:url{folder.png} no-repeat left top; padding-left:20px; } #nav li *{ background-image:none; padding-left:0; }
6、相邻选择器:
相邻选择器用于选择处于同一个父元素下某个元素之后的元素。如让紧挨着标题的段落出现文字稍大一点的效果:
h2 + p{ font-size:1.4em; font-weight:bold; color:#777 }
与子选取器类似,相邻选择器在ie中有一样的缺陷。
7、属性选择器
属性选择器可以根据某个元素是否存在或属性的值来寻找元素,因此能够实现某种非常有意思和强大的效果。比如让有提示的元素底边框出现特殊效果:
td[title]{ border-bottom:1px dotted #999; } td[title]:hover,td[title]:focus{ cursor:help; }
属性选择器还可以根据属性的值来应用样式:a[ref="nofollow"] {}
包括IE7的现代浏览器都支持属性选择器,但是IE6不支持,所以,可以利用这一特性,为ie6的浏览器应用特殊样式,为其他的现代浏览器应用较好的样式:
#header{ background:url{branding-bw.png} repeat -y left top; } [id="header"]{ background:url{color.png} repeat-y left top; }
选择器个人总结:CSS选择器和JQuery的选择器在很大程度上几乎一样。
二、样式与层叠
1、层叠的规则
CSS为什么叫做层叠样式表,层叠(Cascade)是指处理一个元素上可能有两个或更多规则,CSS通过层叠来处理这多个规则的冲突,层叠的过程就是优先级高的规则覆盖优先级低的规则。作者的样式,是指站点开发者定义的样式,用户可以通过浏览器应用自己的样式。层叠采用以下重要度次序
2、特殊性,根据选择器的特殊性决定规则的次序。具有更特殊的选择器的优先级优于更一般的选择器的规则。如果两个选择器的特殊性相同,则后面的优于前面的 。
为了计算规则的特殊性,给每种选择器都分配一个数值,然后将规则的每个选择器的值加在一起,计算出规则的特殊性。特殊性的计算不是以10为基数的,而是采用一个更高的未指定的基数。这样能够确保非常特殊的选择器(比如ID选择器)不会被大量一般选择器(比如类型选择器)所超越。但是,为了简化,如果在一个特定的选择器中选择器的数量少于10个,那么可以以10为基数计算特殊性。
选择器的特殊性分为4个等级:a、b、c、d。
如果样式是行内样式,那么a=1
b等于ID选择器的总数
c等于类、伪类和属性选择器的数量
d等于类型选择器和伪元素选择器的数量
特殊性示例
选择器 特殊性 以10为基数的特殊性
style="" 1,0,0,0 1000
#wrapper #content {} 0,2,0,0 200
#content .dateposted{} 0,1,1,0 110
div#content{} 0,1,0,1 101
#content {} 0,1,0,0 100
p{} 0,0,0,1 1
总结一句话:用style风格编写的规则比其它所有规则都优先,ID选择器比类选择器优先,类选择器比类型选择器优先。
3、继承
继承不等于层叠,继承是指应用样式的后代元素会继承某些属性,如颜色和字号,对于IE中的表格例外。需要注意的是:继承而来的样式的特殊性为0,所以直接应用于元素的任何样式总会覆盖继承而来的样式。
三、样式表的组织与规划、维护
对于文档,样式表可以链接也可以导入:
<link href="" ref="stylesheet" type="text/css"/>
<style type="text/css">
@import url("/css/advanced.css");
</style>
还可以将另一样式表导入样式表。但是导入的样式表,比链接的慢。关于使用多个css文件,还是一个css文件,多个css文件会导致服务器发送更多的数据包,会影响下载时间。另外,浏览器只能从同一个域中同时下载有限的文件,对于老式浏览器,常常是两个,现代浏览器通常是8个。因此多个css文件可能会影响下载速度。