在这篇文章中你能看到有关于 CSS 选择器的相关内容

1、基本选择器

(1)元素选择器

这里所说的元素,其实就是我们常说的 HTML 元素,我们可以通过元素选择器为指定类型的 HTML 元素设置样式

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 为了展示方便,这里使用内部样式表指定元素样式 -->
  5. <style>
  6. /* 指定 <body> 标签内的文字颜色为灰色 */
  7. body { color: gray; }
  8. /* 指定 <h1> 标签内的文字颜色为菊蓝色 */
  9. h1 { color: cornflowerblue; }
  10. </style>
  11. </head>
  12. <body>
  13. <h1>Title Here</h1> <!-- 字体颜色为菊蓝色 -->
  14. <p>Paragraph Here</p> <!-- 字体颜色为灰色 -->
  15. </body>
  16. </html>
  • 覆盖与继承

根据 CSS 规则,子元素将会 继承 父元素所拥有的样式【重要】

也就是说,当我们给 <body> 元素定义 color 为 gray 时,子元素 <h1> 和 <p> 的 color 也为 gray

然而,重新定义的子元素样式将会 覆盖 继承的样式【重要】

也就是说,当我们给 <h1> 元素定义 color 为 cornflowerblue 时,它会覆盖 color 为 gray 的样式设置

  • 选择器分组

现在考虑这样一个问题,假如我们需要将所有的标题都变成菊蓝色,那么我们可以像下面这样定义样式表:

  1. h1 { color: cornflowerblue; }
  2. h2 { color: cornflowerblue; }
  3. h3 { color: cornflowerblue; }
  4. h4 { color: cornflowerblue; }
  5. h5 { color: cornflowerblue; }
  6. h6 { color: cornflowerblue; }

这样的定义虽然清晰易懂,但是未免也太过于繁琐,所以我们可以将其合并写成下面的形式:

  1. h1,h2,h3,h4,h5,h6 { color: cornflowerblue; }

这样的写法我们称为 选择器分组,把所有具有相同声明的元素放在一起,从而使得定义更加简洁

  • 声明分组

既然我们可以对选择器进行分组,那么我们也可以对样式声明进行分组吗?答案是肯定的!

还是考虑这样一个问题,假如我们要让段落的背景颜色变成黑色且字体颜色变成白色,那么一个简单的声明如下:

  1. p { background: black; }
  2. p { color: white; }

这样可以吗?当然可以,但是当声明增多时,也同样太过于繁琐

所以我们可以将同一个元素的声明合并在一起,这样的写法我们称为 声明分组

  1. p {
  2. background: black;
  3. color: white;
  4. }

(2)类选择器

类选择器根据 class 属性的值选择特定元素,只需要在类名前加上一个点号( . )即可

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用类选择器 -->
  5. <style>
  6. .important { color: cornflowerblue; }
  7. </style>
  8. </head>
  9. <body>
  10. <!-- 在 HTML 中指定类名 -->
  11. <h1 class="important">这是一个重要的标题</h1> <!-- 字体颜色为菊蓝色 -->
  12. <h1>这是一个标题</h1> <!-- 字体颜色为黑色 -->
  13. <p class="important">这是一个重要的段落</p> <!-- 字体颜色为菊蓝色 -->
  14. <p>这是一个段落</p> <!-- 字体颜色为黑色 -->
  15. </body>
  16. </html>

(3)id 选择器

