首页 > 教程 > 关键词  > CSS最新资讯  > 正文

在 Mozilla UI 中书写高效率 CSS

2010-03-22 09:01 · 稿源:前端观察

以下文档描述了应用在 Mozilla UI 中优化 CSS 文件的规则。第一部分是对于 Mozilla 样式系统分类规则的一般性讨论。在了解这个系统的基础上,后续部分包含了一些指南,书写可以利用这个样式系统实践优点的样式的指南。

样式系统如何分类规则

样式系统把规则分为四大类。理解这些类是很重要的,因为对于规则的匹配来说他们是首先要考虑的。之后的段落中会使用“主选择符”这个说法。主选择符是指选择符最右边的部分(最终要匹配的那个元素,而不是它的祖先元素)。例如,在以下规则中:

a img, div > p, h1 + [title] {}

主选择符是 “img”, “p”, 和 “[title]“。

ID 规则

ID 选择符作为主选择符的规则。

例如:

button#backButton { } /* ID 类别的规则 */
#urlBar[type="autocomplete"] { } /* ID 类别的规则 */
treeitem > treerow > treecell#myCell:active { } /* ID 类别的规则 */

Class 规则

如果一条规则有一个指定的 class 作为主选择符,就被归入此类。

例如:

button.toolbarButton { } /* 基于 class 的规则 */
.fancyText { } /* 基于 class 的规则 */
menuitem > .menu-left[checked="true"] { } /* 基于 class 的规则 */

Tag 规则

如果主选择符不是 ID 或者 class,那么下一个类很可能就是 tag 分类。如果一条规则指定 tag 为主选择符,就被归入此类。

例如:

td { } /* 基于 tag 的规则 */
treeitem > treerow { } /* 基于 tag 的规则 */
input[type="checkbox"] { } /* 基于 tag 的规则 */

全局规则

除以上分类之外都归入此类。

例如:

[hidden="true"] { } /* 全局规则 */
*{} /* 全局规则 */
tree > [collapsed="true"] { } /* 全局规则 */

样式系统如何匹配规则

样式系统从最右边的选择符开始向左侧移动来匹配一条规则。样式系统会一直向左匹配选择符直到规则匹配完毕或者由于出错停止匹配。

对于规则分类的第一步发生在主选择符类别基础上。这个分类的目的是把那些不需要浪费时间匹配的规则过滤出来。这是显著提升性能的重点。对于一个给定的需要匹配的元素,规则越少,样式的渲染越快。例如,元素有一个 ID,那么只有和元素 ID 匹配的 ID 规则会被检索。只有和元素的 class 匹配的 class 规则会被检索。只有和 tag 匹配的 tag 规则会被检索。全局规则总是会被检索。

高效 CSS 指南

避免全局规则

确保规则不以全局分类结束

不要给 ID 分类规则指定标签名或者 class

如果有一条样式规则是以 ID 选择符为主选择符的,就别再画蛇添足的加上标签名了。ID 都是唯一的,因此加上标签名反而会无谓地拖慢匹配过程。(当有不同元素使用同一类名,而又需要动态地改变其中一个元素的类名来针对不同情况应用不同样式时是个例外。)

BAD – button#backButton { }
BAD – .menu-left#newMenuIcon { }
GOOD – #backButton { }
GOOD – #newMenuIcon { }

不要给 class 分类规则指定标签名

和以上规则类似,所有的类名也是唯一的。标签和类名连缀的写法是一个惯例(但是,如果设计的变更使得需要改变标签就会有灵活性的问题,因为也需要改变 class — 最好选用具有严格语义的名字,这种灵活性也是分离样式表的目标之一)。

BAD – treecell.indented { }
GOOD – .treecell-indented { }
BEST – .hierarchy-deep { }

尽量把规则应用到最明确的类上

拖慢系统最大的一个原因是有太多的 tag 分类规则了。通过给元素增加类名,可以把这些 tag 类里的规则分一部分去class 分类,就可以不需要浪费时间来试图给一个标签匹配那么多的的规则了。

BAD – treeitem[mailfolder="true"] > treerow > treecell { }
GOOD – .treecell-mailfolder { }

避免后代选择符

CSS 中,后代选择符(descendant)[注1]的耗能高的可怕,尤其是选择符的规则是在 tag 或者全局分类中。子选择符(child selector)则经常是真正所需。如果没有主题模块所有者的明确允许,UI CSS 中禁止使用后代选择符。

BAD – treehead treerow treecell { }
BETTER, BUT STILL BAD (see next guideline) – treehead > treerow > treecell { }

