转自:http://www.cnblogs.com/yiyuanke/archive/2011/10/22/CSS.html

你也许已经掌握了id、class、后台选择器这些基本的css选择器。但这远远不是css的全部。下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题。掌握了它们,才能真正领略css的巨大灵活性。

1. *

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }

星状选择符会在页面上的每一个元素上起作用。web设计者经常用它将页面中所有元素的margin和padding设置为0。 *选择符也可以在子选择器中使用。

  1. #container * {
  2. border: 1px solid black;
  3. }

上面的代码中会应用于id为container元素的所有子元素中。 除非必要,我不建议在页面中过的的使用星状选择符,因为他的作用域太大,相当耗浏览器资源。 兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

2. #X

  1. #container {
  2. width: 960px;
  3. margin: auto;
  4. }

井号作用域有相应id的元素。id是我们最常用的css选择器之一。id选择器的优势是精准,高优先级(优先级基数为100,远高于class的10), 作为javascript脚本钩子的不二选择,同样缺点也很明显优先级过高,重用性差,所以在使用id选择器前,我们最好问下自己,真的到了非用id选择 器的地步? 兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

3. .X

  1. .error {
  2. color: red;
  3. }

这是一个class(类)选择器。class选择器与id选择器的不同是class选择器能作用于期望样式化的一组元素。 兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

4. X Y

  1. li a {
  2. text-decoration: none;
  3. }

这也是我们最常用的一种选择器——后代选择器。用于选取X元素下子元素Y,要留意的点是,这种方式的选择器将选取其下所有匹配的子元素,无视层级,所以有 的情况是不宜使用的,比如上述的代码去掉li下的所有a的下划线,但li里面还有个ul,我不希望ul下的li的a去掉下划线。使用此后代选择器的时候要 考虑是否希望某样式对所有子孙元素都起作用。这种后代选择器还有个作用,就是创建类似命名空间的作用。比如上述代码样式的作用域明显为li。 兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

5. X

  1. a { color: red; }
  2. ul { margin-left: 0; }

标签选择器。使用标签选择器作用于作用域范围内的所有对应标签。优先级仅仅比*高。 兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

6. X:visited和X:link

  1. a:link { color: red; }
  2. a:visted { color: purple; }

使用:link伪类作用于未点击过的链接标签。:hover伪类作用于点击过的链接。 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

7. X+Y

  1. ul + p {
  2. color: red;
  3. }

相邻选择器,上述代码中就会匹配在ul后面的第一个p,将段落内的文字颜色设置为红色。(只匹配第一个元素) 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

8. X>Y

  1. div#container > ul {
  2. border: 1px solid black;
  3. }
  4.  
  5. <div id="container">
  6. <ul>
  7. <li> List Item
  8. <ul>
  9. <li> Child </li>
  10. </ul>
  11. </li>
  12. <li> List Item </li>
  13. <li> List Item </li>
  14. <li> List Item </li>
  15. </ul>
  16. </div>

子选择器。与后代选择器X Y不同的是,子选择器只对X下的直接子级Y起作用。在上面的css和html例子中,div#container>ul仅对container中最近一级的ul起作用。从理论上来讲X > Y是值得提倡选择器,可惜IE6不支持。 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

9. X ~ Y

  1. ul ~ p {
  2. color: red;
  3. }

相邻选择器,与前面提到的X+Y不同的是,X~Y匹配与X相同级别的所有Y元素,而X+Y只匹配第一个。 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

10. X[title]

  1. a[title] {
  2. color: green;
  3. }

属性选择器。比如上述代码匹配的是带有title属性的链接元素。

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

11. X[title="foo"]

  1. a[href="http://css9.net"] {
  2. color: #1f6053;
  3. }

属性选择器。 上面的代码匹配所有拥有href属性,且href为http://css9.net的所有链接。

这个功能很好,但是多少又有些局限。如果我们希望匹配href包含css9.net的所有链接该怎么做呢?看下一个选择器。 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

12. X[title*="css9.net"]

  1. a[href*="css9.net"] {
  2. color: #1f6053;
  3. }

