我应该使用“border:none”还是“border:0”?

这两种方法中的哪一种符合W3C标准? 他们在浏览器中的performance如何?

border:none;
border:0;

两者都是有效的。 我已经包含了下面的规范和解释。

但至于你“应该”使用…这真的取决于你和你的风格。 我更喜欢border:0因为它更短,我发现更容易阅读。 你可能更喜欢更明确。

尽pipe在评论中抱怨,它也将节省[无限小]的带宽量。 尽pipe储蓄微薄, 但对带宽的关注并不会受到影响 。 使每个字节数,你会让你的网站更快。 但是这取决于你。

规格在这里 :

 'border' Value: [ <border-width> || <border-style> || <'border-top-color'> ] | inherit Initial: see individual properties Applies to: all elements Inherited: no Percentages: N/A Media: visual Computed value: see individual properties 

您可以使用宽度/样式/颜色的任意组合。 在这种情况下,你只需要设置一个。 0设置宽度, none风格。 他们有相同的渲染结果。 没有显示。

它们实际上是等效的, 指向不同的捷径 :

 border: 0; //short for.. border-width: 0; 

和另一个..

 border: none; //short for... border-style: none; 

这两个工作,只要select一个去吧:)

正如其他人所说,这两个都是有效的,并会伎俩。 我不是100%相信他们是相同的。 如果你有一些风格级联的话,他们理论上会产生不同的结果,因为它们实际上压倒了不同的价值观。

例如。 如果你设置“border:none” 然后再有两种不同的样式来覆盖边框的宽度和样式,那么一个会做一些事情,另一个不会。

在下面的IE和Firefox的例子中,前两个testingdiv出来没有边界。 然而,第二个不同的是,第二个块中的第一个div是平淡的,而第二个块中的第二个div具有中等宽度的虚线边界。

所以,虽然他们都是有效的,但如果他们做了很多级联的话,我想你可能需要留意你的风格。

 <html> <head> <style> div {border: 1px solid black; margin: 1em;} .zerotest div {border: 0;} .nonetest div {border: none;} div.setwidth {border-width: 3px;} div.setstyle {border-style: dashed;} </style> </head> <body> <div class="zerotest"> <div class="setwidth"> "Border: 0" and "border-width: 3px" </div> <div class="setstyle"> "Border: 0" and "border-style: dashed" </div> </div> <div class="nonetest"> <div class="setwidth"> "Border: none" and "border-width: 3px" </div> <div class="setstyle"> "Border: none" and "border-style: dashed" </div> </div> </body> </html> 

(注意:这个答案已经在2014-08-01更新了,使其更加详细,更准确,并添加一个现场演示 )

扩大短缺和财产

根据W3C CSS2.1规范 ( “省略值设置为初始值” ),以下属性是等效的:

 border: hidden; border-style: hidden; border-width: medium; border-color: <the same as 'color' property> border: none; border-style: none; border-width: medium; border-color: <the same as 'color' property> border: 0; border-style: none; border-width: 0; border-color: <the same as 'color' property> 

如果这些规则是应用于元素边界的最具体规则,那么边界将不会显示,无论是因为零宽度,还是因为hidden / none风格。 所以,在第一眼看来,这三条规则看起来是相同的。 但是,如果与其他规则结合使用,则performance方式各不相同。

边框在折叠边框模型中的表格上下文中

当使用border-collapse: collapse渲染表格时,每个渲染的边框将在多个元素之间共享(内部边框将作为相邻单元格共享;外部边框将在单元格和表格本身之间共享;而且还包括行,行组,列和列组共享边界)。 规范定义了边界冲突解决的一些规则 :

  1. 具有border-styleborder-style优先于所有其他冲突边界。 […]

  2. none风格的边界优先级最低。 […]

  3. 如果没有一种样式是hidden而且其中至less有一种样式不是none ,那么窄边框将被丢弃,以支持更宽的边框。 […]

  4. 如果边框样式只有颜色不同,

所以,在表格的上下文中, border: hidden (或border-style: hidden )将具有最高的优先级,并且无论如何都将隐藏共享边框。

在优先级的另一端, border: none (或者border-style: none )的优先级最低,后面是零宽边界(因为它是最窄的边界)。 这意味着计算border-style: none border-width: 0计算值基本相同。

级联规则和inheritance

由于none0会影响不同的属性( border-styleborder-width ),因此当更具体的规则定义样式或宽度时,它们的行为会有所不同。 看到克里斯回答一个例子。

现场演示 !

想要在单个页面中看到所有这些情况? 打开现场演示

运用

 border: none; 

在某些版本的IE中不起作用。 IE9是好的,但在以前的版本中,即使样式为“无”,也会显示边框。 我在使用打印样式表时遇到过这种情况,我不想在input框上input边框。

 border: 0; 

似乎在所有的浏览器中工作正常。

您可以简单地使用Oli提供的规范。

我总是用border:0 none;

尽pipe单独指定它们并没有什么坏处,但是如果使用传统的CSS1属性调用,某些浏览器将更快地parsingCSS。

虽然border:0; 通常会默认边框样式为none ,但我注意到一些浏览器强制执行默认边框样式,可能会奇怪地覆盖border:0;

我用:

 border: 0; 

从CSS 2.1中的8.5.4开始 :

'边境'

值: [<border-width> || <border-style> || <'border-top-color'>] | inheritance

所以你的方法看起来很好。

尽pipe结果很可能是相同的(没有边界),但是没有一个在技术上处理不同的事情。

0地址边框宽度和无地址边框样式。 显然0宽度的边框不存在,因此将没有样式。

但是,如果在你的样式表的后面,你打算重写这个,你自然会专门处理一个或另一个。 如果我现在想要一个3像素的边框,这将直接覆盖边框:关于宽度。 如果我现在想要一个虚线的边框,这将直接覆盖边框:没有关于造型。

在我看来,

border:none工作,但没有有效的W3C标准

所以我们可以使用border:0;