Blogger Information
Blog 13
fans 0
comment 0
visits 11198
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
了解 CSS 选择器:简单选择器、上下文选择器、结构伪类选择器、伪类和伪元素
忠于原味
Original
595 people have browsed it

一、简单选择器

选择器名 符号 描述
元素选择器 某个 HTML 元素 比如 p、h1、em、a,甚至可以是 html 本身
类选择器 . 对应着 html 标签中的 class 属性
id 选择器 # 对应着 html 标签中的 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. /* 使用九宫格来演示: grid布局实现 */
  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: lightskyblue;
  19. display: flex;
  20. justify-content: center;
  21. align-items: center;
  22. }
  23. /* 简单选择器 */
  24. /* 元素选择器: 标签选择器 */
  25. body {
  26. background-color: lightcyan;
  27. }
  28. /* 类选择器: 对应着html标签中的class属性 */
  29. .item {
  30. border: 1px solid #000;
  31. }
  32. /* 多个类复合应用 */
  33. .item.center {
  34. background-color: lightgreen;
  35. }
  36. /* id选择器 */
  37. .item#first {
  38. background-color: lightpink;
  39. }
  40. /* 层叠样式表, 相同元素,后面追加的样式会覆盖前面的样式 */
  41. *#first {
  42. background-color: yellow;
  43. }
  44. #first.item {
  45. background-color: red;
  46. }
  47. /* * :属于元素级别
  48. 元素 < class < id */
  49. /* id,class可以添加到任何元素上,所以可以省略 */
  50. /* id 选择器的应用场景目前只有二种场景: 表单元素, 锚点 */
  51. </style>
  52. </head>
  53. <body>
  54. <div class="container">
  55. <div class="item" id="first">1</div>
  56. <div class="item">2</div>
  57. <div class="item">3</div>
  58. <div class="item">4</div>
  59. <div class="item center">5</div>
  60. <div class="item">6</div>
  61. <div class="item">7</div>
  62. <div class="item">8</div>
  63. <div class="item">9</div>
  64. </div>
  65. </body>
  66. </html>

效果预览:


二、上下文选择器

选择器名 符号 描述
后代选择器 空格 标签 1 标签 2,获取到标签 1 的所有叫标签 2 的元素
父子选择器 > 标签 1 > 标签 2,标签 2 必须是标签 1 的子元素。与其他常规的上下文选择符不同,这个选择符中的标签 1 不能使标签 2 的父元素之外的其他祖先元素
同级(相邻)兄弟选择器 + 标签 1 + 标签 2,标签 2 必须紧跟在其同胞标签 1 的后面
同级所有选择器 ~ 标签 1 ~ 标签 2,标签 2 必须在(不一定紧挨着)其同胞标签 1 后面

代码示例:

  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. </head>
  8. <style>
  9. /* 使用九宫格来演示: grid布局实现 */
  10. .container {
  11. width: 300px;
  12. height: 300px;
  13. display: grid;
  14. grid-template-columns: repeat(3, 1fr);
  15. gap: 5px;
  16. }
  17. .item {
  18. font-size: 2rem;
  19. background-color: lightskyblue;
  20. display: flex;
  21. justify-content: center;
  22. align-items: center;
  23. }
  24. /* 1.后代选择器 : 空格 */
  25. .container div {
  26. border: 1px solid red;
  27. }
  28. /* 2.父子选择器: > */
  29. body > div {
  30. border: 5px solid blue;
  31. }
  32. /* 3.同级相邻(兄弟)选择器 */
  33. .item.center + .item {
  34. border: 5px solid green;
  35. }
  36. /* 4.同级所有选择器 */
  37. .item.next ~ .item {
  38. border: 5px solid yellow;
  39. }
  40. </style>
  41. <body>
  42. <div class="container">
  43. <div class="item">1</div>
  44. <div class="item">2</div>
  45. <div class="item">3</div>
  46. <div class="item">4</div>
  47. <div class="item center">5</div>
  48. <div class="item next">6</div>
  49. <div class="item">7</div>
  50. <div class="item">8</div>
  51. <div class="item">9</div>
  52. </div>
  53. </body>
  54. </html>

效果预览:


三、结构伪类选择器

不分组(不区分元素类型) 分组(区分元素类型)
:first-child :first-of-type
:last-child :last-of-type
:nth-child(n) :nth-of-type()
:nth-last-child(n) :nth-last-of-tyle()

