Blogger Information
Blog 6
fans 1
comment 2
visits 6346
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
css的选择器知识汇总(简单选择器,上下文选择器,伪类选择器)
昊天
Original
696 people have browsed it

选择器

1. 简单选择器

1.1 种类

序号 选择器 描述 举例
1 元素选择器 根据元素标签名称进行匹配 div {...}
2 群组选择器 同时选择多个不同类型的元素 h1,h2,h3{...}
3 通配选择器 选择全部元素,不区分类型 * {...}
4 属性选择器 根据元素属性进行匹配 *[...]
5 类选择器 根据元素 class 属性进行匹配 *.active {...}
6 id 选择器 根据元素 id 属性进行匹配 *#top {...}
  • 元素是使用标签和属性进行描述,所以使用标签和属性来选择元素非常自然和直观
  • 以上 6 种,其实可分为二类: 元素选择器和属性选择器, 其它的只是二者的特例罢了
  • 最常用的是: 元素选择器, 类选择器, id 选择器
  • 当 class,id 选择器不限定被修改的元素类型时, 星号”*“可以省略
  • id,class 可以添加到任何元素上,前面的元素限定符默认就是*,所以可以不写
  • id 页面中只用一次
  • 标签 < class 属性 < id 属性

演示代码如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>使用九宫格演示简单选择器案例</title>
  7. <style>
  8. /* 元素选择器案例 */
  9. body {
  10. background-color: rgb(212, 190, 190);
  11. }
  12. /* 群组选择器案例 */
  13. h1,
  14. h2,
  15. h3,
  16. p {
  17. background-color: rgb(255, 255, 255);
  18. }
  19. /* 通配符选择器案例, */
  20. *.item {
  21. background-color: oldlace;
  22. }
  23. /* 属性选择器案例 */
  24. /* .item[title="练习属性选择器"] { */
  25. /* 有多个title属性的时候下面的就应用到多个属性 */
  26. .item[title="练习属性选择器"] {
  27. background-color: orange;
  28. }
  29. /* 类选择器案例 */
  30. .container {
  31. width: 300px;
  32. height: 300px;
  33. display: grid;
  34. grid-template-columns: repeat(3, 1fr);
  35. gap: 5px;
  36. }
  37. .item {
  38. font-size: 2rem;
  39. background-color: lightblue;
  40. display: flex;
  41. justify-content: center;
  42. align-items: center;
  43. }
  44. /* 多个类选择器案例 */
  45. .item.five {
  46. background-color: limegreen;
  47. }
  48. /* id选择器案例 */
  49. #eight {
  50. background-color: maroon;
  51. }
  52. </style>
  53. </head>
  54. <body>
  55. <h1>大家好,我的php中文网的一名学生</h1>
  56. <h2>我学习的是PHP中文网第11期课程</h2>
  57. <h3>我叫昊天</h3>
  58. <p>初来乍到,多多指点</p>
  59. <div class="container">
  60. <div class="item">1</div>
  61. <div class="item">2</div>
  62. <div class="item" title="练习属性选择器">3</div>
  63. <div class="item">4</div>
  64. <div class="item five">5</div>
  65. <div class="item">6</div>
  66. <div class="item">7</div>
  67. <div class="item" id="eight">8</div>
  68. <div class="item">9</div>
  69. </div>
  70. </body>
  71. </html>

2. 上下文选择器

  • html 文档,看上去就像一颗倒置的”树”,所以是有层级结构的
  • 每一个元素, 在文档中, 都有自己的位置,即上下文关系
  • 所以, 完全可以根据元素的上下文关系,来获取到它们

2.1 一个元素的四种角色

序号 角色 描述
1 祖先元素 拥有子元素,孙元素等所有层级的后代元素
2 父级元素 仅拥有子元素层级的元素
3 后代元素 与其它层级元素一起拥有共同祖先元素
4 子元素 与其它同级元素一起拥有共同父级元素

2.2 四种上下文选择器

序号 选择器 操作符 描述 举例
1 后代选择器 空格 选择当前元素的所有后代元素 div p, body *
2 父子选择器 > 选择当前元素的所有子元素 div > h2
3 同级相邻选择器 + 选择拥有共同父级且相邻的元素 li.red + li
4 同级所有选择器 ~ 选择拥有共同父级的后续所有元素 li.red ~ li