属性选择器。正如我们想要的,上面代码匹配的是href中包含"css9.net"的所有链接。

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

13. X[href^="http"]

  1. a[href^="http"] {
  2. background: url(path/to/external/icon.png) no-repeat;
  3. padding-left: 10px;
  4. }

属性选择器。上面代码匹配的是href中所有以http开头的链接。 兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

13. X[href$=".jpg"]

  1. a[href^="http"] {
  2. background: url(path/to/external/icon.png) no-repeat;
  3. padding-left: 10px;
  4. }

属性选择器。在属性选择器中使用$,用于匹配结尾为特定字符串的元素。在上面代码中匹配的是所有链接到扩展名为.jpg图片的链接。(注意,这里仅仅是.jpg图片,如果要作用于所有图片链接该怎么做呢,看下一个选择器。)

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

14. X[data-*="foo"]

在上一个选择器中提到如何匹配所有图片链接。如果使用X[href$=".jpg"]实现,需要这样做:

  1. a[href$=".jpg"],
  2. a[href$=".jpeg"],
  3. a[href$=".png"],
  4. a[href$=".gif"] {
  5. color: red;
  6. }

看上去比较麻烦。另一个解决办法是为所有的图片链接加一个特定的属性,例如‘data-file’

html代码

  1. <a href="path/to/image.jpg" data-filetype="image"> 图片链接 </a>

css代码如下:

  1. a[data-filetype="image"] {
  2. color: red;
  3. }

这样所有链接到图片的链接字体颜色为红色。

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

15. X[foo~="bar"]

属性选择器。属性选择器中的波浪线符号可以让我们匹配属性值中用空格分隔的多个值中的一个。看下面例子:

html代码

  1. <a href="path/to/image.jpg" data-info="external image"> Click Me, Fool </a>

css代码

  1. a[data-info~="external"] {
  2. color: red;
  3. }
  4. a[data-info~="image"] {
  5. border: 1px solid black;
  6. }

在上面例子中,匹配data-info属性中包含“external”链接的字体颜色为红色。匹配data-info属性中包含“image”的链接设置黑色边框。

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

17. X:checked

checked伪类用来匹配处于选定状态的界面元素,如radio、checkbox。

  1. input[type=radio]:checked {
  2. border: 1px solid black;
  3. }

上面代码中匹配的是所有处于选定状态的单选radio,设置1px的黑色边框。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

18. X:after和X:before

这两个伪类与content结合用于在元素的前面或者后面追加内容,看一个简单的例子:

  1. h1:after {content:url(/i/logo.gif)}

上面的代码实现了在h1标题的后面显示一张图片。

我们也经常用它来实现清除浮动,写法如下:

  1. .clearfix:after {
  2. content: "";
  3. display: block;
  4. clear: both;
  5. visibility: hidden;
  6. font-size: 0;
  7. height: 0;
  8. }
  9. .clearfix {
  10. *display: inline-block;
  11. _height: 1%;
  12. }

19. X:hover

  1. div:hover {
  2. background: #e3e3e3;
  3. }

:hover伪类设定当鼠标划过时元素的样式。上面代码中设定了div划过时的背景色。

需要注意的是,在ie 6中,:hover只能用于链接元素。

这里分享一个经验,在设定链接划过时出现下滑线时,使用border-bottom会比text-decoration显得更漂亮些。代码如下:

  1. a:hover {
  2. border-bottom: 1px solid black;
  3. }

兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

20. X:not(selector)

  1. div:not(#container) {
  2. color: blue;
  3. }

否定伪类选择器用来在匹配元素时排除某些元素。在上面的例子中,设定除了id为container的div元素字体颜色为blue。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

21. X::pseudoElement

::伪类用于给元素片段添加样式。比如一个段落的第一个字母或者第一行。需要注意的是,这个::伪类只能用于块状元素。

下面的代码设定了段落中第一个字母的样式:

  1. p::first-letter {
  2. float: left;
  3. font-size: 2em;
  4. font-weight: bold;
  5. font-family: cursive;
  6. padding-right: 2px;
  7. }

