博客列表 >CSS选择器的应用

CSS选择器的应用

longlong
longlong原创
2020年06月16日 12:10:17817浏览

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,就可以拿到页面所有的元素,然后对其进行各种层叠样式设置,这样不仅使代码的可读性更高,运行也更快

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议