演示代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. /* 父子选择器 */
  24. div > .item {
  25. background-color: orangered;
  26. }
  27. /* 同级相邻选择器 */
  28. /* 选择第4个 */
  29. .item.center + .item {
  30. background-color: #ffffff;
  31. }
  32. h1 + h1 {
  33. background-color: purple;
  34. }
  35. /* 同级所有选择器 */
  36. /* 选择3后面的所有有共同父级的 */
  37. .item.center ~ .item {
  38. background-color: royalblue;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div>
  44. <h1>html</h1>
  45. <h1>html</h1>
  46. <h2>css</h2>
  47. <h3>php</h3>
  48. </div>
  49. <div class="container">
  50. <div class="item">1</div>
  51. <div class="item">2</div>
  52. <div class="item center">3</div>
  53. <div class="item">4</div>
  54. <div class="item">5</div>
  55. <div class="item">6</div>
  56. <div class="item">7</div>
  57. <div class="item">8</div>
  58. <div class="item">9</div>
  59. </div>
  60. </body>
  61. </html>

3. 伪类选择器

  • 学习之前,先分析上下文选择器的局限性,例如选择同一个父级下的第二个子元素,就没那么简单
  • 而伪类就正好弥补了上下文选择器的短板, 所以伪类,大多数是基于文档中元素结构的
  • : 本意是假的,不存在的意思, 这里是特指, 不需要在元素上添加额外的属性来获取元素
  • : 暗指伪类的级别, 仍然是属于”class”级别, 仍然属于属性选择器范畴,级别高于元素选择器

我们重点放在伪类最重要的应用场景:

场景 描述
结构伪类 根据子元素的位置特征进行选择
表单伪类 根据表单控件状态特征进行选择

3.1 结构伪类

3.1.1 不分组匹配

序号 选择器 描述 举例
1 :first-child 匹配第一个子元素 div :first-child
2 :last-child 匹配最后一个子元素 div :last-child
3 :only-child 选择元素的唯一子元素 div :only-child
4 :nth-child(n) 匹配任意位置的子元素 div :nth-child(n)
5 :nth-last-child(n) 匹配倒数任意位置的子元素 div :nth-last-child(n)
匹配第一个子元素案例
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > :first-child {
  24. background-color: rgb(235, 138, 135);
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div>
  30. <h1>1</h1>
  31. <h1>2</h1>
  32. <h1>3</h1>
  33. <h1>4</h1>
  34. <h1>5</h1>
  35. <h1>6</h1>
  36. <h2>css</h2>
  37. <h3>php</h3>
  38. </div>
  39. <div class="container">
  40. <div class="item">1</div>
  41. <div class="item">2</div>
  42. <div class="item">3</div>
  43. <div class="item">4</div>
  44. <div class="item">5</div>
  45. <div class="item">6</div>
  46. <div class="item">7</div>
  47. <div class="item">8</div>
  48. <div class="item">9</div>
  49. </div>
  50. </body>
  51. </html>
匹配最后一个子元素案例
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > :last-child {
  24. background-color: rgb(235, 138, 135);
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div>
  30. <h1>1</h1>
  31. <h1>2</h1>
  32. <h1>3</h1>
  33. <h1>4</h1>
  34. <h1>5</h1>
  35. <h1>6</h1>
  36. <h2>css</h2>
  37. <h3>php</h3>
  38. </div>
  39. <div class="container">
  40. <div class="item">1</div>
  41. <div class="item">2</div>
  42. <div class="item">3</div>
  43. <div class="item">4</div>
  44. <div class="item">5</div>
  45. <div class="item">6</div>
  46. <div class="item">7</div>
  47. <div class="item">8</div>
  48. <div class="item">9</div>
  49. </div>
  50. </body>
  51. </html>
选择元素的唯一子元素
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. /* 选择元素的唯一子元素 */
  24. h1:only-child {
  25. background-color: springgreen;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div>
  31. <h1>1</h1>
  32. <h1>2</h1>
  33. <h1>3</h1>
  34. <h1>4</h1>
  35. <h1>5</h1>
  36. <h1>6</h1>
  37. <h2>css</h2>
  38. <h3>php</h3>
  39. </div>
  40. <div>
  41. <h1>mysql</h1>
  42. </div>
  43. <div class="container">
  44. <div class="item">1</div>
  45. <div class="item">2</div>
  46. <div class="item">3</div>
  47. <div class="item">4</div>
  48. <div class="item">5</div>
  49. <div class="item">6</div>
  50. <div class="item">7</div>
  51. <div class="item">8</div>
  52. <div class="item">9</div>
  53. </div>
  54. </body>
  55. </html>
匹配任意位置子元素
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > .item:nth-child(5) {
  24. background-color: tomato;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="container">
  30. <div class="item">1</div>
  31. <div class="item">2</div>
  32. <div class="item">3</div>
  33. <div class="item">4</div>
  34. <div class="item">5</div>
  35. <div class="item">6</div>
  36. <div class="item">7</div>
  37. <div class="item">8</div>
  38. <div class="item">9</div>
  39. </div>
  40. </body>
  41. </html>
匹配倒数任意位置的子元素
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > .item:nth-last-child(2) {
  24. background-color: tomato;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="container">
  30. <div class="item">1</div>
  31. <div class="item">2</div>
  32. <div class="item">3</div>
  33. <div class="item">4</div>
  34. <div class="item">5</div>
  35. <div class="item">6</div>
  36. <div class="item">7</div>
  37. <div class="item">8</div>
  38. <div class="item">9</div>
  39. </div>
  40. </body>
  41. </html>
选择偶数子元素
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > .item:nth-of-type(2n) {
  24. background-color: tomato;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="container">
  30. <div class="item">1</div>
  31. <div class="item">2</div>
  32. <div class="item">3</div>
  33. <div class="item">4</div>
  34. <div class="item">5</div>
  35. <div class="item">6</div>
  36. <div class="item">7</div>
  37. <div class="item">8</div>
  38. <div class="item">9</div>
  39. </div>
  40. </body>
  41. </html>
选择奇数子元素
  • 截图如下
  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>上下文选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. .container > .item:nth-of-type(2n-1) {
  24. background-color: tomato;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="container">
  30. <div class="item">1</div>
  31. <div class="item">2</div>
  32. <div class="item">3</div>
  33. <div class="item">4</div>
  34. <div class="item">5</div>
  35. <div class="item">6</div>
  36. <div class="item">7</div>
  37. <div class="item">8</div>
  38. <div class="item">9</div>
  39. </div>
  40. </body>
  41. </html>

3.1.2 分组匹配

序号 选择器 描述 举例
1 :first-of-type 匹配按类型分组后的第一个子元素 div :first-of-type
2 :last-of-type 匹配按类型分组后的最后一个子元素 div :last-of-type
3 :only-of-type 匹配按类型分组后的唯一子元素 div :only-of-type
4 :nth-of-type() 匹配按类型分组后的任意位置的子元素 div :nth-of-type(n)
5 :nth-last-of-type() 匹配按类型分组后倒数任意位置的子元素 div :nth-last-of-type(n)
  • 允许使用表达式来匹配一组元素,表达式中的”n”是从”0”开始计数,且必须写到前面
  • “-n”表示获取前面一组元素,正数表示从指定位置获取余下元素

  • 分组选择器

  • 截图如下

  • 代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>分组选择器案例</title>
  7. <style>
  8. /* 后代选择器 */
  9. .container {
  10. width: 300px;
  11. height: 300px;
  12. display: grid;
  13. grid-template-columns: repeat(3, 1fr);
  14. gap: 5px;
  15. }
  16. .item {
  17. font-size: 2rem;
  18. background-color: lightblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. /* 选择当前分组的第一个元素 */
  24. .container > span:first-of-type {
  25. background-color: tomato;
  26. }
  27. /* 选择当前分组的最后一个元素 */
  28. /* 选择的是div的最后一个元素哦 */
  29. .container div:last-of-type {
  30. background: #0080ff;
  31. }
  32. /* 选择分组后的唯一子元素 */
  33. div h1:only-of-type {
  34. color: turquoise;
  35. }
  36. /* 选择当前分组span的第三个元素也就是 7 */
  37. .container span:nth-of-type(3) {
  38. background-color: teal;
  39. }
  40. /* 选择当前分组span的倒数第二个元素 */
  41. .container span:nth-last-of-type(2) {
  42. background-color: yellowgreen;
  43. }
  44. </style>
  45. </head>
  46. <body>
  47. <div>
  48. <h1>选择器</h1>
  49. </div>
  50. <div class="container">
  51. <div class="item">1</div>
  52. <div class="item">2</div>
  53. <div class="item">3</div>
  54. <div class="item">4</div>
  55. <!-- 分为2组 -->
  56. <span class="item">5</span>
  57. <span class="item">6</span>
  58. <span class="item">7</span>
  59. <span class="item">8</span>
  60. <span class="item">9</span>
  61. </div>
  62. </body>
  63. </html>

3.3 其它伪类

序号 选择器 描述
1 :active 向被激活的元素添加样式
2 :focus 向拥有键盘输入焦点的元素添加样式
3 :hover 当鼠标悬浮在元素上方时,向元素添加样式
4 :link 向未被访问的链接添加样式
5 :visited 向已被访问的链接添加样式
5 :root 根元素,通常是html
5 :empty 选择没有任何子元素的元素(含文本节点)
5 :not() 排除与选择器参数匹配的元素

总结

  • n 表达式(-n + 3)就是获取前 3 个,(n + 4)就是获取从 4 个开始后面全部
  • 偶数是 even=2n ,奇数是 add=2n-1
  • 没想到 css 还可以用这样的方式来写,感觉好牛逼的样子
  • css 选择器 class id 这些是简单的,不高级,伪类选择器,以前都没有听说过,写完感觉也没有多难,主要是那些单词得记住
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:这些都是选择器中最基础的部分了, 如果你是第一次用, 说明你之前学的多么的表面, 现在把自己定位在开发者角度来看
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
昊天 2020-04-14 13:33:04
好的 谢谢老师
1 floor
Author's latest blog post