CSS中边框和轮廓属性的区别是什么?

如果没有区别,为什么同一事物有两种性质?


当前回答

CSS中的outline属性在元素的外部画一条线。它和border很相似,只是:

它总是围绕所有的边,你不能指定具体的 它不是盒子模型的一部分,所以它不会影响 元素或相邻元素的位置

来源:https://css-tricks.com/almanac/properties/o/outline/

其他回答

除了一些其他的答案之外……以下是我能想到的更多不同之处:

1)圆角

Border使用Border -radius属性支持圆角。大纲没有。

div { width: 150px; height: 150px; margin: 20px; display: inline-block; position: relative; } .border { border-radius: 75px; border: 2px solid green; } .outline { outline: 2px solid red; border-radius: 75px; -moz-outline-radius: 75px; outline-radius: 75px; } .border:after { content: "border supports rounded corners"; position: absolute; bottom: 0; transform: translateY(100%); } .outline:after { content: "outline doesn't support rounded corners"; position: absolute; bottom: 0; transform: translateY(100%); } <div class="border"></div> <div class="outline"></div>

小提琴

(注意:虽然firefox有-moz-outline-radius属性,允许在轮廓上使用圆角…此属性在任何CSS标准中都没有定义,其他浏览器也不支持(源代码))

2)只做一面造型

Border具有属性,可以用Border -top:、Border -left:等来设置每条边的样式。

大纲不能这样做。没有大纲等等。要么全有,要么全无。(见这篇SO帖子)

3)抵消

Outline支持使用Outline -offset属性的偏移量。边界不。

.outline { 保证金:100 px; 宽度:150 px; 身高:150 px; outline-offset: 20 px; 轮廓:2px实心红色; 边框:2px纯绿色; 背景:粉色; } < div class = "大纲" > < / div >

小提琴

注意:除Internet Explorer外,所有主流浏览器都支持outline-offset

大纲的实际应用涉及透明度。如果你有一个带有背景的父元素,但是想让子元素的边框透明,这样父元素的背景就能显示出来,你必须使用“outline”而不是“border”。虽然边框可以是透明的,但它将显示子元素的背景,而不是父元素的背景。

换句话说,这种设置产生了以下效果:

outline: 7px solid rgba(255, 255, 255, 0.2);

tldr;

W3C将其解释为以下区别:

大纲不占用空间。 轮廓可以是非矩形的。

大纲应用于可访问性

还应该注意到大纲的主要目的是可访问性。将其设定为大纲:应该避免任何内容。

如果你必须删除它,它可能是一个更好的主意提供替代样式:

我看过很多关于如何使用outline:none或outline:0删除焦点指示器的技巧。请不要这样做,除非您将大纲替换为其他内容,以便于查看哪个元素具有键盘焦点。移除键盘焦点的视觉指示器会让那些依赖键盘导航的人在导航和使用你的网站时变得非常困难。

来源:“不要从链接和窗体控件中删除轮廓”,365 Berea Street


更多的资源

http://outlinenone.com/

谷歌web.dev对盒子模型有一个很好的解释。

边框框围绕填充框,其空间由边框值占用。边界框是方框的边界,边界边缘是视觉上可以看到的范围。border属性用于可视化地为元素设置框架。

边距框,是你的方框周围的空间,由方框的边距规则定义。轮廓和框影等属性也占用了这个空间,因为它们被绘制在顶部,所以它们不会影响框的大小。你可以在我们的盒子上设置一个200px的轮廓宽度,包括边框在内的所有东西都将是完全相同的大小。

来自:http://webdesign.about.com/od/advancedcss/a/outline_style.htm

CSS outline属性是一个令人困惑的属性。当你第一次了解它时,你很难理解它与边境财产有什么不同。W3C将其解释为以下区别: 大纲不占用空间。 轮廓可以是非矩形的。