下面的代码中设定了段落中第一行的样式:

  1. p::first-line {
  2. font-weight: bold;
  3. font-size: 1.2em;
  4. }

兼容浏览器:IE6+、Firefox、Chrome、Safari、Opera

(IE6竟然支持,有些意外啊。)

22. X:nth-child(n)

  1. li:nth-child(3) {
  2. color: red;
  3. }

这个伪类用于设定一个序列元素(比如li、tr)中的第n个元素(从1开始算起)的样式。在上面例子中,设定第三个列表元素li的字体颜色为红色。

看一个更灵活的用法,在下面例子中设定第偶数个元素的样式,可以用它来实现隔行换色:

  1. tr:nth-child(2n) {
  2. background-color: gray;
  3. }

兼容浏览器:IE9+、Firefox、Chrome、Safari

23. X:nth-last-child(n)

  1. li:nth-last-child(2) {
  2. color: red;
  3. }

与X:nth-child(n)功能类似,不同的是它从一个序列的最后一个元素开始算起。上面例子中设定倒数第二个列表元素的字体颜色。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

24. X:nth-of-type(n)

  1. ul:nth-of-type(3) {
  2. border: 1px solid black;
  3. }

与X:nth-child(n)功能类似,不同的是它匹配的不是某个序列元素,而是元素类型。例如上面的代码设置页面中出现的第三个无序列表ul的边框。

兼容浏览器:IE9+、Firefox、Chrome、Safari

25. X:nth-last-of-type(n)

ul:nth-last-of-type(3) { border: 1px solid black; }

与X:nth-of-type(n)功能类似,不同的是它从元素最后一次出现开始算起。上面例子中设定倒数第三个无序列表的边框

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

26. X:first-child

:first-child伪类用于匹配一个序列的第一个元素。我们经常用它来实现一个序列的第一个元素或最后一个元素的上(下)边框,如:

  1. ul:nth-last-of-type(3) {
  2. border: 1px solid black;
  3. }

兼容浏览器:IE7+、Firefox、Chrome、Safari、Opera

27. X:last-child

  1. ul > li:last-child {
  2. border-bottom:none;
  3. }

与:first-child类似,它匹配的是序列中的最后一个元素。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

28. X:only-child

  1. div p:only-child {
  2. color: red;
  3. }

这个伪类用的比较少。在上面例子中匹配的是div下有且仅有一个的p,也就是说,如果div内有多个p,将不匹配。

  1. <div><p> My paragraph here. </p></div>
  2.  
  3. <div>
  4. <p> Two paragraphs total. </p>
  5. <p> Two paragraphs total. </p>
  6. </div>

在上面代码中第一个div中的段落p将会被匹配,而第二个div中的p则不会。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

29. X:only-of-type

  1. li:only-of-type {
  2. font-weight: bold;
  3. }

这个伪类匹配的是,在它上级容器下只有它一个子元素,它没有邻居元素。例如上面代码匹配仅有一个列表项的列表元素。

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera

30. X:first-of-type

:first-of-type伪类与:nth-of-type(1)效果相同,匹配出现的第一个元素。我们来看个例子:

  1. <div>
  2. <p> My paragraph here. </p>
  3. <ul>
  4. <li> List Item 1 </li>
  5. <li> List Item 2 </li>
  6. </ul>
  7. <ul>
  8. <li> List Item 3 </li>
  9. <li> List Item 4 </li>
  10. </ul>
  11. </div>

在上面的html代码中,如果我们希望仅匹配List Item 2列表项该如何做呢:

方案一:

  1. ul:first-of-type > li:nth-child(2) {
  2. font-weight: bold;
  3. }

方案二:

  1. p + ul li:last-child {
  2. font-weight: bold;
  3. }

方案三:

  1. ul:first-of-type li:nth-last-child(1) {
  2. font-weight: bold;
  3. }

兼容浏览器:IE9+、Firefox、Chrome、Safari、Opera。

总结:

如果你正在使用老版本的浏览器,如IE 6,在使用上面css选择器时一定要注意它是否兼容。不过,这不应成为阻止我们学习使用它的理由。在设计时,你可以参考浏览器兼容性列表,也可以通过脚本手段让老版本的浏览器也支持它们。

