10-CSS3选择器详解

#CSS3介绍

CSS3在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷。

#CSS3的现状

  • 浏览器支持程度不够好,有些需要添加私有前缀

  • 移动端支持优于PC端

  • 不断改进中

  • 应用相对广泛

#应对的策略:渐进增强

  • (1)坚持渐进增强的原则:让低版本浏览器能正常访问页面,高版本的浏览器用户体验更好。【重要】

比如说,同样是一个头像,可能在低版本的浏览器中,头像方的;在高版本的浏览器中,头像是圆的。

  • (2)考虑用户群体。

  • (3)遵照产品的方案。

参考链接:

#浏览器的版本问题

由于CSS3普遍存在兼容性问题,为了避免因兼容性带来的干扰,浏览器的建议版本为:

  • Chrome浏览器 version 46+

  • Firefox浏览器 firefox 42+

#如何使用手册

CSS参考手册的网址:http://css.doyoe.com/

CSS参考手册的下载链接:http://download.csdn.net/download/smyhvae/10243974

在查看CSS参考手册时,需要注意以下符号:

比如说,{1,4}表示可以设置一至四个参数。

下面讲CSS3的基础知识。本文讲一下 CSS3 选择器的内容。

#CSS3 选择器

我们之前学过 CSS 的选择器,比如:

  1. div 标签选择器
  2. .box 类名选择器
  3. #box id选择器
  4. div p 后代选择器
  5. div.box 交集选择器
  6. div,p,span 并集选择器
  7. div>p 子代选择器
  8. * : 通配符
  9. div+p: 选中div后面相邻的第一个p
  10. div~p: 选中的div后面所有的p
 

CSS3新增了许多灵活查找元素的方法,极大的提高了查找元素的效率和精准度。CSS3选择器与 jQuery 中所提供的绝大部分选择器兼容。

#属性选择器

属性选择器的标志性符号是 []

匹配含义:

  1. ^:开头 $:结尾 *:包含
1

