Blogger Information
Blog 60
fans 5
comment 3
visits 65301
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
CSS选择器的应用
longlong
Original
819 people have browsed it

1. CSS选择器的意义

为了对HTML中的元素实现一对一、一对多或者多对一的控制,我们需要用到CSS选择器,学习它,能够很好的对HTML中元素的样式进行控制,让页面变得更加美观,清晰,也能让我们的代码页面变得更加简洁,可读性更高!

2. 选择的分类

根据选择器自身的特征,大致分为以下几类:

  • 简单选择器

  • 上下文选择器

  • 结构伪类选择器(不分组)

  • 结构伪类选择器(分组)

  • 伪类与伪元素选择器

2.1 简单选择器

  • 元素选择器,也称为标签选择器,如果设置 HTML 的样式,选择器通常将是某个 HTML 元素,比如 p、h1、em、a,甚至可以是 html 本身,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. p {
  5. color: red;
  6. }
  7. h2 {
  8. background-color: lightblue;
  9. }
  10. </style>
  11. <body>
  12. <div class="container">
  13. <p>我是一个段落</p>
  14. <h2>我是一个二级标题</h2>
  15. </div>
  16. </body>
  17. </html>

  • 类选择器:对应标签中的class属性,以 .class 的方式使用,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .title {
  5. color: blue;
  6. }
  7. </style>
  8. <body>
  9. <div class="container">
  10. <p>我是一个段落</p>
  11. <h2 class="title">我是一个二级标题</h2>
  12. </div>
  13. </body>
  14. </html>

  • 多类选择器:一个 class 值中可能包含一个词列表,各个词之间用空格分隔。如果有时候我们需要让一个元素同时包含两种样式,会需要用到它,示例如下:
  1. /* 第一个P和第三个P都会被应用 */
  2. .first {
  3. font-size: 30px;
  4. }
  5. /* 第二个P和第三个P都会被应用 */
  6. .second {
  7. color: red;
  8. }
  9. /* 只会应用第三个P */
  10. .first.second {
  11. background-color: gray;
  12. }
  13. </style>
  14. <body>
  15. <div class="container">
  16. <p class="first">我有一个class属性,值为first</p>
  17. <p class="second">我有一个class属性,值为second</p>
  18. <p class="first second">
  19. 我有一个class属性,但是有两个值,分别为first和second
  20. </p>
  21. </div>
  22. </body>
  23. </html>

  • id选择器:ID 选择器前面有一个 # 号,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. #first {
  5. font-size: 50px;
  6. color: red;
  7. }
  8. #second {
  9. font-size: 50px;
  10. color: blue;
  11. }
  12. </style>
  13. <body>
  14. <div class="container">
  15. <p id="first">段落一</p>
  16. <p id="second">段落二</p>
  17. <p>段落三</p>
  18. </div>
  19. </body>
  20. </html>

在实际开发中,id选择器用得不多,现阶段主要应用与表单元素锚点

2.2 上下文选择器

  • 后代选择器:也称为包含选择器,之间的关系可以是父子级,孙子级,再孙子级都可以,只要是后代都行,中间用空格隔开,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container div {
  5. color: lightcoral;
  6. font-size: 40px;
  7. }
  8. </style>
  9. <body>
  10. <div class="container">
  11. <div>
  12. 这是大山
  13. <div>
  14. 这是石头
  15. <div>
  16. 这是石子
  17. <div>
  18. 这是沙子
  19. </div>
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. </body>
  25. </html>

  • 子元素选择器:之间只能是父子关系,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container > p {
  5. background-color: lightpink;
  6. font-size: 40px;
  7. }
  8. </style>
  9. <body>
  10. <div class="container">
  11. <p>这是一个段落</p>
  12. <div>
  13. <p>我也是一个段落</p>
  14. </div>
  15. </div>
  16. </body>
  17. </html>

  • 同级相邻选择器:如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器,用 + 号表示,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container > p + div {
  5. background-color: lightpink;
  6. font-size: 40px;
  7. }
  8. </style>
  9. <body>
  10. <div class="container">
  11. <p>这是一个段落</p>
  12. <div>
  13. <p>我也是一个段落</p>
  14. </div>
  15. <div>
  16. <p>我又是一个段落</p>
  17. </div>
  18. </div>
  19. </body>
  20. </html>

  • 同级所有选择器:表示选取元素之后的所有同辈元素,用 ~ 号表示,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container > p ~ div {
  5. background-color: lightpink;
  6. font-size: 25px;
  7. }
  8. </style>
  9. <body>
  10. <div class="container">
  11. <p>这是一个段落</p>
  12. <div>div1</div>
  13. <div>div2</div>
  14. <div>div3</div>
  15. <div>div4</div>
  16. <div>div5</div>
  17. </div>
  18. </body>
  19. </html>

