iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS中选择符的实际使用方法
  • 396
分享到

CSS中选择符的实际使用方法

2024-04-02 19:04:59 396人浏览 安东尼
摘要

这篇文章主要介绍“CSS中选择符的实际使用方法”,在日常操作中,相信很多人在CSS中选择符的实际使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中选择符的实际使用

这篇文章主要介绍“CSS中选择符的实际使用方法”,在日常操作中,相信很多人在CSS中选择符的实际使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中选择符的实际使用方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在我最早开始写css的时候,其代码上的高自由度就一直很令我困惑。这就是说,同一个设计,如果让不同的人来实现,最终的代码一定是有差异的。但这存在一个问题,如果不同的人通过不同的方法以及代码风格,都从外观上实现了一样的设计,将很难评价谁做得更好。想来也是,既然都实现了设计,达到了目的,css这种没有程序逻辑的代码中,又能找出什么来说明谁做得更出色呢?

而如今,我认同的观念是,css这种描述性语言,仍然有着代码上的质量评判。评判标准就是可维护性(Maintainability)和性能(PerfORMance),用比较通俗的话说,好的css,要对开发者的工作友好(dev-friendly),也要对浏览器友好(browser-friendly)。 本文将说明如何从css选择符的角度来提高css代码质量。
关键选择符与浏览器的样式规则匹配原理