Tag 类规则中最好不要包含后代选择符

避免使用具有 tag 类规则的后代选择符。这会明显地增加匹配时间(尤其是这些规则会被多次匹配时)。

BAD – treehead > treerow > treecell { }
BEST – .treecell-header { }

小心子选择符的使用

要小心使用子代选择符。如果有别的方式可以不用,就不要用子选择符。尤其是子选择符被大量使用在 RDF 树和类似的菜单中时。

BAD – treeitem[IsImapServer="true"] > treerow > .tree-folderpane-icon { }

要注意模版中来自 RDF 的属性是可以复制的!可以利用这一点把 RDF 属性复制到需要改变那个属性的子元素上。

GOOD – .tree-folderpane-icon[IsImapServer="true"] { }

倚赖继承

了解并使用那些可以继承的属性。XUL widgetry[注2] 已经明确设置了,因此可以把 list-style-image 或者 font 规则应用到父级标签上,它将渗透进匿名内容。因此就不需要浪费时间为那些匿名内容写规则了。

BAD – #bookmarkMenuItem > .menu-left { list-style-image: url(blah); }
GOOD – #bookmarkMenuItem { list-style-image: url(blah); }

上例中,样式化匿名内容的需求(没有理解 list-style-image 可以继承)导致了一条 class 类规则。其实这条规则应该属于最明确的一类 — ID 类规则。

要记住,尤其是那些匿名内容,它们都有同样的 class。上面那个不好的例子导致需要检查每个菜单的图标是否包含在 bookmarks 菜单项中。这是非常可怕的高昂消耗(有很多菜单);除 bookmarks 菜单之外,这条规则不应该被其他任何菜单想检查。

使用 -moz-image-region

把一堆图片放到一个单独的图片文件中,并用 -moz-image-region[注3] 选中会有显著的性能提升。()

注1: 后代选择符(descendant selector) 子选择符(child selector) 是有区别的。单从字面来讲,后代选择符,顾名思义包括儿子、孙子、重孙子等所有后代; 子选择符只是指儿子,就不管那帮孙子了。

注2: XUL widgetry 不清楚是啥。

注3: 貌似想法和现在说的 CSS sprites 方法差不多,要知道这可是十年前(2000年)的文章啊。

