面试题:有哪些 CSS 选择器?请分别介绍

CSS 选择器是用于“选中”HTML元素并为其应用样式的模式。掌握各种选择器是精准控制页面样式的前提。以下是 CSS 中主要的选择器类型及其详细介绍。


一、基础选择器

1. 元素选择器(Type Selector)

  • 语法元素名
  • 作用:选中指定类型的所有 HTML 元素
  • 示例
p { color: blue; }     /* 所有 <p> 元素 */
  div { margin: 10px; }  /* 所有 <div> 元素 */

2. 类选择器(Class Selector)

  • 语法.类名
  • 作用:选中 class 属性包含指定类名的元素。一个元素可有多个类,一个类可被多个元素使用。
  • 示例
.highlight { background: yellow; }
  .btn.primary { color: white; } /* 同时有 btn 和 primary 类 */

3. ID 选择器(ID Selector)

  • 语法#ID名
  • 作用:选中 id 属性等于指定值的唯一元素(id 应全局唯一)。
  • 示例
#header { width: 100%; }
  #main-content { padding: 20px; }

4. 通配符选择器(Universal Selector)

  • 语法*
  • 作用:选中文档中所有元素
  • 用途:常用于重置样式或全局设置。
  • 示例
* { margin: 0; padding: 0; box-sizing: border-box; }

二、组合选择器(Combinators)

用于选择与其他元素有特定关系的元素。

1. 后代选择器(Descendant Combinator)

  • 语法A B
  • 作用:选中 A 元素内部的所有 B 元素(无论嵌套几层)。
  • 示例
div p { color: green; } /* div 内的所有 p 元素 */

2. 子元素选择器(Child Combinator)

  • 语法A > B
  • 作用:选中 A 元素的直接子元素 B(不包括孙子及更深层)。
  • 示例
ul > li { margin-left: 20px; } /* 只选 ul 的直接子 li */

3. 相邻兄弟选择器(Adjacent Sibling Combinator)

  • 语法A + B
  • 作用:选中紧跟在 A 元素后的第一个 B 元素(同级)。
  • 示例
h1 + p { font-size: 18px; } /* 紧跟在 h1 后的第一个 p */

4. 通用兄弟选择器(General Sibling Combinator)

  • 语法A ~ B
  • 作用:选中 A 元素之后的所有同级 B 元素
  • 示例
h1 ~ p { color: gray; } /* h1 之后的所有同级 p */

三、属性选择器(Attribute Selectors)

根据元素的属性或属性值进行选择。

语法作用示例
[attr]有指定属性的元素[href] { color: red; }
[attr=value]属性值完全匹配的元素[type="text"] { border: 1px solid; }
[attr~=value]属性值包含独立单词(空格分隔)[class~="btn"]
[attr|=value]属性值以 value 开头,且后跟 - 或结束[lang|="en"](匹配 en, en-US)
[attr^=value]属性值以 value 开头[href^="https"](HTTPS 链接)
[attr$=value]属性值以 value 结尾[href$=".pdf"](PDF 链接)
[attr*=value]属性值包含 value 字符串[src*="logo"]

四、伪类选择器(Pseudo-classes)

用于选择元素的特定状态或位置

1. 动态伪类

  • :hover:鼠标悬停
  • :active:元素被激活(点击时)
  • :focus:元素获得焦点(如输入框)
  • :visited:已访问的链接

2. 结构化伪类

  • :first-child:父元素的第一个子元素
  • :last-child:父元素的最后一个子元素
  • :nth-child(n):父元素的第 n 个子元素(支持 2n, odd, even
  • :nth-last-child(n):从后往前数第 n 个
  • :first-of-type:同类型中的第一个
  • :last-of-type:同类型中的最后一个
  • :only-child:唯一的子元素
  • :root:文档根元素(通常是 <html>

3. 其他常用伪类

  • :not(selector)不匹配指定选择器的元素
input:not([type="submit"]) { border: 1px solid blue; }
  • :empty:没有子元素(包括文本)的元素
  • :checked:被选中的表单元素(如 radio, checkbox)
  • :disabled / :enabled:禁用/启用的表单元素
  • :target:URL 哈希指向的元素(如 #section1

五、伪元素选择器(Pseudo-elements)

用于选择元素的特定部分(创建虚拟元素)。

伪元素作用
::before在元素内容前插入生成内容
::after在元素内容后插入生成内容
::first-line元素的第一行文本
::first-letter元素的第一个字母(常用于首字下沉)
::selection用户选中的文本部分

⚠️ 注意:伪元素使用 双冒号 ::(CSS3),但 :before:after 也广泛支持。


六、总结

类别典型选择器用途
基础div, .class, #id, *选中基本元素
组合A B, A > B, A + B, A ~ B基于关系选中元素
属性[href], [type="text"], [src$=".png"]基于属性值选中
伪类:hover, :nth-child(), :not()选中状态或位置特定的元素
伪元素::before, ::after, ::first-letter操作元素的特定部分或生成内容

最佳实践

  • 优先使用类名,语义清晰且优先级适中。
  • 避免过度使用 ID 选择器(优先级过高)。
  • 合理利用属性和伪类选择器,减少 HTML 类名污染。
  • 掌握 :nth-child():not() 可解决复杂选择需求。

熟练掌握这些选择器,能让你写出更精确、更高效的 CSS 代码。

THE END
喜欢就支持一下吧
点赞10 分享