1.结构伪类选择器:不分组(不区分元素类型)实例代码:

  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. </head>
  8. <style>
  9. /* 使用九宫格来演示: grid布局实现 */
  10. .container {
  11. width: 300px;
  12. height: 300px;
  13. display: grid;
  14. grid-template-columns: repeat(3, 1fr);
  15. gap: 5px;
  16. }
  17. .item {
  18. font-size: 2rem;
  19. background-color: lightskyblue;
  20. display: flex;
  21. justify-content: center;
  22. align-items: center;
  23. }
  24. /* 1.匹配第一个子元素 */
  25. .container > *:first-child {
  26. /* background-color: lightgreen; */
  27. }
  28. .container > .item:first-child {
  29. /* background-color: blue; */
  30. }
  31. /* 2.匹配最后一个子元素 */
  32. .container > :last-child {
  33. /* background-color: blueviolet; */
  34. }
  35. /* 3.选第三个:索引从1开始 */
  36. .container > :nth-child(3) {
  37. /* background-color: lightgreen; */
  38. }
  39. /* n从0开始计算 */
  40. /* 4.只选择偶数单元格(4n)或(even) */
  41. .container > :nth-child(2n) {
  42. /* background-color: blue; */
  43. }
  44. /* 5.只选择奇数单元格(2n + 1)或(2n - 1)或(odd) */
  45. .container > :nth-child(odd) {
  46. /* background-color: green; */
  47. }
  48. /* 6.从指定位置(从第4个开始),选择器盛下的所有元素 */
  49. .container > .item:nth-child(n + 4) {
  50. /* background-color: greenyellow; */
  51. }
  52. /* 7.从指定位置(只取前三个),选择器盛下的所有元素 */
  53. .container > .item:nth-child(-n + 3) {
  54. /* background-color: brown; */
  55. }
  56. /* 8.从指定位置(取最后三个),选择器盛下的所有元素 */
  57. .container > .item:nth-last-child(-n + 3) {
  58. background-color: brown;
  59. }
  60. /* 9.取第8个,用倒数的方式更直观 */
  61. .container > .item:nth-last-child(2) {
  62. background-color: blue;
  63. }
  64. </style>
  65. <body>
  66. <div class="container">
  67. <div class="item">1</div>
  68. <div class="item">2</div>
  69. <div class="item">3</div>
  70. <div class="item">4</div>
  71. <div class="item">5</div>
  72. <div class="item">6</div>
  73. <div class="item">7</div>
  74. <div class="item">8</div>
  75. <div class="item">9</div>
  76. </div>
  77. </body>
  78. </html>

以上代码可根据注释一个一个测试结果!p

实现注释中 8,9 效果预览:

ps:优先级相同时后面的代码效果会覆盖上面的代码效果,所以我这里 8 的蓝色覆盖了原先 8 的深红色。

2.结构伪类选择器:分组(区分元素类型)实例代码:

  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. </head>
  8. <style>
  9. /* 使用九宫格来演示: grid布局实现 */
  10. .container {
  11. width: 300px;
  12. height: 300px;
  13. display: grid;
  14. grid-template-columns: repeat(3, 1fr);
  15. gap: 5px;
  16. }
  17. .item {
  18. font-size: 2rem;
  19. background-color: lightskyblue;
  20. display: flex;
  21. justify-content: center;
  22. align-items: center;
  23. }
  24. /* 分组结构伪类分二步
  25. 1.元素按类型进行分组
  26. 2.在分组中根据索引进行注释
  27. */
  28. /* 在分组中匹配最后一个 */
  29. .container div:last-of-type {
  30. background-color: yellow;
  31. }
  32. /* 在分组中匹配任何一个 */
  33. .container span:nth-of-type(3) {
  34. background-color: violet;
  35. }
  36. /* 在分组中匹配前3个 */
  37. .container span:nth-of-type(-n + 3) {
  38. background-color: blue;
  39. }
  40. /* 在分组中匹配最后2个 */
  41. .container span:nth-last-of-type(-n + 2) {
  42. background-color: red;
  43. }
  44. </style>
  45. <body>
  46. <div class="container">
  47. <div class="item">1</div>
  48. <div class="item">2</div>
  49. <div class="item">3</div>
  50. <span class="item">4</span>
  51. <span class="item">5</span>
  52. <span class="item">6</span>
  53. <span class="item">7</span>
  54. <span class="item">8</span>
  55. <span class="item">9</span>
  56. </div>
  57. </body>
  58. </html>

效果预览:


四、伪类与伪元素

伪类 描述
:target 必须配合 id ,实现锚点操作。
:focus 选择器选取当前具有焦点的元素
:not() 选择器选取除了指定元素以外的所有元素
伪元素 描述
::before 选择器向选定的元素之前插入内容,使用 content 属性来指定要插入的内容。
::after 选择器向选定的元素之后插入内容,使用 content 属性来指定要插入的内容。
::selection 选择器匹配元素中被用户选中或处于高亮状态的部分,只可以应用于少数的 CSS 属性:color, background, cursor,和 outline。

实例代码:

  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. #login-form {
  9. display: none;
  10. }
  11. /* :target: 必须配合id,实现锚点操作 */
  12. /* 当前#login-form的表单元素被a的锚点激活的时候执行 */
  13. #login-form:target {
  14. display: block;
  15. }
  16. /* :focus: 当前焦点的时候 */
  17. input:focus {
  18. background-color: #ccc;
  19. }
  20. /* ::selection 设置选中文本的前景色与背景色 */
  21. input::selection {
  22. color: white;
  23. background-color: red;
  24. }
  25. /* :not(): 用于选择不满足条件元素 */
  26. .list > li:not(:nth-of-type(3)) {
  27. color: red;
  28. }
  29. /* ::before */
  30. .list::before {
  31. content: "小单车";
  32. font-size: 1.5em;
  33. color: blue;
  34. border-bottom: 1px solid #000;
  35. }
  36. /* ::after */
  37. .list::after {
  38. content: "结算中。。。";
  39. font-size: 1.1em;
  40. color: red;
  41. }
  42. /* 伪元素前面双冒号,伪类前面单引号,伪元素选不中 */
  43. </style>
  44. </head>
  45. <body>
  46. <!-- <a href="#login-form">我要登录:</a> -->
  47. <button onclick="location='#login-form'">点击登录</button>
  48. <form action="" method="post" id="login-form">
  49. <label for="email">邮箱:</label>
  50. <input type="email" name="email" id="email" />
  51. <label for="email">密码:</label>
  52. <input type="password" name="password" id="password" />
  53. <button>登录</button>
  54. </form>
  55. <hr />
  56. <ul class="list">
  57. <li>item1</li>
  58. <li>item2</li>
  59. <li>item3</li>
  60. <li>item4</li>
  61. </ul>
  62. </body>
  63. </html>

效果预览:

ps:点击登录后显示表单。

Correcting teacher:WJWJ

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
0 comments