留下CSS块的最后一个分号
几个关于这个问题的问题:
- 这是好的做法吗?
- 它会大规模地导致更好的加载时间吗?
- 它可以导致浏览器“打破”?
- Javascript中的最后一个函数(/ jQuery)是一样的吗?
我的意思是这样的东西:
#myElement { position: absolute; top: 0; left: 0 }
这是好的做法吗?
手动排除分号不是很好的做法。 这纯粹是因为在添加更多样式时很容易忽视,特别是在团队中工作时:
想象一下你从下面开始:
.foo { background-color: #F00; color: #000 <-- missing semi-colon }
然后有人添加一些样式:
.foo { background-color: #F00; color: #000 <-- missing semi-colon width: 30px; z-index: 100; }
突然之间,另一个开发人员正在浪费时间弄清楚为什么他们的width
声明不工作(或更糟的是,没有注意到它不工作)。 离开分号更安全
它会大规模地导致更好的加载时间吗?
绝对肯定的是,对于每一个块,你都可以节省几个字节。 这些加起来,特别是对于大型样式表。 不要担心自己的这些性能提升,最好使用CSS Compressor,例如YUI Compressor自动为您删除结尾的分号。
它可以导致浏览器“打破”?
不,这是安全的,因为浏览器正确地实现了这部分规范。 CSS2规范因此定义了一个声明:
声明或者是空的,或者是由属性名称组成,后跟一个冒号(:),后跟一个属性值。
更重要的是:
…同一个select器的多个声明可以组织成以分号(;)分隔的组。
这意味着;
用于分隔多个声明,但不需要终止它们。
在Javascript中的最后一个函数是一样的吗?
JavaScript是一个完全不同规格的完全不同的野兽。 堆栈溢出之前,这个特定的问题已经被多次深入地回答了。
-
不,留下这个分号会给你的应用程序带来很大的风险,如果你为你的元素添加更多的样式,将会很容易忽视。 在这一点上,您依靠手动stream程和对细节的关注,以确保您没有意外错误地放置在非分号行上。 更糟糕的是,每当你准备投入生产时,你将不得不实际检查你的css文件,以确保你没有在每个元素中搞砸任何最终的样式线。
-
可能,因为文件会更小,但差异应该可以忽略不计。 如果您担心加载时间,在将文件放入服务器之前先将其压缩 , 这样可以为您提供良好的服务。
-
大多数浏览器都足够聪明,可以知道你的意思,但是你仍然不用担心最后一种风格,因为搞不清你的CSS文件。
- 这是好的做法吗?
在我看来,没有。 如果在最后一条规则的下面添加规则,则很容易忘记添加分号。
- 它会大规模地导致更好的加载时间吗?
无法想象这会在加载时间上有很大的不同。
- 它可以导致浏览器“打破”?
不,只需要分号来分隔CSS块中的规则。 分号是分隔符,而不是终止符。
- Javascript中的最后一个函数(/ jQuery)是一样的吗?
是的,不要把它放在JavaScript解释器中来添加分号。
它会稍微改善加载时间。 有了足够大的CSS文件,它甚至可以引人注目(好,总体上可以缩小;我怀疑只是删除最后的分号就足够了)。
但是,如果你关心的是加载时间,你应该使用一个程序来缩小你的CSS,而不是手动尝试去做。 缩小的CSS是(几乎)不可能读取。 可以这么说,在“源代码”中使用这是一个不好的做法,因为这太容易忘记了。
这是一个重复的问题。 看这里:
分号在CSS中
关于在JavaScript中应用分号,函数不应以分号结束,除非它们被声明性地分配, var a = function() {};
但是,如果您无意中(或故意)将它们排除在外,浏览器将执行自动分号插入。
删除声明停止不会“破坏”浏览器,但仍然应该留给自动缩小器(尤其是如果您关心加载时间 – 分号本身不会增加太多),但是出于可维护性的原因,应该避免使用分号。
如果您正在寻找最佳实践,那么Google css样式指南中的CSS格式规则是一个非常好的开始 – 不要盲目应用他们的build议,而是要看到他们的推理。
每次申报后使用分号。 为了一致性和可扩展性的原因,用分号结束每个声明。
/* Not recommended */ .test { display: block; height: 100px } /* Recommended */ .test { display: block; height: 100px; }
Javascript是一个不同的故事 – 简短的答案总是使用分号,从来不依赖于隐式插入 ,但是我从来没有看到比Google 另一个风格指南更好,更彻底的答案:
有几个地方缺less分号是特别危险的:
// 1. MyClass.prototype.myMethod = function() { return 42; } // No semicolon here. (function() { // Some initialization code wrapped in a function to create a scope for locals. })(); var x = { 'i': 1, 'j': 2 } // No semicolon here. // 2. Trying to do one thing on Internet Explorer and another on Firefox. // I know you'd never write code like this, but throw me a bone. [normalVersion, ffVersion][isIE](); var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // No semicolon here. // 3. conditional execution a la bash -1 == resultOfOperation() || die();
那么会发生什么?
- JavaScript错误 – 首先返回42的函数以第二个函数作为参数被调用,然后数字42被“调用”,导致错误。
- 在尝试调用
x[ffVersion][isIE]()
时,您很可能会在运行时遇到“未定义的错误属性”。die
被调用,除非resultOfOperation()
是NaN
,THINGS_TO_EAT
被赋值为die()
的结果。为什么?
JavaScript要求以分号结尾,除非它认为可以安全地推断出它们的存在。 在每个例子中,在一个语句中使用一个函数声明或对象或数组文字。 右括号不足以表示声明结束。 如果下一个标记是中缀或括号运算符,则Javascript永不结束语句。
这真的让人感到惊讶,所以确保你的作业以分号结尾。
这是好的做法吗?
这里的大部分答案都说不。 我绝对同意 – 与传统的CSS格式化,一个被忽略的分号是容易忽略。 但事实并非如此。
关于JavaScript的几句话
在JavaScript的奇怪世界中,如果在数组文本,对象文本或函数参数列表的最后一项之后留下逗号,那么致命的事情将不会发出警告。
thisIsAlright = { one: "one", two: "two", three: "three", four: "four" } thisIsWrong = { one: "one", two: "two", three: "three", four: "four", } // It normally takes a second or two to spot the mistake. Easy to overlook. itsHardToGetThisWrong = { one: "one" , two: "two" , three: "three" , four: "four" }
有一个stream行的惯例叫做“逗号优先” ,它优雅地处理了这个问题。 作为一个奖励,如果你使用一个像Git这样的VCN,你可以使用这个约定来得到“clean diffs” 。 许多人(包括我自己)不仅认为它更健壮,而且更可读。
回到CSS
逗号优先风格的主要原因与CSS无关。 但是如果你想省略最后一个分号,并保证你的代码不受人为错误的影响,那么最好不要关注它。 它看起来像这样:
#myElement { position: absolute ; top: 0 ; left: 0 }
这是好的做法吗?
我会避而远之,因为智能缩小过程会为您处理这个问题,如果在添加新定义时忘记放置分号,则会引入错误。
它会大规模地导致更好的加载时间吗?
是的,较小的文件大小。 虽然,差异是微不足道的,缩小过程将自动做到这一点。
它可以导致浏览器“打破”?
没有
Javascript中的最后一个函数(/ jQuery)是一样的吗?
不,在函数声明结尾处排除分号是“无效的”。
根据我的经验,1)这是不好的做法2)即使在一个非常大规模的加载时间将是微不足道的。 3)不知道任何浏览器会打破这个。 4)同样适用于jQuery
对于CSS,我在IE9,FF,GC,Safari和Opera上试过了,这没有什么区别。
至于Javascript,我得到了FF和GC的错误,所以我会说不要在脚本上这样做。 至于载入时间,这个差别不会有什么明显的。