2.3 结构伪类选择器(不分组)

  • :first-child :匹配第一个子元素,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container > p:first-child {
  5. background-color: lightskyblue;
  6. }
  7. </style>
  8. <body>
  9. <div class="container">
  10. <p>段落1</p>
  11. <p>段落2</p>
  12. <p>段落3</p>
  13. <p>段落4</p>
  14. <p>段落5</p>
  15. </div>
  16. </body>
  17. </html>

  • :last-child:匹配最后一个子元素,示例如下:
  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. .container > p:last-child {
  5. background-color: lightskyblue;
  6. }
  7. </style>
  8. <body>
  9. <div class="container">
  10. <p>段落1</p>
  11. <p>段落2</p>
  12. <p>段落3</p>
  13. <p>段落4</p>
  14. <p>段落5</p>
  15. </div>
  16. </body>
  17. </html>

  • :nth-child(n):这里的n表示索引,从1开始

  • :nth-child(an+b):这里的n表示一个参数,从0,1,2,3,…,到无穷大

  • :nth-child(even):表示取索引为偶数的子元素,索引从1开始

  • :nth-child(odd):表示取索引为奇数的子元素,索引从1开始

  • :nth-child(n + m):n是参数,从0开始,表示取从索引为m的子元素开始到最后面的元素

  • :nth-child(-n + m):n是参数,从0开始,表示取从索引为m的子元素开始到最前面的元素

  • :nth-last-child(n):取倒数第n个子元素,n表示索引,从1开始,其他表达式的用法和:nth-child是一样的

示例如下:

  1. <html lang="en">
  2. <head> </head>
  3. <style>
  4. /* 取索引为1的子元素,就是第一行 */
  5. .container > :nth-child(1) {
  6. /* background-color: lightskyblue; */
  7. }
  8. /* 取索引为2,5,8的子元素 */
  9. .container > :nth-child(3n + 2) {
  10. /* background-color: limegreen; */
  11. }
  12. /* 取偶数行 */
  13. .container > :nth-child(even) {
  14. /* background-color: magenta; */
  15. }
  16. /* 取奇数行 */
  17. .container > :nth-child(odd) {
  18. /* background-color: mediumslateblue; */
  19. }
  20. /* 取从索引为5开始到最后面的元素 */
  21. .container > :nth-child(n + 5) {
  22. /* background-color: mediumspringgreen; */
  23. }
  24. /* 取从索引为3开始到最前面的元素 */
  25. .container > :nth-child(-n + 3) {
  26. /* background-color: olive; */
  27. }
  28. /* 取倒数第三个元素 */
  29. .container > :nth-last-child(3) {
  30. /* background-color: orangered; */
  31. }
  32. /* 取最后4个元素 */
  33. .container > :nth-last-child(-n + 4) {
  34. background-color: paleturquoise;
  35. }
  36. </style>
  37. <body>
  38. <div class="container">
  39. <p>paragraph1</p>
  40. <p>paragraph2</p>
  41. <p>paragraph3</p>
  42. <p>paragraph4</p>
  43. <p>paragraph5</p>
  44. <p>paragraph6</p>
  45. <p>paragraph7</p>
  46. <p>paragraph8</p>
  47. <p>paragraph9</p>
  48. <p>paragraph10</p>
  49. </div>
  50. </body>
  51. </html>

2.4 结构伪类选择器(分组)

分组结构伪类分两步:

  1. 元素按类型进行分组

  2. 在分组中根据索引进行选择

  • :nth-of-type(n):在分组中匹配索引为n的元素,n从1开始

  • :nth-last-of-type(n):在分组中匹配索引为倒数第n个元素,n从1开始

