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

Joh*_*man 517 css border

这两种方法中的哪一种符合W3C标准?它们是否都在浏览器中按预期运行?

border:none;
边界:0;

Oli*_*Oli 430

两者都有效.这是你的选择.

我更喜欢border:0因为它更短; 我发现更容易阅读.你可能会发现none更清晰.我们生活在一个非常有能力的CSS后处理器世界中,所以我建议你使用你喜欢的任何东西,然后通过"压缩器"运行它.这里没有值得战斗的圣战.

所有人都说,如果你手写所有的制作CSS,我会保持 - 尽管评论中抱怨 - 但带宽意识并没有伤害.使用border:0 节省无限量的带宽.就其自身而言非常重要,但如果你计算每个字节数,你将使你的网站更快.

CSS2规范在这里.这些在CSS3中得到了扩展,但与此无关.

'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 
Run Code Online (Sandbox Code Playgroud)

您可以使用宽度,样式和颜色的任意组合.
在这里, 0设置宽度,none样式.它们具有相同的渲染结果:没有显示任何内容.

  • *"如果你有很多流量,你会注意到差异!"* - 我非常怀疑.即使每小时有一百万访客,差异也只有3MB.并且假设这些访问者都没有缓存CSS,并且还假设压缩提供了0个好处,这两个都是非常不可能的陈述.实际上,它每天可能有几百KB的差异,对于大型网站来说基本上是0.不是我认为`border:none`在某种程度上更好,但使用它作为你的推理是错误的. (113认同)
  • @ BlueRaja-DannyPflughoeft这比其他任何东西都更讽刺......或者夸张......或两者兼而有之.你是对的,这可能永远不会对任何东西产生运行效果,除非你使用它数千万次并让互联网上的每个人一次访问你的CSS. (21认同)
  • 我是唯一一个回到这里加油的人吗? (8认同)
  • 为了完整起见,我想添加另一个方面.转移1MB的数据需要普通木炭压块中所含的能量.请参阅TED关于Jay Walkers的演讲:https://player.vimeo.com/video/22399003. (6认同)
  • 也许值得在描述中添加声明是讽刺性的?:) (5认同)

Nic*_*ver 147

他们是等价的效果,指向不同的快捷方式:

border: 0;
//short for..
border-width: 0;
Run Code Online (Sandbox Code Playgroud)

和另外一个..

border: none;
//short for...
border-style: none;
Run Code Online (Sandbox Code Playgroud)

