当前位置:

首页 > 编程开发 > css进阶学习 选择符

css进阶学习 选择符

CSS选择符的质量影响代码可维护性与性能。浏览器从右向左匹配样式,应使用具体的关键选择符如class,缩短选择符序列,避免链式选择符和多余标签限定,以减少匹配次数,提升渲染效率。

本文目录

    初学CSS时,最让人困惑的莫过于它那极高的自由度——同一个设计交给不同的人来做,最终产出的代码几乎不可能一模一样。问题随之而来:如果不同的实现方式,不同的代码风格,最终在视觉上呈现的效果完全一致,我们又该如何评判孰优孰劣?CSS毕竟是门没有程序逻辑的描述性语言,难道还能从中分出高下?

    如今,我越来越认同一个观点:即使是描述性语言,CSS同样存在代码质量的评判标准。核心就是两个维度——可维护性和性能。用大白话说,好的CSS既要对开发者友好(dev-friendly),也要对浏览器友好(browser-friendly)。这篇文章就从选择符的角度,聊聊如何写出更高质量的CSS代码。

    关键选择符与浏览器的样式规则匹配原理

    CSS选择符,就是每一条样式规则中{}之前的部分,描述的是“把样式作用到哪些元素上”。这里需要引入一个额外概念:关键选择符。它指的是每条样式规则起始的{之前的最后一个选择符,如下图所示:

    css进阶学习 选择符

    CSS选择符决定了属性定义要作用到哪些元素,因此存在一个浏览器根据选择符来匹配样式的过程。关于浏览器的匹配机制,Da vid Hyatt在Writing Efficient CSS for use in the Mozilla UI中提过:

    样式系统匹配一条规则时,从最右边的选择符开始,然后向左移动,遍历规则中的选择符序列。只要你的小小子树不断匹配成功,样式系统就会继续向左移动,直到匹配整个规则,或者因为某个位置不匹配而放弃。

    也就是说,浏览器引擎采用的是从右向左的顺序进行样式匹配。为什么这么设计?可以看看Stack Overflow上的相关讨论。简单解释一下:最右边的关键选择符直接表示了样式定义应作用的元素,从右向左的顺序能让浏览器在初始匹配时就确定有样式定义的元素集合,从而更快地跳过大多数实际上没有作用到的选择符。

    好的CSS选择符,就是要让浏览器在样式匹配过程中减少查询次数,以更快的速度完成匹配,进而优化前端性能。这其中,必须充分理解浏览器的从右向左匹配顺序。

    CSS选择符的正确使用方式:更特定

    更具体的关键选择符

    关键选择符是浏览器引擎最先读取的部分。如果你在某条样式规则中使用更具体的选择符,就能帮助减少查找匹配次数。比如:

    .content .note p{}

    这里的p是关键选择符,而p标签在网页中非常常见。浏览器从p开始读取,可能会因为匹配了太多元素而做额外工作。如果你只是想为特定位置的p定义样式,更好的做法是给它命名class,比如p.note_text,然后直接写:

    .note_text{}

    使用class选择符

    class选择符是性能最优的选择符。相比之下,ID的缺点在于只能定义给一个元素,无法重用,而且在使用上没有任何比class更好的地方。很多时候你很难确定某个元素是否唯一。一个比较好的实践是:用class定义样式,把ID留给Ja vaScript。如果可以,尽量不用ID来定义样式。

    而与class相比,标签在HTML中的重复性更大,同样可能让浏览器做额外工作。除了CSS样式清零(reset)之外,尽量少用标签选择符(元素选择符)。

    缩短选择符序列

    继承写法(这里指CSS关系选择符中的包含选择符)非常常用。它的初衷是:如果有两个元素标签相同或class命名相同,加入父元素的选择符组成序列,就能避免在不需要时样式互相影响。比如.confirm_layer .submit_btn表示:class名为submit_btn,且有一个class名为confirm_layer的父元素,才应用样式。

    但避免互相影响,不代表可以随意使用继承选择符。浏览器会从右向左读取整个序列,直到匹配完成或因不匹配而取消。因此,短的选择符序列更有利于浏览器快速完成匹配。冗长的序列则被认为是低效的,比如:

    .header ul li .na v_link{}

    建议写成:

    .header .na v_link{}

    一般来说,不超过3层的继承层级就能满足实际开发需求。应减少不必要的层级,使用更短的选择符序列。

    另外,较长的选择符序列还有一个问题:它会导致CSS优先级计算值偏高。以后如果需要写新样式来覆盖它,就必须写更长的选择符(或者使用ID)才能获得更高优先级,这对性能和代码可读性都不利。

    避免链式选择符

    链式选择符是对单个元素同时写了多个选择符判定。比如p.name表示class名为name且标签为p的元素才应用样式。这些判定可以是ID、标签、class的任意组合。

    但链式选择符是过度定义的,不利于重用,也不利于性能。例如:

    a#author{}

    建议写成:

    #author{}

    这里的a是多余的——一个ID只对应一个元素,没必要再强调标签是什么(class同理)。再比如:

    .content p.arrow{}

    建议写成:

    .content .arrow{}

    p.arrow中的p也是不必要的——它让浏览器多了一项检查:class名为arrow的元素的标签是不是p,从而降低了性能。如果去掉这个限定,.arrow的样式定义就可以用在更多元素上,重用性更好。否则,你还得告诉别人:使用这个样式只能用在p标签上。

    同理,多个class的链式写法,比如.tips.succuss{},建议更改命名,写成:

    .tips_succuss{}

    这样能帮助浏览器减少额外的样式匹配工作。

    顺带一提,IE6对链式选择符存在一个bug:多个class写在一起如.class1.class2.class3,正常情况是只有同时拥有全部class的元素才应用样式,但IE6只认最后一个,即符合.class3的元素就会应用样式。

    例外情况

    前面这些建议,主要是从浏览器渲染性能优化和代码重用性角度分析得出的理论结果。实际使用中不必教条地遵守。比如,如果你确实想为class名为intro的元素内的所有a标签都加上样式,那么.intro a这样的选择符就是明智的。

    结语

    关于高效的CSS选择符,还可以参考Google Developer中的Use efficient CSS selectors。如今现代浏览器在样式匹配上已经有了更多优化(参考CSS Selector Performance has changed!),有些方面我们不再需要过分担心。但这并不意味着可以随意写选择符——CSS选择符性能优化依然存在。你的选择符应该更好地体现你的意图,而不是随心所欲。更重要的是,以这样一种经过思考的方式来写CSS选择符,并不是什么难事。只要你想,形成这种习惯,自然就能在这方面做得更好,何乐而不为呢?

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 CSS
    相关文章 更多
    米侠浏览器打不开网页
    米侠浏览器打不开网页

    米侠浏览器页面打不开,或者干脆显示一片空白?问题根源大概率出在内核上。比如内核和当前网页的兼容性出了岔子、页面渲染模块意外损坏,再或者,内核版本实在太旧了。别急,沿着切换内核、清理缓存、关闭硬件加速、替换核心文件这四步走,通常都能解决。 用米侠浏览器上网,碰到页面死活刷不出来,或者只显示一个空白屏幕

    IE浏览器怀旧版在线网址
    IE浏览器怀旧版在线网址

    IE浏览器怀旧版在线网址:一次精准的技术时光回溯 最近,不少老用户和怀旧爱好者在反复搜索一个问题:那个经典的Internet Explorer,如今还能在哪里原汁原味地体验到?答案指向一个特定的地址:https://ie.microsoft.com/legacy/。 这个网站远不止是一个简单的“皮肤

    火狐浏览器有哪些设置功能
    火狐浏览器有哪些设置功能

    火狐浏览器五大核心设置功能:解锁高效、安全与个性化体验 火狐浏览器功能强大,但如果不仔细挖掘,很多能大幅提升效率和安全性的设置可能就“藏着掖着”了。这就好比拥有一台高性能设备,却只用了基础模式。那么,如何把它调整到最顺手、最安全的状态?接下来,我们就聚焦于当前版本(截至2025年末)最关键的五大设置

    chrome搜索免验证入口
    chrome搜索免验证入口

    Chrome官方免验证入口为https://www.google.cn/chrome/,提供全平台安装包、免登录即用、本地化安全机制及引擎级性能优化。 到底该去哪里找正版、免费且无需繁琐验证的Chrome浏览器入口?这个问题困扰了不少网友。今天,我们就来直通核心,为大家详细拆解Chrome引擎的官方

    HTML转PDF在线官网
    HTML转PDF在线官网

    HTML转PDF在线官网入口:网页内容一键生成PDF指南 HTML转PDF在线官网入口是https://htmltopdf.com,支持HTML5标签、CSS渲染、多语言字符、Web字体;操作免注册,可预览、自定义参数、批量导出;输出300DPI、保留超链接与矢量图;本地处理保障隐私;兼容主流浏览器

    关于CSS渲染:CSS是如何绘制颜色的
    关于CSS渲染:CSS是如何绘制颜色的

    CSS中颜色基于RGB、CMYK、HSL等模型,RGBA与HSLA支持透明度(alpha通道),另有140种命名颜色、十六进制及currentColor,以及HSL/HSLA写法。渐变分线性与径向两种,可设多个色标、角度、重复及渐变中心,方向可自定义。形状绘制建议优先使用SVG,而非依赖CSS奇技淫巧,因SVG矢量图精确、可缩放、语义清晰且易于维护。

    利用模糊实现视觉3D效果实例讲解
    利用模糊实现视觉3D效果实例讲解

    利用CSS模糊滤镜与清晰对比构建视差,可实现视觉3D效果。例如在文字3D旋转中,对字母单独应用模糊动画;落叶效果则通过不同模糊程度、缩放和速度,模拟近、中、远景层次,增强立体感和深度。

    详解CSS开发过程中的20个快速提升技巧
    详解CSS开发过程中的20个快速提升技巧

    使用CSS重置统一盒模型与边距,继承盒模型简化样式。Flexbox布局避免margin问题,:not()伪类精简边框样式。统一body行高,Flexbox实现垂直居中。SVG图标替代位图,OWL选择器控制垂直间距。box-decoration-break美化换行文本,table-layout实现等宽单元格。属性选择器处理空链接,rem与em配合全局局部缩放。

    简单明了带你了解CSS Modules
    简单明了带你了解CSS Modules

    CSSModules通过动态生成唯一class名实现CSS局部作用域,避免样式冲突。需借助webpack及css-loader启用modules选项,支持自定义类名和样式复用(composes),可与普通CSS样式共存,提供灵活的样式隔离,显著提升代码可维护性和模块化程度。

    css列表标签list与表格标签table详解
    css列表标签list与表格标签table详解

    CSS列表样式通过list-style-type属性控制标记类型,list-style-image属性控制标记图像,list-style-position属性控制标记位置,三者可合并简写为list-style属性;表格样式使用border属性设置边框,border-collapse属性合并相邻边框,并支持宽度、高度及文本对齐设置,从而使页面结构清晰美观。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。