基本选择器和层次选择器
- 通配符选择器(*)
- 所有浏览器支持通配符选择器
- 权重最低
- 所有浏览器支持通配符选择器
- 元素选择器(E)
- 所有浏览器支持元素选择器(E)
- 所有浏览器支持元素选择器(E)
- 类选择器(.className)
- 所有浏览器都支持类选择器
- 多类选择器(.className1.className2)不被ie6支持
- 所有浏览器都支持类选择器
- Id选择器(#ID)
- 所有浏览器都支持ID选择器
- 具有唯一性使用id选择器
- 所有浏览器都支持ID选择器
- 后代选择器(E F)
- 所有浏览器都支的后代选择器
- 所有浏览器都支的后代选择器
- 子元素选择器(E>F)
- IE6不支持子元素选择器。
- IE6不支持子元素选择器。
- 相邻兄弟元素选择器(E + F)
- IE6不支持这个选择器
- EF两元素具有一个相同的父元素,而且F元素在E元素后面,而且相邻,这样我们就可以使用相邻兄弟元素选择器来选择F元素
- IE6不支持这个选择器
- 通用兄弟选择器(E 〜 F)
- IE6不支持这种选择器的用法
- E和F元素是属于同一父元素之内,并且F元素在E元素之后,那么E ~ F 选择器将选择中所有E元素后面的F元素
- IE6不支持这种选择器的用法
- 群组选择器(selector1,selector2,…,selectorN)
- 所有浏览器都支持群组选择器
- 所有浏览器都支持群组选择器
属性选择器
- E[attr]:只使用属性名,但没有确定任何属性值;
- E[attr=”value”]:指定属性名,并指定了该属性的属性值;
- E[attr~=”value”]:指定属性名,并且具有属性值,此属性值是一个词列表,并且以空格隔开,其中词列表中包含了一个value词,而且等号前面的“〜”不能不写;
- E[attr^=”value”]:指定了属性名,并且有属性值,属性值是以value开头的;
- E[attr$=”value”]:指定了属性名,并且有属性值,而且属性值是以value结束的;
- E[attr*=”value”]:指定了属性名,并且有属性值,而且属值中包含了value;
- E[attr|=”value”]:指定了属性名,并且属性值是value或者以“value-”开头的值(比如说zh-cn);
伪类选择器
- 动态伪类选择器(爱恨原则LoVe/HAte,也就是Link—visited—hover—active)
- :link /链接没有被访问时/
- :visited /链接已被访问过/
- :hover /用于当用户把鼠标移动到元素上面时的效果;(IE6只支持a:hover)/
- :active /用于用户点击元素那一下的效果(正发生在点的那一下,松开鼠标左键此动作也就完成了,IE7以下不支持)/
- :focus /用于元素成为焦点,这个经常用在表单元素上。(IE7以下不支持)/
- 对于:hover在IE6下只有a元素支持,:active只有IE6-7不支持,:focus在IE6-7下不被支持。
- :link /链接没有被访问时/
- UI元素状态伪类选择器
- “:enabled”,”:disabled”,”:checked”伪类称为UI元素状态伪类,这些主要是针对于HTML中的Form元素操作,最常见的比如我们”type=”text”有enable和disabled两种状态,前者为可写状态后者为不可状态;另外”type=”radio”和”type=”checkbox””有”checked”和”unchecked”两种状态。
- IE6-8不支持”:checked”,”:enabled”,”:disabled”这三种选择器。
- 示例:input[type=”text”]:disabled {border:1px solid #999;background-color: #fefefe;}
- “:enabled”,”:disabled”,”:checked”伪类称为UI元素状态伪类,这些主要是针对于HTML中的Form元素操作,最常见的比如我们”type=”text”有enable和disabled两种状态,前者为可写状态后者为不可状态;另外”type=”radio”和”type=”checkbox””有”checked”和”unchecked”两种状态。
- 目标伪类选择器
- E:target
- 选择匹配E的所有元素,且匹配元素被相关URL指向
- IE8以下不兼容
- 选择匹配E的所有元素,且匹配元素被相关URL指向
- E:target
- 结构伪类选择
- :first-child
- 选择某个元素的第一个子元素;
- ie6不兼容
- 选择某个元素的第一个子元素;
- :last-child
- 选择某个元素的最后一个子元素
- ie8以下不兼容
- 选择某个元素的最后一个子元素
- :nth-child(n)
- 选择某个元素的一个或多个特定的子元素
- 这里的“n”只能是”n”,不能使用其他字母代替,不然会没有任何效果的(”n”不能为负值)
- IE6-8和FF3-浏览器不支持”:nth-child”选择器。
- 示例
- :nth-child(3) /第三个元素/
- :nth-child(2n) /偶数的元素,等于”:nth-child(even)”效果/
- :nth-child(2n-1) /奇数的元素,等于”:nth-child(odd)”效果/
- :nth-child(n+5) /选择第五个后面的元素/
- :nth-child(-n+5) /选择第五个前面的元素/
- :nth-child(4n+1) /隔三选一/
- :nth-child(3) /第三个元素/
- 选择某个元素的一个或多个特定的子元素
- :nth-last-child(n)
- 选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算;
- :nth-child()是从元素的第一个开始计算,而:nth-last-child()是从元素的最后一个开始计算,他们的计算方法都是一样的。
- IE6-8和FF3.0-浏览器不支持”:nth-last-child()”选择器。
- 选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算;
- :nth-of-type()
- 其实这种使用和:nth-child使用是一样的,也可以使用:nth-child的那些表达式和使用方法,唯一不同的是这种指定了元素的类型而以。同样在IE6-8和FF3.0-浏览器不支持这种选择器
- 示例:.demo p:nth-of-type(even) {background-color: lime;}
- IE6-8和FF3.0-浏览器不支持这种选择器
- 其实这种使用和:nth-child使用是一样的,也可以使用:nth-child的那些表达式和使用方法,唯一不同的是这种指定了元素的类型而以。同样在IE6-8和FF3.0-浏览器不支持这种选择器
- :nth-last-of-type()
- 类似于:first-child和:last-child;不同之处就是指定了元素的类型。
- IE6-8和FF3.0-浏览器不支持这种选择器
- 类似于:first-child和:last-child;不同之处就是指定了元素的类型。
- :first-of-type和:last-of-type
- 类似于:first-child和:last-child;不同之处就是指定了元素的类型。
- ie8以下不兼容
- 类似于:first-child和:last-child;不同之处就是指定了元素的类型。
- :only-child
- 选择的元素是它的父元素的唯一一个了元素;
- IE6-8浏览器不支持:only-child选择器;
- 选择的元素是它的父元素的唯一一个了元素;
- :only-of-type
- 选择一个元素是它的上级元素的唯一一个相同类型的子元素
- IE6-8和FF3.0-浏览器不支持:only-of-type选择器。
- 选择一个元素是它的上级元素的唯一一个相同类型的子元素
- :empty
- 选择的元素里面没有任何内容。
- IE6-8浏览器不支持:empty选择器
- 选择的元素里面没有任何内容。
- :first-child
- 否定选择器(:not)
- 让你定位不匹配该选择器的元素
- IE6-8浏览器不支持:not()选择器
- 示例:input:not([type=”submit”]) {border: 1px solid red;}
- 让你定位不匹配该选择器的元素
- 语言伪类选择器
- E:lang(language)
- 选择匹配E的所有元素,且匹配元素指定了lang属性,而且其值为language
- E:lang(language)
- 伪元素 (两个“::”和一个“:”css3中主要用来区分伪类和伪元素,到目前来说,这两种方式都是被接受的,也就是说不管使用哪种写法所起的作用都是一样的,只是一个书写格式不同而以。)
- ::first-line选择元素的第一行,比如说改变每个段落的第一行文本的样式
- ::first-letter选择文本块的第一个字母,除非在同一行里面包含一些其它元素,不过这个主要运用于段落排版上多,比如说首字下沉
- ::before和::after
- 这两个主要用来给元素的前面或后面插入内容,这两个常用”content”配合使用
- 示例
- .clearfix:before,
- .clearfix:after {
- content: “.”;
- display: block;
- height: 0;
- visibility: hidden;
- }
- .clearfix:after {clear: both;}
- .clearfix {zoom: 1;}
- .clearfix:before,
- 这两个主要用来给元素的前面或后面插入内容,这两个常用”content”配合使用
- ::selection用来改变浏览网页选中文的默认效果
- IE9+、Opera、Google Chrome 以及 Safari 中支持 ::selection 选择器。Firefox 支持替代的 ::-moz-selection。
- 只能设置两个属性,一个就是background,另一个就是color属性,设置其他属性是没有任何效果的。
- 示例
- /Webkit,Opera9.5+,Ie9+/
- ::selection {
- background: 颜色值;
- color:颜色值;
- }
- /Mozilla Firefox/
- ::-moz-selection {
- background: 颜色值;
- color:颜色值;
- }
- /Webkit,Opera9.5+,Ie9+/
- IE9+、Opera、Google Chrome 以及 Safari 中支持 ::selection 选择器。Firefox 支持替代的 ::-moz-selection。
- ::first-line选择元素的第一行,比如说改变每个段落的第一行文本的样式
浏览器如何识别你的选择器
- 浏览器读取选择器的顺序是由右到左进行
- 越具体的关键选择器,其性能越高
CSS选择器的效率(从高到低)
- id选择器(#myid)
- 类选择器(.myclassname)
- 标签选择器(div,h1,p)
- 相邻选择器(h1+p)
- 子选择器(ul > li)
- 后代选择器(li a)
- 通配符选择器(*)
- 属性选择器(a[rel=”external”])
- 伪类选择器(a:hover,li:nth-child)