两个都工作,只需选择一个,然后继续:)

  • @Dubs认真吗?,你喜欢什么时候人们链接到w3schools? (56认同)
  • @ ajax333221 - 小心对待w3schools(或*any*网站)的黑白态度.*在这种情况下*描述很好,而我一般都讨厌它们,因为它与这个问题有关的解释是正确和相当简洁的.你可以自由地讨厌它们,而且我这样做,但是不要假设0%的内容是有用的,有些是,甚至雅虎答案中的某些内容在某种程度上都是有用的. (27认同)
  • 另请注意["长度为零后,单位标识符为可选"](http://www.w3.org/TR/CSS21/syndata.html#value-def-length"4语法和基本数据类型") ,所以`border:0;`是有效的. (5认同)
  • 错误!如[我的回答](http://stackoverflow.com/a/24834322/)所述,并在[现场演示](http://codepen.io/denilsonsa/pen/LkdHh?editors=110)中进行了演示, border:0`不是`border-width:0`的快捷方式.相反,短版本总是设置所有三个属性:`border-color`,`border-style`和`border-width`. (4认同)
  • @DenilsonSá我说它们与答案的第一行有效**因为如果边框的宽度为0,则其他2在这里无关紧要.顺便说一下,CSS 2.1澄清了这里的行为是这个答案后7个月的最后一次电话会议,并在推迟一年之后作为推荐.如果你想在这里澄清旧的答案,请这样做!积极鼓励编辑更新. (3认同)
  • @ ajax33221,当我第一次在互联网上学习wwebsite时,我用它们作为一种方便的资源.感谢您将[问题](http://w3fools.com)引起我的注意! (2认同)

Chr*_*ris 41

正如其他人所说,两者都是有效的,并且会做到这一点.我不是100%确信它们是相同的.如果你有一些风格级联,那么它们理论上可以产生不同的结果,因为它们有效地覆盖了不同的值.

例如.如果设置"border:none;" 然后有两种不同的样式覆盖边框宽度和样式,然后一个会做某事而另一个不会.

在IE和firefox的以下示例中,前两个测试div没有边框.然而,第二个不同,第二个块中的第一个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>
Run Code Online (Sandbox Code Playgroud)


Den*_*aia 36

(注意:此答案已在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>
Run Code Online (Sandbox Code Playgroud)

如果这些规则是应用于元素边界的最具体的规则,则不会因为零宽度或hidden/ nonestyle 而显示边框.所以,初看起来,这三条规则看起来是等价的.但是,当与其他规则结合使用时,它们会以不同的方式运行.

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

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

  1. 与国界border-stylehidden优先于所有其他冲突的边框.[...]

  2. none具有最低优先级的边框.[...]

  3. 如果没有样式,hidden并且其中至少有一个不是none,那么将丢弃窄边框以支持更宽的样式.[...]

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

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

在优先级的另一端,border: none(或border-style: none)具有最低优先级,后跟零宽度边界(因为它是最窄的边界).这意味着,一个计算值border-style: none计算出的值border-width: 0基本上是相同的.

级联规则和继承

由于none0影响不同的属性(border-styleborder-width),当更具体的规则仅定义样式或仅宽度时,它们的行为会有所不同.请参阅克里斯答案的示例.

现场演示!

想在一个页面中查看所有这些案例吗?打开现场演示!


小智 21

运用

border: none;
Run Code Online (Sandbox Code Playgroud)

在某些版本的IE中不起作用.IE9很好,但在以前的版本中,即使样式为"none",它也会显示边框.我在使用打印样式表时遇到了这种情况,我不想在输入框上使用边框.

border: 0;
Run Code Online (Sandbox Code Playgroud)

似乎在所有浏览器中都能正常工作.


小智 11

您可以根据Oli提供的规格简单地使用两者.

我总是用border:0 none;.

虽然单独指定它们没有什么害处,但如果你使用传统的CSS1属性调用,一些浏览器会更快地解析CSS.

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

  • 一些浏览器?你是什​​么意思?好像是在做梦什么的。 (2认同)

cle*_*tus 6

我用:

border: 0;
Run Code Online (Sandbox Code Playgroud)

CSS 2.1中的8.5.4开始:

'边界'

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

所以你的任何一种方法都很好看.

  • 为什么要设置宽度和样式?重点是什么? (6认同)

Age*_*zig 6

好吧,为了准确地看到 和 之间的区别border: 0border: none我们可以做一些实验。

实验:

让我们创建三个 div,第一个 div 的边框只能通过将其宽度设置为零来禁用,第二个只能通过将其样式设置为 none 来禁用,第三个的边框只能通过将其设置为“禁用”颜色为透明。然后让我们尝试一下效果:

  • border: 0;
  • border: none;
  • border: transparent

    边框样式:solid!important; 边框颜色:红色!重要;边框宽度:2px!重要;边框颜色:红色!重要;边框宽度:2px!重要;边框样式:solid!important;

var container = document.querySelector('#container');
var btnSetZero = document.querySelector('#setZero');
var btnSetNone = document.querySelector('#setNone');
var btnSetTransparent = document.querySelector('#setTransparent');
var btnReset = document.querySelector('#reset');
btnSetZero.addEventListener('click', () => {
	container.className = "border-zero";
});

btnSetNone.addEventListener('click', () => {
	container.className = "border-none";
});

btnSetTransparent.addEventListener('click', () => {
	container.className = "border-transparent";
});

btnReset.addEventListener('click', () => {
	container.className = "";
});
Run Code Online (Sandbox Code Playgroud)
div div {
  border: 2px solid red;
  margin: 2px;
  font-family: monospace;
  white-space: nowrap;
  width: 250px;
}

div.border-zero div {
  border: 0;
}
div.border-none div {
  border: none;
}
div.border-transparent div {
  border: transparent;
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
  <div style="border-style: solid!important; border-color: red!important;">
    border-style: solid!important;<br>
    border-color: red!important;
  </div>
  <div style="border-width: 2px!important; border-color: red!important;">
    border-width: 2px!important;<br>
    border-color: red!important;
  </div>
  <div style="border-width: 2px!important; border-style: solid!important;">
    border-width: 2px!important;<br>
    border-style: solid!important;
  </div>
</div>

<button id="setZero">border: 0;</button>
<button id="setNone">border: none;</button>
<button id="setTransparent">border: transparent;</button>
<button id="reset">reset</button>
Run Code Online (Sandbox Code Playgroud)

我的结果在 Firefox 和 chrome 中都是一样的:

border: 0;似乎将 border-width0和 border-style 设置为none,但不更改边框颜色;

border: none;似乎只改变边框样式(到none);

border: transparent;似乎将 border-colortransparent和 border-style 改为none;