css选择符的概念,在之前的css优先级详细解析的开头部分也有提到,是指每一条样式规则中,描述把样式作用到哪些元素的部分,也即{}之前的部分。在本文,还要额外介绍一个概念:关键选择符(Key selector)。关键选择符就是在每一条样式规则起始的{之前的最后一个选择符,如下图:
CSS中选择符的实际使用方法

css选择符将确定后面的属性定义要作用到哪些元素,因此存在一个浏览器根据css选择符来应用样式到对应元素的匹配过程。关于浏览器的样式匹配系统,David Hyatt在Writing Efficient CSS for use in the Mozilla UI一文中提到了以下内容:

    The style system matches a rule by starting with the rightmost selector and moving to the left through the rule’s selectors. As long as your little subtree continues to check out, the style system will continue moving to the left until it either matches the rule or bails out because of a mismatch.

意思是说,浏览器引擎在样式匹配时,以从右向左的顺序进行。在具体匹配某一条样式规则时,这个从右向左的过程会一直持续,直到读取完整个选择符序列并完成匹配,或因某一个地方的不匹配而取消(然后转到另一条样式规则)。

至于为什么浏览器会选择这样的匹配顺序,你可以看看Stack Overflow上的相关讨论。大致上解释一下的话,由于最右边的关键选择符直接表示了样式定义应作用的元素,所以从右向左的顺序更利于浏览器在初始匹配的时候就确定有样式定义的元素集合,并更快地在找某一个元素的样式时避开大多数实际没有作用到的选择符。

更好的css选择符,是让浏览器在样式匹配过程中减少匹配查询次数,以更快的速度完成样式匹配,从而优化前端性能。这其中,也必须参考浏览器的对于样式从右向左的匹配顺序。
css选择符的正确使用方式
更特定,更具体的关键选择符

关键选择符是浏览器引擎在样式匹配时最先读取到的部分,因此,如果你在某一条样式规则中使用更特定、具体的选择符,可以帮助减少浏览器的查找匹配次数。

比如说下边这样的选择符:

CSS Code复制内容到剪贴板

  1. .content .note span{}  

最后一个span是关键选择符,而span这个标签,在网页中使用是非常多的。浏览器从span开始读取选择符,就可能会为因此在样式匹配上做了一些额外工作。

如果你确定只是想为具体处于那一个位置的span元素定义样式,更好的做法是为span命名class,比如命名为span.note_text,然后简单写为:

CSS Code复制内容到剪贴板

  1. .note_text{}  

使用class选择符

class选择符(类选择符)是最利于性能优化的选择符。相对于class,ID的缺点是只允许定义给一个元素,无法重用。而此外,它在使用上没有任何比class更好的地方。很多时候,你很难确定某一个元素是否是唯一的。另外,使用class来定义样式,而保留ID给javascript,一直是一个较好的实践。如果可以,不使用ID来定义样式。

而相对于class,标签在html中的重复性要更大,因此同样可能让浏览器在样式匹配时做更多的额外工作。如果可以,除css样式清零(reset)外,不使用标签选择符(也叫元素选择符)。
缩短选择符序列

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

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

CSS Code复制内容到剪贴板

  1. .header ul li .nav_link{}  

建议写为:

CSS Code复制内容到剪贴板

  1. .header .nav_link{}  

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

此外,较长的选择符序列还有一个问题。有较长选择符的样式规则,css优先级的计算值也较大,因此,如果在以后需要写新的样式来覆盖掉它,就需要写更长的选择符(或者使用ID)以获得更高的css优先级。这对性能和代码可读性都是不利的。
避免链式选择符

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

但是,链式选择符是过度定义(over qualified)的,不利于重用,也不利于性能优化。如:

CSS Code复制内容到剪贴板

  1. a#author{}  

建议写为:

CSS Code复制内容到剪贴板

  1. #author{}  

这里的a是不必要的。一个ID只对应一个元素,没有必要再强调这个元素的标签是什么(同理,class也不必)。另外有:

CSS Code复制内容到剪贴板

  1. .content span.arrow{}  

建议写为:

CSS Code复制内容到剪贴板

  1. .content .arrow{}  

这里的span.arrow中的span也是不必要的。一方面,这为浏览器在样式匹配时增加了一项额外工作:检查class名为arrow的元素的标签名是不是span,也因此降低了性能。另一方面,如果去掉了这个限定,.arrow的样式定义,就可以用在更多的元素上,也就有着更好的重用性。否则,就还得告诉别人,使用这个的时候只能用在span标签上。

同理,多个class的链式写法,如

CSS Code复制内容到剪贴板

  1. .tips.succuss{}  

建议更改命名,写为:

CSS Code复制内容到剪贴板

  1. .tips_succuss{}  

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

此外,IE6还存在一个链式选择符的问题,多个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选择符性能优化是依然存在的事,你的选择符应该更好地体现你的意图,而不是随心所欲地使用。更重要的是,以这样一种稍细腻的,经过思考的想法来写css选择符,并不是一件困难的事。只要你想,形成这样的一种习惯,你就可以自然地在这方面做得更好,何乐而不为呢?

到此,关于“CSS中选择符的实际使用方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: CSS中选择符的实际使用方法

本文链接: https://www.lsjlt.com/news/76729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS中选择符的实际使用方法
    这篇文章主要介绍“CSS中选择符的实际使用方法”,在日常操作中,相信很多人在CSS中选择符的实际使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS中选择符的实际使用...
    99+
    2024-04-02
  • CSS选择符的使用
    这篇文章主要讲解了“CSS选择符的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS选择符的使用”吧!CSS选择符详解一、类型选择符什么是CSS选择符...
    99+
    2024-04-02
  • css中:not()选择器的使用方法
    这篇文章主要介绍css中:not()选择器的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css的基本语法是什么css的基本语法是:1、css规则由选择器和一条或多条声明两个部分构成;2、选择器通常是需要改变...
    99+
    2023-06-14
  • dw中css选择器nthchild的使用方法
    这篇文章主要介绍dw中css选择器nthchild的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!CSS3中选择器:nth-child()该怎么使用呢?在新建的html文件中,建立几个相同的标签,比如建立几个...
    99+
    2023-06-08
  • CSS选择符的使用技巧
    这篇文章主要讲解了“CSS选择符的使用技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS选择符的使用技巧”吧!CSS选择符说明这里介绍CSS的几个选择...
    99+
    2024-04-02
  • 如何使用CSS选择符
    如何使用CSS选择符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。类型选择符(TypeSelectors)语法:E1说明:有的时候我们也将它叫...
    99+
    2024-04-02
  • CSS中选择符怎么用
    这篇文章给大家分享的是有关CSS中选择符怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   以下提示注意事项:   1.如何选择使用id选择符还是class选择符:当确...
    99+
    2024-04-02
  • css后代选择器的使用方法
    本篇内容主要讲解“css后代选择器的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css后代选择器的使用方法”吧!代码如下:<style>....
    99+
    2024-04-02
  • JQUERY的属性选择符和自定义选择符使用方法(二)
    例子:给链接中含用“wangorg"字符的链接文字加粗 css: 复制代码 代码如下: .abold{ font-weight:bold; } html: 复制代码 代码如下: $...
    99+
    2022-11-21
    属性选择符 自定义选择符
  • CSS样式子代选择符大于号 >)使用方法
    这篇文章给大家介绍CSS样式子代选择符大于号 >)使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。div span是上下文选择符,表示选择div里面的所有span,注意是所...
    99+
    2024-04-02
  • 如何使用特殊的CSS选择符
    这篇文章主要介绍“如何使用特殊的CSS选择符”,在日常操作中,相信很多人在如何使用特殊的CSS选择符问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用特殊的CSS选择符”...
    99+
    2024-04-02
  • CSS通配符选择器如何使用
    本篇内容介绍了“CSS通配符选择器如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! CSS2 引入...
    99+
    2024-04-02
  • CSS中一些特殊的上下文选择符的用法
    这篇文章主要讲解了“CSS中一些特殊的上下文选择符的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS中一些特殊的上下文选择符的用法”吧!子选择符 &...
    99+
    2024-04-02
  • css中选择符的命名规定
    这篇文章主要介绍“css中选择符的命名规定”,在日常操作中,相信很多人在css中选择符的命名规定问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css中选择符的命名规定”的疑惑...
    99+
    2024-04-02
  • CSS中的各种选择符介绍
    本篇内容介绍了“CSS中的各种选择符介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!类型,类和ID选择器...
    99+
    2024-04-02
  • css实现禁止选择文本的方法
    小编给大家分享一下css实现禁止选择文本的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css实现禁止选择文本的方法是,添加user-select属性,并且将...
    99+
    2023-06-15
  • CSS选择器分组的方法
    本篇内容主要讲解“CSS选择器分组的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS选择器分组的方法”吧! 假设希望 h3 元素和段落都有灰色。为达到...
    99+
    2024-04-02
  • CSS选择器嵌套的方法
    这篇文章主要讲解了“CSS选择器嵌套的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS选择器嵌套的方法”吧! 例如:html body div#h...
    99+
    2024-04-02
  • css中如何使用选择器
    这篇文章将为大家详细讲解有关css中如何使用选择器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:header>  <nav ...
    99+
    2024-04-02
  • 如何正确使用CSS选择器通配符
    如何避免滥用CSS选择器通配符CSS(Cascading Style Sheets)是一种用于网页设计和样式设置的语言。CSS选择器通配符是一种特殊的选择器,可以匹配指定元素及其子元素的所有属性。在使用CSS选择器时,滥用通配符可能会导致选...
    99+
    2023-12-26
    避免 CSS选择器通配符 滥用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作