根据获取页面中元素的不同,目前css选择器主要分为五类:基本选择器,组合选择器,伪类选择器,伪元素和属性选择器。
1.基本选择器
基本选择器主要分为标签选择器,类选择器,ID选择器和通配选择器。
(1)标签选择器是css中使用率最高的一类选择器,易于管理,它直接引用HTML标签名称,也称为类型选择器,类型选择器规定了网页元素在页面中的显示样式。因此标签选择器可以快速,方便的控制页面标签的默认显示效果。
1 <head> 2 <style> 3 p{ 4 font-size:12px; 5 color:red; 6 } 7 </style> 8 </head>
(2)类选择器,是以(.)前缀开头,然后跟随一个自定义的类名,对应于html中的class属性
1 <style> 2 .font18px{ 3 font-size:18px; 4 } 5 </style> 6 7 <p class="font18px">该段落字体大小设置为18px</p>
注:如果把标签和类结合在一起来定义选择器,则可以限定类的使用范围,这样就可以指定该类仅适用于特定的标签范围内,这种做法也称为指定类选择器。
1 <style> 2 p.font18px{ 3 font-size:18px; 4 } 5 </style> 6 <p class="font18px">样式只对该段落有效</p> 7 <p>样式对该段落无效,因为没有类font18px的指定</p>
(3)ID选择器,是以(#)前缀开头,然后跟随一个自定义的ID名,对应于HTML中的ID属性。
1 <style type="text/css"> 2 #box{ 3 height:200px; 4 width:400px; 5 } 6 </style> 7 <div id="box">宽400px,高200px</div>
注:一般通过ID选择器来定义HTML框架结构的布局效果,因为HTML框架元素的ID值都是唯一的。
(4)通配选择器,如果HTML所有元素都需要定义相同的样式,这时可选择通配选择器,通配选择器是固定的,用星号(*)表示。
1 *{ 2 font-size:19px; 3 }
2.组合选择器
当把两个或者多个基本选择器组合在一起时,便形成了一个复杂的选择器,通过组合选择器可以精确匹配页面元素。主要包括:包含选择器,子选择器,相邻选择器,兄弟选择器,分组选择器。
(1)包含选择器:包含选择器通过空格标识符来表示,前面的一个选择器表示包含框对象的选择器,而后面的选择器表示被包含的选择器。
1 #header p{ 2 font-size : 18px; 3 }
表示的是从id =header中包含的所有p元素字体大小全部设置为18px,header为祖先,其他p为后代,即选中后代。不管是儿子还是孙子,只要是都会被选中。
(2)子选择器:指定父元素所包含的子元素。子选择器使用尖角号(>)表示。子选择器只传给儿子,孙子和其他堂亲都不行。
1 div > span { 2 font-size:24px; 3 }
表示包含在div元素内的子元素span字体大小为24像素。通过这种方式,可以准确定义HTML文档某个或一组子元素的样式,而不再需要为它们定义id属性或者class属性。
(3)相邻选择器:通过(+)分隔符进行定义,前后选择符的关系是兄弟关系。如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻选择器。
1 p+h3{ 2 font-size:18px; 3 }
(4)兄弟选择器:通过(~)分隔符进行定义,其基本结构是第一选择器指定同级前置元素,后面的选择器指定其后同级所有匹配元素。前后选择符的关系是兄弟关系。简言之,就是查找某一个指定元素的后面的所有兄弟结点。而先前介绍的相邻选择器只能查找紧接的那一个兄弟结点。
1 p~h3{ 2 font-size:18px; 3 }
(5)分组选择器:通过(,)分隔符进行定义,其基本结构是第一个选择器指定匹配元素,后面的选择器指定另一个匹配元素,最后把前后选择器匹配的元素全部都取出来,通过分组选择器可以实现集体声明,将样式表中一致的css样式放在一起,然后通过逗号连接这些选择器,减少代码的书写量。
1 h1,h2,h3,h4{ 2 font-size:18px; 3 }
3.属性选择器
1 E[attr] //只使用了属性名,但没有确定任何属性值。 2 E[attr="value"] //指定了属性名,并指定了该属性的属性值。 3 E[attr~="value"] //指定了属性名,并且具有属性值,此属性值是一个词列表,并且以空格隔开,其中词列表中包含了一个value词,而且等号前面的~不能不写。 4 E[attr^="value"] //指定了属性名,并且有属性值,属性值是以value开头的。 5 E[attr$="value"] //指定了属性名,并且有属性值,属性值是以value结尾的。 6 E[attr*="value"] //指定了属性名,并且有属性值,属性值中包含了value。 7 E[attr|="value"] //指定了属性名,并且属性值是value或者以value-开头的值,如(zh-en)。
注:E表示匹配元素的选择符,可以省略;中括号为属性选择器标识符,不可或缺;attr表示html属性名,value表示html属性值,或者html属性值包含的子字符串,如a[title*="site"],则可以匹配<a title="website"></a>,因为website中包含site子字符串。
4.伪类选择器
伪类选择器包含伪类和伪对象选择器,伪选择器以冒号(:)作为前缀标识符,冒号前可以添加选择符,限定伪类应用的范围,冒号后为伪类和伪对象名,冒号前后没有空格,否则将错认为类选择器。伪类选择器主要包括4种:动态伪类,结构伪类,否定伪类和状态伪类,其基本写法如下:
1 //单纯式 2 E.pseudo-class{property:value} 3 a:link{color:red;} 4 //混用式 5 E.class:pseudo-class{property:value} 6 a.selected:hover{color:red;}
(1)动态伪类:动态伪类是行为类样式,这些伪类并不存在于HTML中,只有当用户与页面交互时才能体现出来,动态伪类选择器包含两种形式:一种是锚点伪类,这是在链接中常见的样式,如:link,:visited;另一种是行为伪类,也称为用户操作伪类,如:hover,:active,:focus。
1 //尊重先后顺序:link-visited-hover-active 2 <style> 3 //链接没有被访问时前景色为灰色 4 .demo a:link{color:gray;} 5 //链接被访问过后前景色为黄色 6 .demo a:visited{color:yellow;} 7 //鼠标悬浮在链接上时前景色为绿色 8 .demo a:hover{color:green;} 9 //鼠标击中激活链接那一下前景色为蓝色 10 .demo a:active{color:blue;} 11 </style>
(2)结构伪类:它是通过文档结构树实现元素过滤,通过文档结构的相互关系来匹配特定的元素,从而减少文档内class属性和id属性的定义,使得文档更加简洁。
1 :first-child //选择某个元素的第一个子元素 2 :last-child //选择某个元素的最后一个子元素 3 :nth-child() //选择某个元素的一个或者多个特定的子元素 4 :nth-last-child() //选择某个元素的一个或者多个特定的子元素,从这个元素的最后一个子元素开始计算 5 :nth-of-type() //选择指定的元素 6 :nth-last-of-type() //选择指定的元素,从元素的最后一个开始计算 7 :first-of-type //选择一个上级元素下的第一个同类子元素 8 :last-of-type //选择一个上级元素的最后一个同类子元素 9 :only-child //选择的元素是它的父元素的唯一一个子元素 10 :only-of-type //选择一个元素是它的上级元素的唯一一个相同类型的子元素 11 :empty //选择的元素里面没有任何内容
1 <style> 2 body{ 3 background:#ccc; 4 height:2617px; 5 width:980px; 6 } 7 #wrap{ 8 position:absolute; 9 width:249px; 10 height:249px; 11 z-index:1; 12 left:712px; 13 top:201px; 14 } 15 #wrap ul{ 16 list-style-type:none; 17 margin:0; 18 padding:0; 19 font-size:12px; 20 color:#777; 21 border:1px solid red; 22 } 23 #wrap li{ 24 background:url(image.JPG) no-repeat 2px 5px; 25 padding:1px 0px 0px 28px; 26 line-height:30px; 27 } 28 #wrap li a{ 29 text-decoration:underline; 30 color:#777; 31 } 32 #wrap li a:hover{ 33 color:blue; 34 } 35 #wrap li:first-child{ 36 background-position:2px 0px; 37 font-weight:bold; 38 } 39 #wrap li:last-child{ 40 background-position:2px -277px; 41 <!-- font-weight:bold; --> 42 } 43 #wrap li:nth-child(2){ 44 background-position:2px -31px; 45 } 46 #wrap li:nth-child(3){ 47 background-position:2px -72px; 48 } 49 #wrap li:nth-child(4){ 50 background-position:2px -113px; 51 } 52 #wrap li:nth-child(5){ 53 background-position:2px -154px; 54 } 55 #wrap li:nth-child(6){ 56 background-position:2px -195px; 57 } 58 #wrap li:nth-child(7){ 59 background-position:2px -236px; 60 } 61 62 #wrap li:nth-of-type(even){ 63 color:lightgray; 64 } 65 </style> 66 <body> 67 <div id="wrap"> 68 <ul id="container"> 69 <li><a href="#">送君千里,终须一别</a></li> 70 <li><a href="#">旅行的意义</a></li> 71 <li><a href="#">南师虽去,精神永存</a></li> 72 <li><a href="#">榴莲糯米糍</a></li> 73 <li><a href="#">阿尔及利亚,天命之年</a></li> 74 <li><a href="#">白菜鸡肉粉丝包</a></li> 75 <li><a href="#">展望塔上的杀人</a></li> 76 <li><a href="#">我们,只会在路上相遇</a></li> 77 </ul> 78 </div> 79 </body>
1 <style> 2 .post p{ 3 background-color:#efefef; 4 } 5 <!-- :only-child如果需要在div.post只有一个P元素的时候,改变这个p的样式,那么便可以用:only-child选择器来实现 --> 6 .post p:only-child{ 7 background-color:red; 8 } 9 <!-- :only-of-type表示一个元素中包含很多个子元素,而其中只有一个子元素唯一,那么久使用这个方法选中这个唯一的子元素 --> 10 .post p:only-of-type{ 11 background-color:blue; 12 } 13 </style> 14 <div class="post"> 15 <p>第一段文本内容</p> 16 <p>第二段文本内容</p> 17 18 </div> 19 <div class="post"> 20 <p>第三段文本内容</p> 21 </div> 22 <div class="post"> 23 <div>子块一</div> 24 <p>文本段</p> 25 <div>子块二</div> 26 </div>
(3)否定伪类::not()表示否定选择器,即排除或者过滤掉特定元素。前面介绍的选择器都是匹配操作,而唯独:not()操作相反,它表示过滤操作,与jquery中的:not()选择器用法相同。
1 input:not([type="submit"]){ 2 border:1px solid red; 3 }
(4)状态伪类:状态伪类主要针对表单进行设计的,由于表单是UI设计的灵魂,UI元素的状态一般包括:可用、不可用、选中、未选中、获取焦点、失去焦点、锁定、待机等。比如::enabled, :disabled;:checked
(5)目标伪类:目标伪类选择器形式如E:target,它表示选择匹配E的所有元素,且匹配元素被相关URL指向。该选择器是动态选择器,只有当存在URL指向该匹配元素时,样式效果才能有效。
1 <style> 2 div.target{ 3 background-color:red; 4 } 5 </style> 6 <div> 7 <div id="red">red</div> 8 <div id="blue">blue</div> 9 </div>
在链接中输入#red,