或许大家平时总是在用的选择器都是:#id .class 以及标签选择器。可是这些还远远不够,爱创课堂为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助。
更多精彩关注:http://www.icketang.com/
1 *:通用选择器
* { margin:0; padding:0; }
*选择器是选择页面上的全部元素,上面的代码作用是把全部元素的margin和padding设为0,最基本的清除浏览器默认样式的方法。
*选择器也可以应用到子选择器中,例如下面的代码:
#container * { border:1px solid black; }
这样ID为container 的所有子标签元素都被选中了,并且设置了border。
2 #id:id选择器
#container { width: 960px; margin: auto; }
id
选择器是很严格的并且你没办法去复用它。使用的时候大家还是得相当小心的。需要问自己一下:我是不是必须要给这个元素来赋值个id来定位它呢?
3 .class:类选择器
.error { color: red; }
这是个class
选择器。它跟id
选择器不同的是,它可以定位多个元素。当你想对多个元素进行样式修饰的时候就可以使用class
。当你要对某个特定的元素进行修饰那就是用id
来定位它。
4 selector1 selector2:后代选择器
li a { text-decoration: none; }
后代选择器是比较常用的
选择器。如果你想更加具体的去定位元素,你可以使用它。例如,假如,你不需要定位所有的a
元素,而只需要定位li
标签下的a
标签?这时候你就需要使用后代
选择器了。
提示:如果你的选择器像X Y Z A B.error
这样,那你就错了。时刻都提醒自己,是否真的需要对那么多元素修饰。
5 tagName:标签选择器
a { color: red; } ul { margin-left: 0; }
如果你想定位页面上所有的某标签,不是通过id
或者是’class’,这简单,直接使用类型选择器。
6 selector:link selector:visited selector:hover selector:active 伪类选择器
一般情况下selector都为a标签,以上四种伪类选择器代表的意思如下:
link:连接平常的状态。
visited:连接被访问过之后。
hover:鼠标放到连接上的时候。
active:连接被按下的时候。
点击a标签链接时:link、hover、active
点击后未移入a标签连接时:link、visited
点击后移入a标签连接时:link、visited、hover
点击后再次点击a标签连接时:link、visited、hover、active
这个就是所有组合的样式了。
如果有多个同样的样式,后面的样式会覆盖前面的样式,所以这四个伪类的定义就有顺序的要求了,而大家所说的‘lvha’也是因为这个原因。
ul + p { color: red; }
ul
标签后面的第一段,并将它们的颜色都设置为红色。div#container > ul { border: 1px solid black; }
它与差别就是后面这个指挥选择它的直接子元素。看下面的例子
<div id="container"> <ul> <li> List Item <ul> <li> Child li> ul> li> <li> List Item li> <li> List Item li> <li> List Item li> ul> div>
#container > ul
只会选中id
为’container’的div
下的所有直接ul
元素。它不会定位到如第一个li
下的ul
元素。
由于某些原因,使用子节点组合选择器会在性能上有许多的优势。事实上,当在javascript中使用css
选择器时候是强烈建议这么做的。
9 selector1 ~ selector2 : 兄弟选择器
ul ~ p { color: red; }
兄弟节点组合选择器跟相邻选择器
很相似,然后它又不是那么的严格。ul + p
选择器只会选择紧挨跟着指定元素的那些元素。而这个选择器,会选择跟在目标元素后面的所有匹配的元素。
a[title] { color: green; }
上面的这个例子中,只会选择有title属性的元素。那些没有此属性的锚点标签将不会被这个代码修饰。
11 selector[href="foo"] : 属性选择器
a[href="http://strongme.cn"] { color: #1f6053; /* nettuts green */ }
上面这片代码将会把href
属性值为http://strongme.cn
的锚点标签设置为绿色,而其他标签则不受影响。
注意:我们将值用双引号括起来了。那么在使用Javascript的时候也要使用双引号括起来。可以的话,尽量使用标准的CSS3选择器。
12 selector[href*=”strongme”] : 属性选择器
a[href*="strongme"] { color: #1f6053; }
指定了strongme
这个值必须出现在锚点标签的href
属性中,不管是strongme.cn
还是strongme.com
还是www.strongme.cn
都可以被选中。
但是记得这是个很宽泛的表达方式。如果锚点标签指向的不是strongme
相关的站点,如果要更加具体的限制的话,那就使用^
和$
,分别表示字符串的开始和结束。
13 selector[href^=”href”] : 属性选择器
a[href^="http"] { background: url(path/to/external/icon.png) no-repeat; padding-left: 10px; }
大家肯定好奇过,有些站点的锚点标签旁边会有一个外链图标,我也相信大家肯定见过这种情况。这样的设计会很明确的告诉你会跳转到别的网站。
用克拉符号就可以轻易做到。它通常使用在正则表达式中标识开头。如果我们想定位锚点属性href
中以http
开头的标签,那我们就可以用与上面相似的代码。
注意我们没有搜索http://,那是没必要的,因为它都不包含https://。
14 selector[href$=”.jpg”] : 属性选择器
a[href$=".jpg"] { color: red; }
这次我们又使用了正则表达式$
,表示字符串的结尾处。这段代码的意思就是去搜索所有的图片链接,或者其它链接是以.jpg
结尾的。但是记住这种写法是不会对gifs
和pngs
起作用的。
15 selector[data-*=”foo”] : 属性选择器
a[data-filetype="image"] { color: red; }
回到上一条,我们如何把所有的图片类型都选中呢png
,jpeg
,’jpg’,’gif’?我们可以使用多选择器。看下面:
a[href$=".jpg"], a[href$=".jpeg"], a[href$=".png"], a[href$=".gif"] { color: red; }
但是这样写着很蛋疼啊,而且效率会很低。另外一个办法就是使用自定义属性。我们可以给每个锚点加个属性data-filetype
指定这个链接指向的图片类型。
a[data-filetype="image"] { color: red; }
16 selector[foo~=”bar”] : 属性选择器
a[data-info~="external"] { color: red; } a[data-info~="image"] { border: 1px solid black; }
这个我想会让你的小伙伴惊呼妙极了。很少有人知道这个技巧。这个~
符号可以定位那些某属性值是空格分隔多值的标签。
继续使用第15条那个例子,我们可以设置一个data-info
属性,它可以用来设置任何我们需要的空格分隔的值。这个例子我们将指示它们为外部连接和图片链接。
<a href="path/to/image.jpg" data-info="external image"> Click Me, Fool a>
给这些元素设置了这个标志之后,我们就可以使用~
来定位这些标签了。
/* Target data-info attr that contains the value "external" */ a[data-info~="external"] { color: red; } /* And which contain the value "image" */ a[data-info~="image"] { border: 1px solid black; }
17 selector:checked : 伪类选择器
input[type=radio]:checked { border: 1px solid black; }
上面这个伪类写法可以定位那些被选中的单选框和多选框,就是这么简单。
18 selector:after : 伪类选择器
before
和after
这俩伪类。好像每天大家都能找到使用它们的创造性方法。它们会在被选中的标签周围生成一些内容。
当使用.clear-fix
技巧时许多属性都是第一次被使用到里面的。
.clearfix:after { content: ""; display: block; clear: both; visibility: hidden; font-size: 0; height: 0; } .clearfix { *display: inline-block; _height: 1%; }
上面这段代码会在目标标签后面补上一段空白,然后将它清除。这个方法你一定得放你的聚宝盆里面。特别是当overflow:hidden
方法不顶用的时候,这招就特别管用了。
根据CSS3标准规定,可以使用两个冒号::
。然后为了兼容性,浏览器也会接受一个冒号的写法。其实在这个情况下,用一个冒号还是比较明智的。
19 selector:hover : 伪类选择器
div:hover { background: #e3e3e3; }
不用说,大家肯定知道它。官方的说法是user action pseudo class
.听起来有点儿迷糊,其实还好。如果想在用户鼠标飘过的地方涂点儿彩,那这个伪类写法可以办到。
注意:旧版本的IE只会对加在锚点a
标签上的:hover
伪类起作用。
通常大家在鼠标飘过锚点链接时候加下边框的时候用到它。
a:hover { border-bottom: 1px solid black; }
专家提示:border-bottom:1px solid black;比text-decoration:underline;要好看很多。
20 selector1:not(selector2) : 伪类选择器
div:not(#container) { color: blue; }
取反
伪类是相当有用的,假设我们要把除id
为container
之外的所有div
标签都选中。那上面那么代码就可以做到。
或者说我想选中所有出段落标签之外的所有标签
:not(p) { color: green; }
21 selector::pseudoElement : 伪类选择器
p::first-line { font-weight: bold; font-size:1.2em; }
我们可以使用::
来选中某标签的部分内容,如第一段,或者是第一个字。但是记得必须使用在块式标签上才起作用。
伪标签是由两个冒号 :: 组成的
定位第一个字: