导读:本期聚焦于菲律宾程序员创作的《CSS基本选择器有哪些?掌握这些选择器让你的前端技能更进一步》,敬请观看详情。页面元素那么多,浏览器究竟是怎么知道该给哪个标签应用样式的?答案就藏在CSS选择器里。选择器是样式表的入口,写得好不好,直接决定代码的可维护性和页面性能。本文系统梳理CSS中最常用的基本选择器,包括通配选择器、元素选择器、类选择器、ID选择器以及属性选择器,逐一讲解语法规则、优先级计算方式和实际使用场景,并配上可直接运行的代码示例。同时分析常见误用,比如ID满天飞、通配符滥用导致的性能问题,帮你从一开始就养成规范的选择器书写习惯。无论刚入门还是想巩固基础,这篇都能帮你把选择器这块地基打牢。

CSS选择器是连接HTML结构与样式规则的桥梁。每写一条样式,浏览器都要先通过选择器判断这条规则应用到哪些元素上,再去渲染。很多初学者只会用类选择器一把梭,或者到处复制id,写出来的样式表越堆越乱,优先级冲突频出。想把CSS基本功打扎实,第一步就是把基本选择器吃透,搞清楚每种选择器适合什么场景,优先级如何计算,哪些写法该避免。

CSS基本选择器有哪些?掌握这些选择器让你的前端技能更进一步

基本选择器有哪些类型

CSS规范中定义了多种选择器,但最基础的只有五种:通配选择器、元素选择器、类选择器、ID选择器和属性选择器。它们是所有复合选择器的 building block,后代选择器、子代选择器、伪类选择器等都是建立在这些基础之上的。

通配选择器用*表示,匹配页面上的所有元素,最常见的用途是做全局重置:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

元素选择器直接用标签名,例如p匹配所有段落,a匹配所有链接。它优先级低、复用性强,适合设置某一类元素的全局默认样式。类选择器以点号开头,比如.btn,任何元素只要加上class="btn"就会被匹配到,这是日常开发中使用频率最高的选择器。

ID选择器以井号开头,例如#header,匹配id属性等于该值的唯一元素。属性选择器则通过方括号语法匹配元素的属性,例如[type="text"]匹配所有文本输入框,在没有合适类名时非常方便。下面这个例子把五种选择器都用上了:

<style>
  * { margin: 0; }
  p { line-height: 1.6; }
  .card { border: 1px solid #ddd; padding: 16px; }
  #main-title { font-size: 24px; }
  input[type="text"] { border: 1px solid #ccc; }
</style>

<div class="card">
  <h1 id="main-title">标题</h1>
  <p>这是一段正文内容</p>
  <input type="text" placeholder="请输入">
</div>

优先级是如何计算的

写CSS迟早会遇到这样的困惑:明明给元素设置了颜色,页面上的样式却没生效,或者被别的规则覆盖了。这背后就是优先级机制在起作用。浏览器按照三组数值来计算权重:ID选择器个数、类选择器(含属性选择器、伪类)个数、元素选择器(含伪元素)个数,依次比较。

例如#header .nav li的权重是1个ID、1个类、1个元素,记为(1,1,1);而.nav li是(0,1,1)。前者数值更高,所以优先生效。通配选择器*的权重为0,也就是说*div同时设置样式时,元素选择器会赢。当权重完全相同时,写在后面的规则覆盖前面的,这就是常说的后来居上原则。

还有一个特殊存在是行内样式,也就是直接写在HTML标签style属性里的样式,它的优先级高于所有选择器。而!important则凌驾于行内样式之上。实际开发中应尽量避免使用!important,因为它会打破正常的层叠规则,一旦用上就很难再覆盖,日积月累会让样式表变得不可维护。正确做法是控制好选择器的层级深度,保持权重简洁。

属性选择器的进阶用法

属性选择器比很多人想象的强大,它不仅能精确匹配属性值,还支持模糊匹配。掌握这些用法,可以在没有类名配合的情况下精准定位元素,减少HTML中的冗余class。

[href]匹配所有带href属性的元素;[href^="https"]匹配值以https开头的;[href$=".pdf"]匹配以.pdf结尾的;[class*="btn"]则匹配class值中包含btn字样的元素。来看一个实用例子,给外部链接自动加上小图标:

/* 匹配所有以 https 开头且不以本站域名结尾的链接 */
a[href^="https://"]:not([href$="ipipp.com"])::after {
  content: " ↗";
}

/* 匹配所有 PDF 下载链接 */
a[href$=".pdf"]::before {
  content: "[PDF] ";
}

需要注意的是,[class*="btn"]这种包含匹配是字符串层面的,btn-primarymybtn都会命中,有时会产生误伤。如果只是想匹配class列表中的某一项,更稳妥的方式是使用.btn类选择器,或者用波浪线语法的[class~="btn"],它按空格分隔class值后再精确匹配。

常见误用与最佳实践

第一个常见问题是ID选择器滥用。ID权重太高,一旦用它写了样式,后续想覆盖就只能写更高的权重或者祭出!important,整个样式表的层叠体系会被逐渐破坏。业界主流做法是ID留给JavaScript定位元素和页面锚点使用,样式一律走类选择器。

第二个问题是选择器嵌套过深。类似.page .content .list .item .title a这种写法权重臃肿,与HTML结构强耦合,模板稍一调整样式就全部失效,浏览器匹配的开销也更大。建议单个选择器不超过三层,尽量做到类名即语义,例如.list-item-title,这样既降低权重又减少对DOM层级的依赖。

第三是通配选择器的性能顾虑。*本身确实会遍历所有元素,但现代浏览器的样式匹配引擎已经高度优化,全局重置中的*并不会造成明显性能问题。真正要警惕的是把*与后代选择器组合,例如div * .title这种写法,匹配范围难以预估,应尽量避免。

总结一下:元素选择器负责全局默认值,类选择器承担主要样式职责,ID尽量不参与样式,属性选择器用于无类名可用的场景。把这些原则落实到位,你的CSS会明显变得更整洁、更易维护,也为后续学习伪类、伪元素和组合选择器打下良好基础。

CSS选择器前端开发元素选择器修改时间:2026-09-13 11:46:30

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260913/55980.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。