id 选择器根据 id 属性的值选择特定元素,只需要在 id 前加上一个井号( # )即可

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用 id 选择器 -->
  5. <style>
  6. #important { color: cornflowerblue; }
  7. </style>
  8. </head>
  9. <body>
  10. <!-- 在 HTML 中指定 id -->
  11. <h1>这是一个标题</h1> <!-- 字体颜色为黑色 -->
  12. <p id="important">这是一个重要的段落</p> <!-- 字体颜色为菊蓝色 -->
  13. </body>
  14. </html>

2、层次选择器

(1)后代选择器

后代选择器可以帮助我们选择某个元素的 所有后代元素,一般的语法规则如下:

  1. selector1 selector2 {
  2. property: value;
  3. ...
  4. }

上面的语法表示只选择 selector1 中的后代元素 selector2,而对一般的 selector2 不起作用

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用后代选择器 -->
  5. <style>
  6. p span {
  7. color: blue;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h1>我是标题,<span>没有变成蓝色</span></h1>
  13. <p>我是段落,<span>变成蓝色</span></p>
  14. </body>
  15. </html>

(2)子代选择器

与后代选择器相比,子代选择器只对某个元素的 所有子代元素 起作用,一般的语法规则如下:

  1. selector1 > selector2 {
  2. property: value;
  3. ...
  4. }

上面的语法表示只选择 selector1 中的子代元素 selector2,而对一般的 selector2 不起作用

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用子代选择器 -->
  5. <style>
  6. p > strong {
  7. color: red;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <p>这是段落,<strong>变成红色</strong></p>
  13. <p>这是段落,<span>这是强调,<strong>没有变成红色</strong></span></p>
  14. </body>
  15. </html>

(3)通用兄弟选择器

通用兄弟选择器可以帮助我们选择 在某个元素之后的所有兄弟元素,一般的语法规则如下:

  1. selector1 ~ selector2 {
  2. property: value;
  3. ...
  4. }

上面的语法表示只选择在 selector1 之后的所有兄弟元素 selector2,而对一般的 selector2 不起作用

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用通用兄弟选择器 -->
  5. <style>
  6. h1 ~ p {
  7. color: green;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h1>这是一个标题,不会变成绿色</h1>
  13. <p>这是一个段落,将会变成绿色</p>
  14. <h3>这是一个副标题,不会变成绿色</h3>
  15. <p>这是另一个段落,将会变成绿色</p>
  16. </body>
  17. </html>

(4)相邻兄弟选择器

与通用兄弟选择器相比,相邻兄弟选择器只对 在某个元素之后的下一个兄弟元素 起作用,一般的语法规则如下:

  1. selector1 + selector2 {
  2. property: value;
  3. ...
  4. }

上面的语法表示只选择在 selector1 之后的下一个兄弟元素 selector2,而对一般的 selector2 不起作用

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <!-- 在 CSS 中使用相邻兄弟选择器 -->
  5. <style>
  6. h1 + p {
  7. color: yellow;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h1>这是一个标题,不会变成黄色</h1>
  13. <p>这是一个段落,将会变成黄色</p>
  14. <h3>这是一个副标题,不会变成黄色</h3>
  15. <p>这是另一个段落,不会变成黄色</p>
  16. </body>
  17. </html>

3、属性选择器

属性选择器允许根据 元素的属性和属性值 来选择元素,它的基本语法如下:

  1. selector[属性选择器][...] {
  2. property: value;
  3. ...
  4. }

属性选择器的取值如下:

属性选择器 描述
attribute 选择具有指定属性的元素
attribute=value 选择具有指定属性且属性值为 value 的元素
attribute*=value 选择具有指定属性且属性值中包含 value 的元素
attribute^=value 选择具有指定属性且属性值以 value 开头的元素
attribute$=value 选择具有指定属性且属性值以 value 结尾的元素
attribute~=value 选择具有指定属性且属性值中包含指定词汇 value 的元素
attribute|=value 选择具有指定属性且属性值中以指定词汇 value 开头的元素

其中,*=~=^=|= 之间的区别仅仅在于 “词汇” 二字,它表示什么意思呢?

“词汇” 是指 独立的 字符串,意思就是这段字符串的前后不能出现除 - 之外的其它符号,否则不能匹配

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style>
  5. a[href^="http"] { font-size: 32px; } /* 可以匹配 */
  6. a[href|="http"] { font-size: 10px; } /* 不能匹配 */
  7. a[href*="exam"] { font-weight: 800; } /* 可以匹配 */
  8. a[href~="exam"] { font-weight: 200; } /* 不能匹配 */
  9. a[href$=".com"] { text-decoration: none; } /* 可以匹配 */
  10. </style>
  11. </head>
  12. <body>
  13. <a href="https://www.example.com">空的链接</p>
  14. </body>
  15. </html>

4、伪元素

伪元素(pseudo-element)可以向某些选择器设置特殊的效果,基本语法如下:

  1. selector::pseudo-element {
  2. property: value;
  3. ...
  4. }

常见的伪元素如下:

伪元素 描述
first-letter 向文本的第一个字添加特殊样式,只能用于块级元素
first-line 向文本的第一个行添加特殊样式,只能用于块级元素
before 在元素之前添加特殊样式
after 在元素之后添加特殊样式
selection 对选中文本添加特殊样式

一个简单的例子如下:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style>
  5. p::first-letter { font-size: xx-large; }
  6. </style>
  7. </head>
  8. <body>
  9. <p>这是一个段落,很长很长的段落</p>
  10. <p>然后这是另外一个段落,也是很长很长的段落</p>
  11. </body>
  12. </html>

利用伪元素,我们还可以用一个元素画出五角星,例子如下:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style>
  5. .star {
  6. width: 0px;
  7. height: 0px;
  8. border-bottom: 9.51px solid yellow;
  9. border-left: 3.09px solid transparent;
  10. border-right: 3.09px solid transparent;
  11. position: relative;
  12. }
  13. .star::before, .star::after {
  14. content: "";
  15. width: 0px;
  16. height: 0px;
  17. border-bottom: 9.51px solid yellow;
  18. border-left: 13.09px solid transparent;
  19. border-right: 13.09px solid transparent;
  20. }
  21. .star::before {
  22. transform: rotate(-36deg);
  23. position: absolute;
  24. top: 8.6px;
  25. left: -13.3852px;
  26. }
  27. .star::after {
  28. transform: rotate(36deg);
  29. position: absolute;
  30. top: 8.6px;
  31. left: -12.7948px;
  32. }
  33. </style>
  34. </head>
  35. <body>
  36. <div class="star"></div>
  37. </body>
  38. </html>

5、伪类

伪类(pseudo-class)可以向某些选择器添加特殊的效果,其基本语法如下:

  1. selector:pseudo-class {
  2. property: value;
  3. ...
  4. }

(1)动态伪类选择器

语法 描述
link 选择未被访问的锚点元素
visited 选择已被访问的锚点元素
hover 选择鼠标悬浮的元素
active 选择已被激活的元素
focus 选择获得焦点的元素

一个例子如下:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style>
  5. /* a:hover 必须置于 a:link 和 a:visited 之后 */
  6. /* a:active 必须置于 a:hover 之后 */
  7. a:link { color: red } /* 未访问的链接显示红色 */
  8. a:visited { color: green } /* 已访问的链接显示绿色 */
  9. a:hover { color: blue } /* 鼠标移动到链接上显示蓝色 */
  10. a:active { color: yellow } /* 选定的链接显示黄色 */
  11. </style>
  12. </head>
  13. <body>
  14. <a href="https://www.baidu.com/">百度链接</a>
  15. </body>
  16. </html>

(2)元素状态伪类选择器

语法 描述
checked 选择已被选中的按钮元素
enabled 选择启用的表单元素
disabled 选择禁用的表单元素

一个例子如下:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <style>
  5. input:checked + span { color: cornflowerblue; }
  6. </style>
  7. </head>
  8. <body>
  9. <form action="#">
  10. <label><input type="checkbox" value="apple" /><span>Apple</span></label>
  11. <label><input type="checkbox" value="orange" /><span>Orange</span></label>
  12. <label><input type="checkbox" value="pear" /><span>Peer</span></label>
  13. </form>
  14. </body>
  15. </html>

(3)结构伪类选择器

语法 描述
first-child 选择作为父元素的第 1 个子元素的元素
nth-child(n) 选择作为父元素的第 n 个子元素的元素
last-child 选择作为父元素的最后一个子元素的元素
only-child 选择作为父元素的唯一一个子元素的元素
first-of-type 选择作为父元素内具有指定类型的第 1 个子元素
nth-of-type(n) 选择作为父元素内具有指定类型的第 n 个子元素
last-of-type 选择作为父元素内具有指定类型的最后一个子元素
only-of-type 选择作为父元素内具有指定类型的唯一一个子元素
root 选择作为根元素的元素,例如 html:root
empty 选择没有子元素的元素

一个例子如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. h1:only-child {
  6. color: deepskyblue;
  7. }
  8. h3:first-child {
  9. color: skyblue;
  10. }
  11. p:last-child {
  12. color: lightskyblue;
  13. }
  14. span:last-child {
  15. color: lightblue;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div class="header">
  21. <h1>Hello</h1>
  22. </div><hr/>
  23. <div class="section">
  24. <h3>Eternity in an hour</h3>
  25. <p>To see a world in a grain of sand,</p>
  26. <p>And a heaven in a wild flower,</p>
  27. <p>Hold infinity in the palm of your hand,</p>
  28. <p>And eternity in an hour.</p>
  29. </div><hr/>
  30. <div class="footer">
  31. <h3>Hello World</h3>
  32. <p>Say Hello To Tomorrow</p>
  33. <p>Say Goodbye To Yesterday</p>
  34. <span>Thank you for listening</span>
  35. </div>
  36. </body>
  37. </html>

(4)目标伪类选择器

语法 描述
target 被指定 URL 指向的元素

一个例子如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. * { margin: 0; padding: 0; }
  6. a { color: rgba(245, 245, 245, 0.8); text-decoration: none; }
  7. a:link, a:visited, a:hover, a:active { text-decoration: none; }
  8. .menu {
  9. list-style-type: none;
  10. overflow: hidden;
  11. }
  12. .menu > li {
  13. float: left;
  14. width: 100px;
  15. height: 25px;
  16. border: 0.1px solid lightskyblue;
  17. background-color: cornflowerblue;
  18. }
  19. .menu > li:hover {
  20. background-color: lightskyblue;
  21. }
  22. .content {
  23. list-style-type: none;
  24. position: relative;
  25. }
  26. .content > li {
  27. position: absolute;
  28. }
  29. .poem {
  30. width: 400px;
  31. height: 80px;
  32. color: rgba(255, 255, 255, 0.8);
  33. border: 0.5px solid lightskyblue;
  34. background-color: cornflowerblue;
  35. }
  36. #spring { z-index: 4; }
  37. #summer { z-index: 3; }
  38. #autumn { z-index: 2; }
  39. #winter { z-index: 1; }
  40. #spring:target { z-index: 5; }
  41. #summer:target { z-index: 5; }
  42. #autumn:target { z-index: 5; }
  43. #winter:target { z-index: 5; }
  44. .flex {
  45. display: flex;
  46. flex-direction: row;
  47. justify-content: center;
  48. align-items: center;
  49. }
  50. </style>
  51. </head>
  52. <body>
  53. <ul class="menu">
  54. <li class="flex"><a href="#spring"></a></li>
  55. <li class="flex"><a href="#summer"></a></li>
  56. <li class="flex"><a href="#autumn"></a></li>
  57. <li class="flex"><a href="#winter"></a></li>
  58. </ul>
  59. <ul class="content">
  60. <li id="spring"><div class="flex poem">春游芳草地</div></li>
  61. <li id="summer"><div class="flex poem">夏赏绿荷池</div></li>
  62. <li id="autumn"><div class="flex poem">秋饮黄花酒</div></li>
  63. <li id="winter"><div class="flex poem">冬吟白雪诗</div></li>
  64. </ul>
  65. </body>
  66. </html>

(5)否定伪类选择器

语法 描述
not(selector) 排除符合要求的元素

一个例子如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. p:not(.important) { color: gray; }
  6. </style>
  7. </head>
  8. <body>
  9. <p>我是一个段落</p>
  10. <p class="important">我是一个重要的段落</p>
  11. </body>
  12. </html>

【 阅读更多 CSS 系列文章,请看 CSS学习笔记

CSS学习笔记之选择器的更多相关文章

  1. CSS学习笔记(1):选择器

    一.元素选择器 HTML文档元素就是最基本的选择器 如: <!DOCTYPE html> <html lang="en"> <head> < ...

  2. CSS学习笔记之基本介绍

    1.简介 层叠样式表(Cascading Style Sheets,CSS)允许我们把样式设置存储在文件中,从而将内容与表现分离 当同一个 HTML 元素被不只一个样式定义时,最终的样式确定顺序如下( ...

  3. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  4. HTML+CSS学习笔记 (6) - 开始学习CSS

    HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...

  5. CSS学习笔记08 浮动

    从CSS学习笔记05 display属性一文中,我们知道div是块元素,会独占一行,即使div的宽度很小,像下面这样 应用display属性的inline属性可以让div与div共享一行,除了这种方法 ...

  6. JQuery学习笔记——层级选择器

    JQuery学习笔记--层级选择器 上一篇学习了基础的五种选择,分别是id选择器,class选择器,element选择器,*选择器 和 并列选择器.根据手册大纲,这篇学习的是层级选择器. 选择器: 1 ...

  7. 2022-07-10 第五小组 pan小堂 css学习笔记

    css学习笔记 什么是 CSS? CSS 指的是层叠样式表* (Cascading Style Sheets) CSS 描述了如何在屏幕.纸张或其他媒体上显示 HTML 元素 CSS 节省了大量工作. ...

  8. HTML+CSS学习笔记 (7) - CSS样式基本知识

    HTML+CSS学习笔记 (7) - CSS样式基本知识 内联式css样式,直接写在现有的HTML标签中 CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌 ...

  9. HTML+CSS学习笔记(5)- 与浏览者交互,表单标签

    HTML+CSS学习笔记(5)- 与浏览者交互,表单标签 1.使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务 ...

随机推荐

  1. SQL LEN() 函数 ,case when,聚合函数的使用方法

    SELECT aa.[User_Id],cc.[User_Name],dd.Name AS DepName,aa.Module_Id,aa.Module_Name, SUM(CASE aa.Opera ...

  2. 使用butterknife注解project配置

    使用butterknife注解的时候建议使用Jar包 Jar包下载地址:https://github.com/JakeWharton/butterknife Eclipseproject配置: 步骤一 ...

  3. 转:java身份证格式强校验

    package com.dsh.zealandweb.utils; import java.util.HashSet; import java.util.regex.Pattern; import o ...

  4. jQuery - 选中复选框则弹出提示框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. tflearn中计算混淆矩阵方法——需要经过一步转换

    def do_rnn_wordbag(trainX, testX, trainY, testY): y_test=testY #trainX = pad_sequences(trainX, maxle ...

  6. 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall(二分图)

    P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...

  7. Unity中内嵌网页插件UniWebView

    一.常见Unity中内嵌网页实现方式: 1.UnityWebCore只支持windows 2.Unity-Webview支持Android,IOS 3.UniWebView支持mac os,Andro ...

  8. 2-SAT的小总结(POJ 3683 POJ 3207)

    记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0&l ...

  9. Spring Boot (15) pom.xml设置

    继承spring-boot-parent 要成为一个spring boot项目,首先就必须在pom.xml中继承spring-boot-starter-parent,同时制定其版本 <paren ...

  10. css3中的box-sizing属性的使用

    box-sizing属性用来定义元素的width和height所表示的区域,该属性一般有三种值:content-box.border-box.inherit. 其中inherit表示box-sizin ...