示例如下:

  1. <html lang="en">
  2. <head></head>
  3. <style>
  4. /* 在子元素div中匹配索引为2的元素 */
  5. .container div:nth-of-type(2) {
  6. background-color: palevioletred;
  7. }
  8. /* 在子元素p中匹配索引为2的元素 */
  9. .container p:nth-of-type(2) {
  10. background-color: peru;
  11. }
  12. /* 在子元素div中匹配最后一个元素 */
  13. .container div:nth-last-of-type(1) {
  14. background-color: purple;
  15. }
  16. /* 在子元素p中匹配倒数2个元素 */
  17. .container p:nth-last-of-type(-n + 2) {
  18. background-color: royalblue;
  19. }
  20. </style>
  21. <body>
  22. <div class="container">
  23. <p>paragraph1</p>
  24. <p>paragraph2</p>
  25. <p>paragraph3</p>
  26. <div>div1</div>
  27. <div>div2</div>
  28. <div>div3</div>
  29. <div>div4</div>
  30. <div>div5</div>
  31. <p>paragraph4</p>
  32. <p>paragraph5</p>
  33. </div>
  34. </body>
  35. </html>

2.4 伪类与伪元素

  • :target:必须与id配合,实现锚点操作

  • :focus:当获取焦点的时候

  • ::selection:一般用于设置选择文本的前景色和背景色

  • :not():用于选择不满足条件的元素

  • ::before:在元素前面加上什么内容,多与content一起使用

  • ::after:在元素后面加上什么内容,多与content一起使用

以下几个伪类多应用与a标签

  • :hover:光标移动到元素上时

  • :active:正在被激活时

  • :link:未被访问时

  • :visited:被访问过后

示例如下:

  1. <html lang="en">
  2. <head></head>
  3. <style>
  4. /* 先让表单隐藏起来 */
  5. #myform {
  6. display: none;
  7. }
  8. /* 利用:target,当鼠标点击按钮时,表单被激活,显示出来 */
  9. #myform:target {
  10. display: block;
  11. }
  12. /* 鼠标点击输入框,获得焦点时 */
  13. input:focus {
  14. background-color: salmon;
  15. }
  16. /* 在输入框中输入的文本被选中时 */
  17. input::selection {
  18. color: white;
  19. background-color: rgb(53, 45, 45);
  20. }
  21. /* 除了列表中的倒数第二个都改变背景色 */
  22. ul li:not(:nth-last-child(2)) {
  23. background-color: cadetblue;
  24. }
  25. /* 列表前加点内容 */
  26. ul::before {
  27. content: "我的列表";
  28. font-size: 30px;
  29. color: chocolate;
  30. }
  31. /* 列表后面加点内容 */
  32. ul::after {
  33. content: "速速抢购。。。";
  34. color: red;
  35. font-weight: bold;
  36. }
  37. a:link {
  38. color: coral;
  39. }
  40. a:hover {
  41. color: cornflowerblue;
  42. }
  43. a:active {
  44. color: darkgoldenrod;
  45. }
  46. a:visited {
  47. color: blue;
  48. }
  49. </style>
  50. <body>
  51. <h3>点击下方按钮完成登陆</h3>
  52. <!-- <a href="#myform">点我</a> -->
  53. <button onclick="location='#myform'">点我</button>
  54. <br />
  55. <br />
  56. <form id="myform">
  57. <label for="username">用户名:</label
  58. ><input type="text" name="username" id="username" />
  59. <label for="cipher">密码:</label
  60. ><input type="password" name="cipher" id="cipher" />
  61. <button>登录</button>
  62. </form>
  63. <hr />
  64. <ul>
  65. <li>list1</li>
  66. <li>list2</li>
  67. <li>list3</li>
  68. <li>list4</li>
  69. <li>list5</li>
  70. </ul>
  71. <hr />
  72. <br />
  73. <a href="#">我是一个超链接,点我试试</a>
  74. </body>
  75. </html>

3. 总结:

CSS选择器种类十分丰富,有部分选择器还有js功能,比如:target伪类选择器,我们必须要学会灵活运用它,在今后的开发设计中,运用好选择器,能够使HTML页面非常整洁,往往只需要一个class,就可以拿到页面所有的元素,然后对其进行各种层叠样式设置,这样不仅使代码的可读性更高,运行也更快

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
Author's latest blog post