另一点,我们在使用javascript类库的选择器时,例如jquery,要尽可能的使用这些原生的css3选择器,因为类库的选择器引擎会通过浏览器内置解析它们,这样会获得更快的速度。

原文:http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/

30个最常用css选择器解析的更多相关文章

  1. 30个最常用css选择器解析(zz)

    你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领 ...

  2. 前端开发中常用的CSS选择器解析(一)

    你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的介绍css中最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领略cs ...

  3. 常用css选择器以及选择器的权重值介绍

    一.选择器的权重值 选择器权重值比较: !important infinity   无穷大 行间样式                   1000 id                        ...

  4. 常用 CSS 选择器

    // css 读取顺序从右到左,符合要求的都会匹配 // 通配符选择器 -- 选择所有元素 * // 通配符选择器 -- 选择某个元素下的所有元素 .demo * // 元素选择器 html,body ...

  5. CSS选择器解析

    通配符选择器 Universal Selector * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizin ...

  6. 兼容IE8及以上的常用css选择器

    p~ul//位于p元素后边的ul div>p div+p//紧接在 <div> 元素之后的所有 <p> 元素 [attribute]//[target]选择带有 targ ...

  7. 你须知道的30个CSS选择器 »

    你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领 ...

  8. [css选择器]总结:IE6不支持的CSS选择符

    转载地址:https://www.wenjiwu.com/doc/zvsbii.html.此文最后也给出了原文地址,但是我点击过去发现是什么赌博彩票的地址,360也弹出小心的提示,所以这里只给出了我转 ...

  9. css选择器

    常用css选择器,希望对大家有所帮助,不喜勿喷. 1.*:通用选择器 * { margin: 0; padding: 0; } 选择页面上的全部元素,通常用于清除浏览器默认样式,不推荐使用. 2.#i ...

随机推荐

  1. 下载和安装cocoaPods

    ios中一些三方的库用的cocoaPods管理.管理三方库非常的方便 简单说一下安装步骤 1.sudo gem install cocoapods2.gem sources --remove http ...

  2. ASP.Net大文件上传组件详解

    首先右键单击网站根目录,在弹出的快捷菜单中,选择"添加引用"菜单项,弹出"添加引用",切换到"浏览"找到组件的Dll文件"Best ...

  3. Windows平台下Qt开发环境的搭建

    Qt 是采用开源和商用双协议发布的开放源代码的图形开发类库,现在很多图形化的开源软件都使用了Qt. 下载地址:http://qt-project.org/downloads 1. 下载安装包 你可以从 ...

  4. redis 安装及配置

    一.安装Redis 1.到官网下载redis最新版本,我下载的是 http://redis.io/ 2.拷贝redis-3.0.3到/usr/local目录 3.解压缩sudo tar -zxf re ...

  5. js异步脚本

    1.延迟脚本 HTML4.01为<script>标签定义了defer属性,为了表明脚本在执行时不会影响页面的构造.也就是说,脚本会在整个页面都解析完毕后再运行.因此在<script& ...

  6. em,pt和px之间的换算

    任意浏览器的默认字体高度16px(16像素).所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的b ...

  7. 用javascript操作xml(三)关于Jquery的html()不兼容IE的解决办法

    当 $("#xxx").html(data); 不兼容,方法替换为 document.getElementById("xxx").innerHTML=data;

  8. umount 卸载的时候,提示busy!

    mount /dev/sdb /mnt/disk umount -l /mnt/disk[有busy的问题可以加上l项] 1. 查询当前谁在使用device,fuser /mnt/temp,查询结果是 ...

  9. 跨域Ajax请求WebService方法

    一.允许跨域Ajax请求,更改如下配置: 在要调用的WebService上面添加特性标签: 二.以如下返回用户信息的WebService方法为例 三.在另一个网站上通过Ajax访问webService ...

  10. SQL效率低下原因主要有

    类别 子类 表达式或描述 原因 索引 未建索引   产生全表扫描   未利用索引 substring(card_no,1,4)=′5378′ 产生全表扫描     amount/30< 1000 ...