省略CSS块的最后一个分号

时间:2012-08-13 17:52:37

标签: jquery css syntax

有关此问题的几个问题:

  • 这是好习惯吗?
  • 它会大规模地产生更好的加载时间吗?
  • 是否会导致浏览器破坏?
  • 对于Javascript(/ jQuery)中的最后一个函数是否一样?

我的意思是这样的东西:

#myElement {
  position: absolute;
  top: 0;
  left: 0
}

9 个答案:

答案 0 :(得分:74)

  

这是好的做法吗?

手动排除分号是不好的做法。这纯粹是因为在添加更多样式时很容易忽略,特别是如果你在团队中工作:

想象一下你从:

开始
.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压缩器,例如YUI Compressor来自动删除结束的分号。

  

是否会导致浏览器破解?

不,这是安全的,因为浏览器正确地实现了规范的这一部分。 The CSS2 specification因此定义了一个声明:

  

声明为空或由属性名称组成,后跟冒号(:),后跟属性值。

更重要的是:

  

...同一个选择器的多个声明可以组织成分号(;)分隔的组。

这意味着;用于分隔多个声明,但不需要终止它们。

  

Javascript中的最后一个函数是否相同?

JavaScript是一个完全不同规格的完全不同的野兽。这个特殊问题已经得到了深入的回答many times before on Stack Overflow

答案 1 :(得分:9)

  • 不,省略分号会在您的应用程序中引入大量风险,如果您为元素添加更多样式,将很容易忽略添加它。此时,您依赖于您的手动流程和对细节的关注,以确保您没有意外地错位您的非分号行。更糟糕的是,每次准备好进行制作时,你都必须亲自检查你的css文件,以确保你没有搞砸每个元素中的任何最终样式行。

  • 可能,因为文件会更小,但差异应该可以忽略不计。如果您担心加载时间,在将文件放到服务器上之前Gzipping文件将为您提供良好的服务。

  • 大多数浏览器都足够聪明,知道你的意思,但你仍然不必担心因为不注意最后一种风格而搞砸你的CSS文件。

答案 2 :(得分:4)

  • 这是好习惯吗?

在我看来,没有。如果在最后一条规则下添加规则,则很容易忘记添加分号。

  • 它会大规模地产生更好的加载时间吗?

无法想象它会在加载时间方面产生很大的影响。

  • 是否会导致浏览器破坏?

不,分号只需要在CSS块中分隔规则。分号是分隔符,而不是终结符。

  • 对于Javascript(/ jQuery)中的最后一个函数是否一样?

是的,不要将它留在JavaScript解释器中添加分号。

答案 3 :(得分:1)

它会稍微改善加载时间。有足够大的CSS文件,它甚至可以引人注目(好吧,整体缩小可以;我怀疑只是删除最后一个分号就足够了。)

但是,如果您非常关心加载时间,那么您应该使用程序来缩小CSS,而不是手动尝试。缩小的CSS(几乎)无法读取。在“源代码”中使用它是一种不好的做法,因为它很容易忘记它。

答案 4 :(得分:1)

这是一个重复的问题。见这里:

Semicolon in CSS

关于在JavaScript中应用分号,函数不应以分号结尾,除非它们以声明方式分配,即。 var a = function() {};但是,如果您无意中(或故意)将它们排除在外,浏览器会执行自动分号插入。

答案 5 :(得分:1)

删除declaration stops不会“破坏”浏览器,但仍应留给自动缩小器(特别是如果你关心加载时间 - 单独的分号不会累加太多)但是应该避免使用可维护性原因的来源。

如果您正在寻找最佳做法,那么Google css样式指南中的CSS formatting rules是一个非常好的起点 - 不要盲目地应用他们的建议,而是要了解他们背后的推理。

  

每次声明后都使用分号。用a结束每个声明   分号是出于一致性和可扩展性的原因。

/* Not recommended */
.test {
  display: block;
  height: 100px
}
/* Recommended */
.test {
  display: block;
  height: 100px;
}

Javascript是一个不同的故事 - 简短的回答是始终使用分号,从不依赖于隐式插入,但我从未见过比Google {{{ 3}}:

  

有几个地方特别缺少分号   危险:

// 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();
  

那会发生什么?

     
      
  1. JavaScript错误 - 首先调用返回函数42   第二个函数作为参数,然后数字42被“调用”   导致错误。
  2.   
  3. 你很可能会得到'没有这样的财产   运行时尝试调用x[ffVersion][isIE]()时出现“未定义”错误。
  4.   除非dieresultOfOperation()NaN获得,否则会调用
  5. THINGS_TO_EAT   分配了die()
  6. 的结果         

    为什么?

         

    JavaScript要求语句以分号结尾,除非是分号   认为它可以安全地推断它们的存在。在每个例子中,   一个函数声明或对象或数组文字在一个内部使用   声明。结束括号不足以表示结束   该声明。如果下一个令牌是,Javascript永远不会结束语句   中缀或支架运算符。

         

    这让人很惊讶,所以请确保你的作业结束   用分号。

答案 6 :(得分:0)

  

这是好的做法吗?

我会回避它,因为聪明的缩小过程会为你处理这个问题,如果你在添加新定义时忘记放置分号,就会引入错误。

  

它会大规模地产生更好的加载时间吗?

是的,文件较小。虽然,差异可以忽略不计,缩小过程会自动执行此操作。

  

是否会导致浏览器“破解”?

没有

  

对于Javascript(/ jQuery)中的最后一个函数是否一样?

不,在函数语句末尾排除分号是“无效的”。

答案 7 :(得分:0)

根据我的经验,1)这不是好的做法2)即使在非常大的规模上,加载时间也是微不足道的。 3)不知道任何浏览器会破坏它。 4)同样适用于jQuery

答案 8 :(得分:0)

对于CSS,我在IE9,FF,GC,Safari和Opera上试过这个,但它没有什么区别。

至于Javascript,我在FF和GC上遇到错误,所以我想说不要在脚本上执行此操作。至于加载时间,差异将无论如何都不会明显。