举报

  • 相关推荐
  • Razer(雷蛇)在新加坡设立AI CENTER OF EXCELLENCE,加速人工智能投资布局

    雷蛇宣布在新加坡设立全球AI卓越中心,并计划在欧洲和美国建立类似机构,推动游戏与开发者工具领域的创新。新加坡中心将招聘150名AI工程师,专注于下一代AI游戏技术研发。雷蛇还推出AI工具套件,包括Game Co-AI和QA Co-AI,帮助开发者提升游戏质量和开发效率。该战略布局正值全球游戏市场快速增长期,预计2033年AI游戏市场规模将达280亿美元。新加坡数字产业发展局表示,此举将巩固该国作为区域AI创新中心的地位。

  • HOLLYLAND猛犸闪耀BIRTV:重磅新品全球首秀

    7月23日,猛玛品牌在北京国际广播电影电视展览会(BIRTV)上发布全新Logo"HOLLYLAND猛玛",标志着品牌全球化战略升级。作为深耕音视频行业十余年的中国科技企业,猛玛将旗下MOMA与HOLLYLAND两大品牌进行战略整合,产品已远销全球180多个国家和地区。品牌旗舰产品LARK MAX2无线麦克风集成了前沿声学技术,AI降噪功能可精准识别人声与复杂环境噪音。同时,猛玛针对不同创作需求推出无线图传解决方案,包括面向个人创作者的"微影"图传和团队使用的"极简5"无线图传监视器。在专业领域,猛玛还展出了支持8个主站、80个腰包组网的专业无线通话系统,填补了国内高端市场空白。此次品牌焕新展现了猛玛整合全球资源、引领行业技术创新的决心。

  • SSD Fans评测:忆联消费级SSD AM541|强性能 高可靠 长守护

    国内知名技术社区SSD Fans对忆联消费级SSD AM541进行了深度评测。这款PCIe4.0固态硬盘采用3D NAND闪存颗粒和最新主控芯片,1TB版本顺序读取速度达7143MB/s,写入6037MB/s,远超标称值。评测显示AM541在性能、压力测试和可靠性方面表现优异,采用无缓存DRAM-Less设计配合智能SLC缓存机制,在CDM、SNIA标准测试中均展现业界领先水平。游戏实测《FF14》加载仅7.445秒,《黑神话:悟空》启动快40%,充分满足消费级用户对高性能存储的需求,展现了忆联在存储领域的技术实力。

  • Checkout.com携手Visa推出发卡业务 (Card Issuing)

    Checkout.com与Visa达成战略合作,在英国及欧洲地区推出全方位发卡业务。通过Visa全球支付网络,商户可即时获取收款资金用于支付供应商款项,显著提升资金使用效率。该合作特别针对旅游业企业,解决其支付流程分散、资金周转慢的痛点。Checkout.com每年处理数千亿交易的技术能力与Visa网络结合,帮助商户消除预存资金需求,优化现金流管理。双方表示这将大幅提升欧洲商户运营效率,释放增长潜力。

  • 免费入场+高能福利!AGON爱攻ChinaJoy CS水友赛玩家招募通道即刻开启

    2025年ChinaJoy将于8月1-4日在上海举办,AGON爱攻将携手完美世界电竞打造精彩赛事活动。亮点包括:水友可报名与传奇战队"钢盔队"对决,还有机会与三大CS主播组队;现场将展示多款电竞显示器新品,包括CS24A定制款;参与互动问答和抽奖有机会赢取AGON大礼包。活动地点为N1-G201完美世界展区主舞台,14:00开赛。线上观众关注B站AGON官方账号参与话题互动也有福利。这是一�

  • 蓝耘元生代MaaS × Kimi K2 × Claude CodeUI,开启编程效率革命

    蓝戟元生代MaaS平台推出"Kimi K2×Claude CodeUI"AI编程解决方案,通过国产首个万亿参数MoE架构开源模型Kimi K2驱动Claude Code,实现本地化部署。该方案具有三大优势:1)成本直降90%,免翻墙使用;2)支持128K超长上下文处理,编程能力超越主流模型;3)提供600万token免费额度。平台采用交互式界面设计,支持移动端操作和WebSocket通信,集成文件管理、Git工具和会话追踪功能,�

  • 三星Galaxy Z Fold7, Galaxy Z Flip7 以及Galaxy Watch8系列全球正式开售

    三星电子于2025年7月25日发布全新折叠屏手机Galaxy Z Fold7和Z Flip7,以及Galaxy Watch8系列智能手表。Z Fold7采用超轻薄设计,配备7.6英寸主屏和AI多任务处理功能;Z Flip7延续竖向折叠设计,外屏升级至3.4英寸。两款新机均搭载第三代骁龙8处理器,支持Galaxy AI功能如实时翻译、笔记辅助等。Galaxy Watch8系列新增健康监测功能,包括抗氧化指数测量和睡眠分析。产品提供多种配色,即日起全球开售,暗影蓝为最受欢迎配色。

  • 用三星Galaxy Watch8系列提升跑步水平 开启训练新体验

    文章介绍三星Galaxy Watch8系列智能手表如何帮助跑步爱好者科学训练。手表通过12分钟测试将用户跑步水平分为10个等级,并基于160多项个性化训练计划生成3-5周定制方案。它能实时监测配速、步频、摄氧量等数据,分析跑步姿势平衡性,提供配速提醒和姿势指导。升级的双频GPS系统精准记录跑步轨迹,间歇训练功能可设置高低强度交替锻炼。手表如同私人教练,帮助用户循序渐进提升耐力与速度,让跑步训练更科学高效。

  • 解锁C位视角 三星Galaxy手机以超清影像助力用户定格精彩

    三星在移动影像领域持续突破,通过Galaxy Z Fold7和S25 Ultra等旗舰机型展现专业级影像实力。2亿像素主摄、5倍光学变焦镜头与Galaxy AI技术深度融合,实现超高清拍摄和智能优化。折叠屏形态拓展创作场景,AI赋能从拍摄到编辑全流程,支持10-bit HDR视频录制和智能修图功能。三星将"Ultra"标准拓展至全高端产品线,重新定义移动影像体验,让用户轻松创作专业级内容。

  • BOSS直聘通报“王某香”涉黄简历:男子恶意编造 已被刑拘

    今日,@BOSS直聘在微博就近日网络热议的“简历涉黄”事件作出回应。 此前,网络流传BOSS直聘平台上一名自称“王某香”的求职者与招聘方沟通时出现低俗信息。这些截图在社交媒体迅速热传,引发公众对BOSS直聘存在“色情招聘”的强烈声讨。 针对这一事件,BOSS直聘迅速与警方展开核实工作。经查,账号使用人为一尹姓男子,该男子为寻求刺激,盗用他人信息,冒充女性�

热文

  • 3 天
  • 7天