首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我们为什么不能在CSS声明块之间放置分号,有什么解释吗?

我们为什么不能在CSS声明块之间放置分号,有什么解释吗?
EN

Stack Overflow用户
提问于 2017-03-08 08:32:43
回答 1查看 360关注 0票数 6

在css规则之间放置分号时,将忽略分号后面的规则。这可能导致一些非常奇怪的结果。MDN有一个小提琴,可以用来显示这一效果相当清楚。

是初始状态,而是在第一个规则的末尾有分号之后。

幸运的是,它本质上是来自于一个人的css块之间的排除分号的普遍做法

我的问题是:为什么会这样?我听说是这样的,因为它将节省空间(在本例中,每个css规则正好有一个字符)。但这种推理,虽然是真的,但似乎有点奇怪。我找不到css文件中每个字符占用多少空间的详细信息,但是如果它类似于JS,这是如此的帖子告诉我们每个字符大约是16位,或2个字节。这意味着我们将每条规则保存2个字节。

根据按国家分列的平均连接速度列表的数据,全球平均连接速度为5.1兆比特/秒。由于我们通过不允许分号来精确地保存每条规则的一个字符,而且每个字符是16位,我们可以显示,平均而言,节省一秒所需的规则量是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5,100,000(bits/second) / 16(bits{saved}/rule) 

