首页 > 其他分享 >解释下为什么说通配符选择器要慎用?

解释下为什么说通配符选择器要慎用?

时间:2024-12-11 09:45:41浏览次数:4  
标签:慎用 浏览器 样式 元素 通配符 使用 选择器

在前端开发中,通配符选择器 * 虽然方便,但应谨慎使用,主要原因在于其性能影响和潜在的样式冲突:

  • 性能影响:

    • 增加浏览器工作量: 通配符选择器会匹配页面上的每一个元素。这意味着浏览器需要遍历所有元素来判断是否应用样式,尤其在大型 DOM 树中,这会显著增加渲染时间,导致页面加载缓慢,影响用户体验。
    • 降低样式计算效率: 即使某些元素最终没有应用通配符样式,浏览器仍然需要进行计算和检查。这会浪费计算资源,尤其在移动设备或低配置设备上,性能影响更为明显。
    • 级联样式表 (CSS) 的层叠规则: 通配符选择器的特异性最低。这意味着如果其他更具体的规则 (例如类选择器、ID 选择器或元素选择器) 也作用于同一元素,通配符样式会被覆盖。浏览器仍然需要进行不必要的计算。
  • 潜在的样式冲突:

    • 难以预测的影响范围: 使用通配符选择器可能会无意中影响到未预期的元素,导致样式错乱。尤其在大型项目或团队协作中,这种意外的副作用难以追踪和调试。
    • 覆盖第三方库样式: 如果项目中使用了第三方库或组件,通配符选择器可能会覆盖其默认样式,导致组件功能异常或外观变形。
    • 维护困难: 随着项目规模的增长,大量的通配符选择器会使样式表变得难以维护和理解。难以确定哪些样式实际生效,以及如何修改样式而不会引发其他问题。

最佳实践:

  • 避免在全局范围内使用 * 尽量避免在样式表的顶层或全局作用域使用通配符选择器。
  • 限制使用范围: 如果必须使用 *,将其限制在特定的作用域内,例如某个容器元素内部,以减少影响范围。例如:.container * { ... }
  • 使用更具体的选择器: 优先使用类选择器、ID 选择器或元素选择器等更具体的选择器,以提高性能和可维护性。
  • 仅在重置样式时考虑使用 * 一个常见的合理用法是 CSS 重置,例如 * { margin: 0; padding: 0; box-sizing: border-box; },用于清除浏览器默认样式。即使在这种情况下,也有一些开发者提倡更细粒度的重置方式,以避免潜在问题。

总而言之,通配符选择器虽然在某些情况下有用,但应谨慎使用,并充分考虑其性能影响和潜在的样式冲突。 优先使用更具体的选择器,并尽可能避免在全局范围内使用通配符选择器,以确保代码的性能和可维护性。

标签:慎用,浏览器,样式,元素,通配符,使用,选择器
From: https://www.cnblogs.com/ai888/p/18598652

相关文章

  • 伪类选择器和伪元素选择器有什么区别?
    伪类选择器和伪元素选择器都是用来选择DOM树中不存在的抽象元素或状态,但它们之间有一些关键区别:1.选择的对象不同:伪类选择器:选择的是DOM树中已存在的元素的特定状态,例如鼠标悬停、链接访问状态、表单元素的激活状态等。它并不创建新的元素,只是根据元素的状态来选择它们。......
  • 用ant-design-vue当中日期选择器的一些坑
    如果你发现你的后端报这个错误,看下面的一些可能原因JSONparseerror:Forinputstring:"Invaliddate";nestedexceptioniscom.alibaba.fastjson.JSONException:Forinputstring:"Invaliddate"对于这个问题是因为前端传过来的日期不合法造成的,在前端可以用moment(for......
  • 为什么说css的选择器一般不要超过三级?
    CSS选择器一般建议不要超过三层,主要基于以下几个原因:性能问题:浏览器渲染页面时,需要根据CSS选择器来匹配对应的HTML元素。选择器层级越深,浏览器需要进行的计算就越多,尤其是在大型DOM树中,过深的层级会导致性能下降,影响页面渲染速度,造成卡顿。浏览器需要从右往左进行匹......
  • 快速入门:免费通配符SSL证书的简易申请设置教程
    通配符SSL证书(也叫泛域名SSL证书)非常适合那些有很多子域名的网站,因为它能让证书管理和安装变得更简单。JoySSL是一家提供SSL证书服务的平台,现在推出了可以免费使用的通配符SSL证书。下面是一些关于这个免费通配符SSL证书的详细信息和申请步骤:申请步骤访问官网并注册账号打......
  • 纯js可定制的跨浏览器日期时间选择器插件
    Rome是一款纯js可定制的跨浏览器日期时间选择器插件。该日期时间选择器不依赖于jquery,但它依赖于moments.js。可以通过CSS文件来自定义该日期时间选择器的外观样式。在线预览 下载  安装可以通过Bower或nmp来安装该日期时间选择器插件。npminstall--saveromebower......
  • k8s~关于非常啰嗦的标签和选择器
    总感觉k8s中定义的deplyment和service非常的啰嗦,尤其是在选择器的定义上,但没办法,它的设计总有它的道理。svc(spec.selector.app)deployment(metadata.labels.app,spec.selector.matchLabels.app)pods(metadata.labels.app)nginx的部署下面是一个KubernetesYAML文......
  • H5-23 关系选择器
    关系选择器分为:后代选择器、子代选择器、相邻兄弟选择器、通用兄弟选择器1、后低选择器定义:选择所有被E元素包含的F元素,中间用空格隔开语法:       EF{} <ul>  <li>1</li>  <li>2</li>  <li>3</li>......
  • H5-18 选择器2
    1、ID择器选针对某一个特定的标签来使用,只能使用一次。css中的ID选择器以#来定义 <Pid="c">111</P>#c{          color:red;      font-size:30px;    }特别强调ID是唯一的ID不能以数字开头2......
  • 你有没有使用过“形似猫头鹰”(例:`* + *{ ... }`) 的选择器?
    是的,我知道你在说哪种选择器。虽然它被戏称为“形似猫头鹰”,但它实际上是由几个不同的CSS选择器组合而成的,并没有一个单独的“猫头鹰选择器”。你指的可能是以下几种情况,或者它们的组合:通用选择器(*)+相邻兄弟选择器(+)+元素选择器/类选择器/ID选择器等:这通常用......
  • 为什么说css中能用子代选择器的时候不要用后代选择器?
    在CSS中,提倡尽可能使用子代选择器(>)而不是后代选择器(空格),主要是因为性能和可预测性方面的原因:性能更高:子代选择器只选择直接子元素,而后代选择器会选择所有后代元素,包括子元素、孙元素等等。这意味着使用后代选择器时,浏览器需要遍历更多的DOM节点来确定匹配的元素,尤其在......