格式:

  • E[title] 选中页面的E元素,并且E存在 title 属性即可。

  • E[title="abc"]选中页面的E元素,并且E需要带有title属性,且属性值完全等于abc。

  • E[attr~=val] 选择具有 att 属性且属性值为:用空格分隔的字词列表,其中一个等于 val 的E元素。

  • E[attr|=val] 表示要么是一个单独的属性值,要么这个属性值是以“-”分隔的。

  • E[title^="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 开头。

  • E[title$="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 结尾。

  • E[title*="abc"] 选中页面的E元素,并且E需要带有 title 属性,属性值任意位置包含abc。

比如说,我们用属性选择器去匹配标签的className,是非常方便的。

这里我们用class属性来举例。代码举例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>选择器 - 属性</title>
  6. <style>
  7. body {
  8. margin: 0;
  9. padding: 0;
  10. font-family: '微软雅黑';
  11. background-color: #F7F7F7;
  12. }
  13. .wrapper {
  14. width: 1024px;
  15. margin: 0 auto;
  16. }
  17. .wrapper > section {
  18. min-height: 300px;
  19. margin-bottom: 30px;
  20. box-shadow: 1px 1px 4px #DDD;
  21. background-color: #FFF;
  22. }
  23. .wrapper > header {
  24. text-align: center;
  25. line-height: 1;
  26. padding: 20px;
  27. margin-bottom: 10px;
  28. font-size: 30px;
  29. }
  30. .wrapper section > header {
  31. line-height: 1;
  32. padding: 10px;
  33. font-size: 22px;
  34. color: #333;
  35. background-color: #EEE;
  36. }
  37. .wrapper .wrap-box {
  38. padding: 20px;
  39. }
  40. form {
  41. width: 300px;
  42. height: 300px;
  43. margin: 0 auto;
  44. }
  45. form input[type="text"] {
  46. width: 200px;
  47. height: 30px;
  48. }
  49. form input[type="password"] {
  50. width: 200px;
  51. height: 30px;
  52. }
  53. .attr1 {
  54. }
  55. .download {
  56. }
  57. .attr1 a[href="./a.rmvb"] {
  58. color: red;
  59. }
  60. .attr1 a[href="./b.rmvb"] {
  61. color: pink;
  62. }
  63. /* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/
  64. .attr2 a[class~="download"] {
  65. color: red;
  66. }
  67. /* E[attr|=val] 表示的要么一个单独的属性值 要么这个属性值是以"-"分隔的*/
  68. .attr3 a[class|="download"] {
  69. color: red;
  70. }
  71. /* E[attr*=val] 表示的属性值里包含val字符并且在“任意”位置 */
  72. .attr4 a[class*="download"] {
  73. color: red;
  74. }
  75. /* E[attr^=val] 表示的属性值里包含val字符并且在“开始”位置 */
  76. .attr5 a[class^="download"] {
  77. color: red;
  78. }
  79. /* E[attr$=val] 表示的属性值里包含val字符并且在“结束”位置 */
  80. .attr6 a[class$="download"] {
  81. color: red;
  82. }
  83. </style>
  84. </head>
  85. <body>
  86. <div class="wrapper">
  87. <header>CSS3-属性选择器</header>
  88. <section>
  89. <header>简介</header>
  90. <div class="wrap-box">
  91. <form action="">
  92. <ul>
  93. <li>
  94. 姓名: <input type="text">
  95. </li>
  96. <li>
  97. 密码: <input type="password">
  98. </li>
  99. <li>
  100. 性别: <input type="radio">
  101. <input type="radio">
  102. </li>
  103. <li>
  104. 兴趣: <input type="checkbox" name="" id="">写代码
  105. </li>
  106. <li>
  107. <input type="submit" value="提交">
  108. </li>
  109. </ul>
  110. </form>
  111. </div>
  112. </section>
  113. <section class="attr1">
  114. <header>E[attr]</header>
  115. <div class="wrap-box">
  116. <a href="./a.rmvb" class="download download-movie">下载</a>
  117. <a href="./b.rmvb" class="download download-movie">下载</a>
  118. <a href="./a.mp3" class="download download-music">下载</a>
  119. </div>
  120. </section>
  121. <section class="attr2">
  122. <header>E[attr~=attr]</header>
  123. <div class="wrap-box">
  124. <a href="./a.rmvb" class="download download-movie">下载</a>
  125. <a href="./b.rmvb" class="download download-movie">下载</a>
  126. <a href="./a.mp3" class="download download-music">下载</a>
  127. </div>
  128. </section>
  129. <section class="attr3">
  130. <header>E[attr|=attr]</header>
  131. <div class="wrap-box">
  132. <a href="./a.rmvb" class="download">下载</a>
  133. <a href="./b.rmvb" class="download-movie">下载</a>
  134. <a href="./a.mp3" class="download-music">下载</a>
  135. </div>
  136. </section>
  137. <section class="attr4">
  138. <header>E[attr*=val]</header>
  139. <div class="wrap-box">
  140. <a href="./a.rmvb" class="download">下载</a>
  141. <a href="./b.rmvb" class="moviedownload">下载</a>
  142. <a href="./a.mp3" class="downloadmusic">下载</a>
  143. </div>
  144. </section>
  145. <section class="attr5">
  146. <header>E[attr^=val]</header>
  147. <div class="wrap-box">
  148. <a href="./a.rmvb" class="download">下载</a>
  149. <a href="./b.rmvb" class="moviedownload">下载</a>
  150. <a href="./a.mp3" class="downloadmusic">下载</a>
  151. </div>
  152. </section>
  153. <section class="attr6">
  154. <header>E[attr$=val]</header>
  155. <div class="wrap-box">
  156. <a href="./a.rmvb" class="download">下载</a>
  157. <a href="./b.rmvb" class="moviedownload">下载</a>
  158. <a href="./a.mp3" class="downloadmusic">下载</a>
  159. </div>
  160. </section>
  161. </div>
  162. </body>
  163. </html>
 

最后来张表格:

#结构伪类选择器

伪类选择器的标志性符号是 :

CSS中有一些伪类选择器,比如:link:active:visited:hover,这些是动态伪类选择器。

CSS3又新增了其它的伪类选择器。这一小段,我们来学习CSS3中的结构伪类选择器:即通过结构来进行筛选。

1、格式:(第一部分)

  • E:first-child 匹配父元素的第一个子元素E。

  • E:last-child 匹配父元素的最后一个子元素E。

  • E:nth-child(n) 匹配父元素的第n个子元素E。注意,盒子的编号是从1开始算起,不是从0开始算起。

  • E:nth-child(odd) 匹配奇数

  • E:nth-child(even) 匹配偶数

  • E:nth-last-child(n) 匹配父元素的倒数第n个子元素E。

理解:

(1)这里我们要好好理解父元素的含义,它指的是:以 E 元素的父元素为参考。

(2)注意:以上选择器中所选到的元素的类型,必须是指定的类型E,如果选不中,则无效。这个要好好理解,具体可以看CSS参考手册中的E:nth-child(n)的示例。我们可以理解成:先根据选择器找到选中的全部位置,如果发现某个位置不是类型E,则该位置失效。

(3)另外,E:nth-child(n)这个属性也很有意思。比如,针对下面这样一组标签:

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. <li>6</li>
  8. <li>7</li>
  9. <li>8</li>
  10. <li>9</li>
  11. <li>10</li>
  12. </ul>
 

上方代码中:

  • 如果选择器写成li:nth-child(2),则表示第2个 li

  • 如果选择器写成li:nth-child(n),则表示所有的li。因为此时的 n 表示 0,1,2,3,4,5,6,7,8.....(当n小于1时无效,因为n = 0 也是不会选中的)

  • 如果选择器写成li:nth-child(2n),则表示所有的第偶数个 li。

  • 如果选择器写成li:nth-child(2n+1),则表示所有的第奇数个 li。

  • 如果选择器写成li:nth-child(-n+5),则表示前5个 li。

  • 如果选择器写成li:nth-last-child(-n+5),则表示最后5个 li。

  • 如果选择器写成li:nth-child(7n),则表示选中7的倍数。。

上面列举的选择器中,我们只要记住: n 表示 0,1,2,3,4,5,6,7,8.....就很容易明白了。

2、格式:(第二部分)

  • E:first-of-type 匹配同类型中的第一个同级兄弟元素E。

  • E:last-of-type 匹配同类型中的最后一个同级兄弟元素E。

  • E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E。

  • E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E。

既然上面这几个选择器带有type,我们可以这样理解:先在同级里找到所有的E类型,然后根据 n 进行匹配。

3、格式:(第三部分)

  • E:empty 匹配没有任何子节点(包括空格等text节点)的元素E。

  • E:target 匹配相关URL指向的E元素。要配合锚点使用。

举例:

我们可以把多个伪类选择器结合起来使用,比如:

如果想把上图中,第一行的前三个 span 标红,我们可以这样使用结构伪类选择器:

  1. dt:first-child span:nth-of-type(-n+3) {
  2. color: red;
  3. }
 

最后来张表格:

#伪元素选择器

伪元素选择器的标志性符号是 ::

1、格式:(第一部分)

  • E::before 设置在 元素E 前面(依据对象树的逻辑结构)的内容,配合content属性一起使用。

  • E::after 设置在 元素E 后面(依据对象树的逻辑结构)的内容,配合content属性一起使用。

E:afterE:before在旧版本里是伪类,在 CSS3 这个新版本里是伪元素。新版本里,E:afterE:before会被自动识别为E::afterE::before,按伪元素来对待,这样做的目的是用来做兼容处理。

举例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. /*::before 和::after 是通过 css 模拟出的html标签的效果*/
  8. span::before{
  9. content:"smyhvae";
  10. color:red;
  11. background-color: pink;
  12. width: 50px;
  13. height: 50px;
  14. display: inline-block;
  15. }
  16. span::after{
  17. content:"永不止步";
  18. color:yellowgreen;
  19. }
  20. /*给原本的span标签设置一个默认的属性*/
  21. span{
  22. border: 1px solid #000;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <span>生命壹号</span>
  28. </body>
  29. </html>
 

效果如下:

上图可以看出:

  • 通过伪元素选择器,就可以添加出类似于span标签的效果(记得要结合 content 属性使用)。

  • 通过这两个属性添加的伪元素,是行内元素,需要转换成块元素才能设置宽高。

2、格式:(第二部分)

  • E::first-letter 设置元素 E 里面的第一个字符的样式。

  • E::first-line 设置元素 E 里面的第一行的样式。

  • E::selection 设置元素 E 里面被鼠标选中的区域的样式(一般设置颜色和背景色)。

E::first-letter 的举例:

E::first-line的举例:

最后来张表格:

css 10-CSS3选择器详解的更多相关文章

  1. css3选择器详解

    css中除了早先最早的,ID选择器,class选择器一些以外在css3中新加入了新的选择器,新选择器的使用大大的方便了我们的编程,下面我就说一些css3的选择器的使用方法, p       选择了所有 ...

  2. [CSS3] 学习笔记-CSS3选择器详解(一)

    1.属性选择器 在CSS3中,追加了3个属性选择器,分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概念. <!doctype html> ...

  3. CSS3 基础(1)——选择器详解

    CSS3选择器详解 一. 属性选择器 在CSS3中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概念. 选择器 示例 描述 ...

  4. CSS选择器详解(伪类) 转 http://blog.csdn.net/Panda_m/article/details/50084699

    CSS选择器详解 之 伪类 伪类对大小写不敏感 结构伪类选择器 结构伪类是CSS3新增的类型选择器,利用DOM树实现元素过滤,通过文档结构的相互关系来匹配元素,可以减少class和id属性的定义,使文 ...

  5. web前端学习(三)css学习笔记部分(6)-- 选择器详解

    9.选择器详解 9.1  属性选择器 CSS3 属性选择器,在 CSS3 中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概 ...

  6. CSS系列(8) CSS后代选择器和子选择器详解

    一.CSS后代选择器详解 1,  生动介绍基本概念 一个标签嵌B在另一个标签A内部,B就是A的后代. 而且,B的后代也是A的后代,这就叫“子子孙孙无穷尽也”. 比如: <div> < ...

  7. web前端学习(三)css学习笔记部分(4)-- CSS选择器详解

    4.  元素选择器详解 4.1  元素选择器 4.2  选择器分组 用英文逗号","相连,使用相同的样式表 使用通配符对所有元素进行通用设定. 4.3  类选择器详解 4.3.1. ...

  8. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

  9. 转:【译】CSS3:clip-path详解

    我的一个学生,Heather Banks,想要实现他在Squarespace看到的一个效果: 根据她的以往经验,这个网站的HTML和CSS是完全在她的能力范围以内,于是我帮助她完成了这个效果.显示na ...

随机推荐

  1. Linux Command Line_1_Shell基础

      引言 图形用户界面(GUI)让简单的任务更容易完成,命令行界面(CLI)使完成复杂的任务成为可能. 第一部分:Shell 本部分包括命令行基本语言,命令组成结构,文件系统浏览.编写命令行.查找命令 ...

  2. 03python开发之流程控制

    03 python开发之流程控制 目录 03 python开发之流程控制 3 流程控制 3.1 流程判断之if判断 3.1.1 代码块 3.1.2 if判断基础语法 3.1.3 案例 3.1.4 if ...

  3. AFNetWorking 丢失数据

    问题描述: 使用AFNetWorking请求数据,请求成功,但是拿不到所需要的数据,但是使用其他平台都可以拿到数据. 原因分析: AFNetWorking无法解析. 解决方式: AFJSONRespo ...

  4. Sysbench对Mysql进行基准测试

    前言 1.基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的.可复现.可对比的测试. 进一步来理解,基准测试是在某个时候通过基准测试建立一个已知的 ...

  5. Java蓝桥杯——贪心算法

    贪心算法 贪心算法:只顾眼前的苟且. 即在对问题求解时,总是做出在当前看来是最好的选择 如买苹果,专挑最大的买. 最优装载问题--加勒比海盗 货物重量:Wi={4,10,7,11,3,5,14,2} ...

  6. 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!

    距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...

  7. 啊这......蚂蚁金服被暂缓上市,员工的大house没了?

      没有想到,网友们前两天才对蚂蚁员工人均一套大 House羡慕嫉妒恨,这两天又因为蚂蚁金服被叫停惋惜.小编看了一下上一篇的时间,正好是11月3日晚上被叫停.太难了!   这中间出现了什么变故呢?原本 ...

  8. C++stl简单使用

    1 //1.sort函数排序 2 /* 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; ...

  9. framework中的sentinel

    引入切面: 切面+sentinel-web-servlet private void initDataSource() { String zkUrl = zaSentinelConfig.getDat ...

  10. 数据库default null字段用基本类型映射,改成包装类型后缓存中旧数据反序列化失败

    rt,spring Temp不知道用的什么反序列化,int不能反序列化为Integer,后实验hissing是可以的int->Integer  Integer(不为null)->int均可