(5,100,000/16)*[(bits * rule)/(second * bits] or

318750 (rule/second)

因此,根据全球平均连接速度,需要超过30万条规则才能节省我们一秒钟的时间。

当然,必须有更有效的方法来为用户节省下载时间,而css/js的小型化/丑化就是其中之一。或者缩短CSS属性名称的长度,因为它们比一个字符长得多,而且可以多次出现,缩短这些字符比剪掉尾随分号节省更多的字节。

在我看来,比保存的字节更重要的是,这会给开发人员带来多大的混乱。我们中的许多人都习惯于用分号跟随封闭的大括号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
returnType/functionDec functionName(arguments){
 //...function body
};

是许多语言(包括JavaScript)中非常常见的模式,完全可以想象开发人员键入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cssRuleA{ 
 /*style Rules */
};
cssRuleB{
 /* Style Rules*/
};

这是这种习惯的偶然结果。控制台将不会记录错误,开发人员将没有迹象表明在样式之外发生了错误,没有正确显示。最糟糕的是,即使cssRuleA是导致错误的原因,它也会运行得很好,即使没有什么问题,cssRuleB也是没有正确显示的规则。事实是

  1. 这将不会记录控制台中的错误,并且
  2. 在这种情况下,不显示的样式从来都不是错误的样式。

特别是在大型项目中,样式/UI问题可能有许多不同的根源。

CSS中是否存在一些内在因素,使这个约定更有意义?我错过了一些白皮书,解释了为什么CSS是这样的吗?就我个人而言,我试图从有限自动机/文法的角度看排除分号是否更快,但我无法确定它是否更快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 09:46:52

在CSS中,规则由任何一个块或语句定义,但不是同时定义的。块是由一对大括号包围的代码块。语句是以分号结尾的代码块。

空的“规则”不是有效的CSS规则,因为它不能被解析为限定规则在先。因此,两个块之间的一个单独的;是无效的,同样的原因是,一个不包含前奏的块(一个选择器列表,或者一个at-关键字,后面跟着一个可选的前奏)是无效的:因为它不能被解析成任何有意义的东西。

只有at-规则可以采用语句的形式,因此可以用分号来结束(例如@charset@import);限定的规则永远不会出现。因此,当遇到格式错误的规则时,如果解析器尚未解析at-规则,则将其视为限定规则,直到并包含下一组大括号的所有内容都将被消耗和丢弃,包括分号。这在css第2.2节-语法-3中被简洁地描述了(它说文本是非规范性的,但这只是因为规范规则是在语法本身中定义的)。

在CSS中采用如此急切的方法的原因主要是由于选择器错误处理 --如果它是保守的,浏览器可能会不经意地将下面的规则解析为完全出乎意料的东西。例如,如果IE6不理解>,只忽略p > span {...}中的p >,并认为以span开头的所有内容都是有效的,那么规则最终将匹配IE6中的任何span元素,而只匹配支持浏览器的元素的适当子集。(实际上,IE6中也存在类似的问题,链式类选择器 - .foo.bar被视为.bar。)因此,您可以认为这不是自由的错误处理,而是CSS规则的保守应用。当有疑问时,最好不要应用规则,而不要用意想不到的结果来应用它。

不管是谁告诉你这是因为表演原因,都是在编造。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42676805

复制
相关文章
我们只能在安全和隐私之间寻求平衡吗?
引言 许多人未经深思熟虑就接受了这样的原则:为了安全,我们需要牺牲一部分隐私。所以我们只能在安全和隐私之间寻求某种平衡。比如“9·11”之后,美国政府以“反恐”为理由,大规模侵犯公众隐私,甚至远及国外,连别国政要的隐私都被侵犯。作者明确指出,这样的原则是错误的:“我们的目标不应是在安全和隐私之间找到一个可以接受的权衡,因为我们可以而且也应该坚持两者一致。” 从本书开头介绍的有关技术来看,我感觉如今我们已经处在这样一种局面中:政府和公司都已经毫无疑问可以通过智能手机掌握我们的大量隐私。一个比较严重的问题是
企鹅号小编
2018/01/18
6920
我们只能在安全和隐私之间寻求平衡吗?
我们为什么不用 Select * 吗?
应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。
哲洛不闹
2019/04/25
1.7K0
我们为什么不用 Select * 吗?
我们为什么不使用CSS框架
在最近一次 ReactiveConf 会议上,Scott Tolinski 为这样一种观点做了辩护:考虑到 CSS 语言最近增加的东西,开发人员可能不再需要使用成熟的 CSS 框架。Tolinski 进一步演示了不需要支持 IE11 的开发人员如何利用 CSS 变量来实现一个自定义设计系统,而其开销明显小于使用框架。
深度学习与Python
2020/07/27
4500
MySQL不香吗,为什么还要有noSQL?
其实我很早就想写写分布式数据库相关的文章,既是我现在正在学习的,也是我很感兴趣的内容。但是谈到分布式数据库,会涉及很多相关的技术细节,等把相关的一些细节写明白的时候,已经十几篇文章过去了XD。所以如果想要了解B/B+树、LSMT、CAP等技术细节的,可以翻翻之前的文章。今天我们来聊聊NoSQL这个概念。
TechFlow-承志
2020/04/26
7730
MySQL不香吗,为什么还要有noSQL?
为什么同行网站不优化,而排名比我们高?
为什么同行网站没外链和优化,而我每日更新,发外链,排名上不去?对于这个问题,我在现实当中也是遇到过的,看到对方网站也不更新内容,外链也不发,但就是要高我一筹,甚是气人,为此我做了详细的研究发现为什么我们网站落后与人的原因不外呼以下几点,因此以此案例作为讲解以上问题。
蝙蝠侠IT
2021/06/30
3360
为什么同行网站不优化,而排名比我们高?
Python 为什么不用分号作终止符?
单纯看“分隔符”与“终止符”,它们都是必须的,然而是否都要用分号来表示呢?这个问题没有达成一致的标准。
Python猫
2020/05/28
1.3K0
前端html源码可以不暴露接口吗?为什么?
html属于的前端编程中一项,接口是必须要暴露的,起码基于现在的技术框架是无法避免的,因为只要是有关html的代码只需要在浏览器里面右键点击查看源代码所有的相关的html代码都会原封不动的展示出来,所以前端页面的很多样式特效只要有一家有新的变化出来,紧接着很快就会被抄袭拷贝了,样式和风格太容易拿来使用了,所以想在加密只能在数据接口上做做文章,现在web安全已经成为一个非常热点的问题,因为随着网页应用的普及化网页安全将会越来被重视。
程序员互动联盟
2019/03/07
3.2K0
前端html源码可以不暴露接口吗?为什么?
晶振为什么不能放置在PCB边缘?
某行车记录仪,测试的时候要加一个外接适配器,在机器上电运行测试时发现超标,具体频点是84MHz、144MHz、168MHz,需要分析其辐射超标产生的原因,并给出相应的对策,辐射测试数据如下:
AI 电堂
2022/12/08
3730
晶振为什么不能放置在PCB边缘?
从服务之间的调用来看 我们为什么需要Dapr
Dapr 相关的文章我已经写了20多篇了[1] 。 当向其他人推荐Dapr 的时候,需要回答的一个问题就是:
张善友
2022/03/30
9920
从服务之间的调用来看 我们为什么需要Dapr
张一鸣:为什么 BAT 挖不走我们的人才?
很多企业失败的时候,总说是政策的变化、市场的变化、消费者需求的变化、技术发展的变化等等,导致了失败,其实这都是瞎说,归根结底还是人的原因,都是因为你招的人不行。可见,人才对于一个企业的重要性。
芋道源码
2020/02/20
6380
张一鸣:为什么 BAT 挖不走我们的人才?
Python不香吗,为什么还要学数据分析?
有读者问我,看到现在大厂都在招数据分析师,薪资也非常有吸引力,我会用 SQL 和 Excel,还会一点 Python,能不能去应聘?
刘早起
2020/11/05
1K0
为什么我们能在主线程直接使用 Handler,而不需要创建 Looper ?
每个Handler 的线程都有一个 Looper ,主线程当然也不例外,但是我们不曾准备过主线程的 Looper 而可以直接使用,这是为何?
程序亦非猿
2019/08/16
4350
如何给对象解释为什么不能在 MySQL 中使用 UTF-8 编码
MySQL 是业务后台系统经常用到的结构化数据库。 掌握 MySQL 相关知识是研发人员必备的能力。 与此同时,在面试过程当中,MySQL 的知识点也是经常被当做面试题目,以此来考量候选人的能力。
Java程序猿
2021/06/10
9750
为什么不建议在matlab中用循环?【文末有彩蛋】
循环是程序流程控制的三大剑客之一,没有循环可以说好多功能都不能实现。MATLAB作为一种特殊的编程语言,其在循环的优化上并不是特别出色,但在矩阵化运算(也称矢量化运算)上具有较其他编程语言不可比拟的优势。
巴山学长
2021/11/15
1K0
为什么不建议在matlab中用循环?【文末有彩蛋】
为什么 Go 语言能在中国这么火?
对大多数公司来说Golang的主要优势是和C++比有GC,和Java比更简洁,和Python比更快,这就在一个不错的位置上了,没有明显的短板。以大部分程序员的水平而言,Golang的缺点还还没有到能对他们产生困扰的程度,他们自己给自己造成的麻烦比语言给他们带来的麻烦多得多。
老钱
2018/12/27
2K0
我们为什么需要理论?
把设计当作建房子,理论就是盖房子的方法原理,只用沙石砖瓦,那很难盖好一座房子的,就别提一栋大厦了。如果知道了盖房子的方法,知道用多少材料,那么不仅事半功倍还能节省成本。
宇相
2018/09/18
2.8K0
我们为什么需要理论?
为什么我们要开源
开源的好处很多。 开源除了可以让产品的用户享受其益处外,对于个人和企业来说: 有利于让产品快速传播。 有可能获取其附加价值。 带来更好的名誉。 对于开发者来说,可以自由的使用其中的技术。 我昨天突然意识到了另外一个好处。最近发生了一件事儿,我以前开发过的一个产品被公司的一个合作伙伴收购了,这个产品的部分工程师编了一个视频作为纪念。 我们为什么想要纪念一下?并不是这个产品有多么好,主要是我们付出了人生中的几年时光在这个上面,需要纪念的是我们的记忆。 对于开发者来说,这就是我们的经历,把我们的才能才干、多年
绿巨人
2018/05/16
1.5K0
为什么我们需要Pulsar?
随着互联网的高速发展,用户规模与业务并发量开始急剧增加,海量的请求需要接收和存储,业务需要中间件来实现削峰填谷;业务也在不断发展,企业内部的系统数量也在不断地增长,不同语言开发出来的系统需要统一的事件驱动;大数据、AI已经成为很多业务中不可或缺的技术,它们都需要统一的数据源。越来越多的场景离不开消息队列,稍具规模的业务,消息队列都是“标配”。
博文视点Broadview
2021/12/06
7170
为什么我们需要Pulsar?
我们为什么要用Kubernetes
它是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果。确切地说,Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本。正是由于站在Borg这个前辈的肩膀上,吸取了Borg过去十年间的经验与教训,所以Kubernetes一经开源就一鸣惊人,并迅速称霸了容器技术领域。
博文视点Broadview
2020/06/11
9820
我们为什么做社区?
很多同学在加入ThoughtWorks之后,会频繁的听到和提起“社区”这个词,以及越来越多的参与到“社区活动”中,无论是自发的还是被影响的,都会对社区有更深的接触和体会。那么,追根溯源,ThoughtWorks为什么和社区结合这么紧密,社区到底对我们、组织、乃至社会意味着什么呢?
ThoughtWorks
2018/07/23
7300
我们为什么做社区?

相似问题

为什么我们需要手动放置分号。视图

10

“标准”和块包声明之间有什么区别吗?

53

有人能解释为什么我们在css中使用*吗?

10

我们需要在函数声明后加上分号吗?

6260

为什么我们不声明它是静态的

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文