有人知道CSS中“边框”和“轮廓”属性之间的区别吗?如果没有区别,那么为什么同一事物有两个属性?
有人知道CSS中“边框”和“轮廓”属性之间的区别吗?如果没有区别,那么为什么同一事物有两个属性?
Answers:
来自:http : //webdesign.about.com/od/advancedcss/a/outline_style.htm
CSS outline属性是一个令人困惑的属性。当您第一次学习它时,很难理解它与border属性之间的区别。W3C将其解释为具有以下差异:
1.轮廓不占用空间。
2.轮廓线可能不是矩形的。
除了其他答案之外,我还能想到一些其他差异:
border
支持带有border-radius
属性的圆角。outline
不。
(注:尽管firefox具有-moz-outline-radius
允许在轮廓上圆角的属性...此属性在任何CSS标准中均未定义,并且其他浏览器也不支持(源))
border具有一些属性border-top:
,可使用border-left:
等对每一侧进行样式设置。
大纲不能做到这一点。没有大纲顶部:等。全部或全部。(请参阅此SO帖子)
outline通过属性outline-offset支持offset。边境没有。
注意:outline-offset
除Internet Explorer之外,所有主要浏览器均支持
outlines
渲染速度快于边框?
W3C将其解释为具有以下差异:
还应注意,提纲的主要目的是可访问性。设置轮廓:不应避免。
如果必须将其删除,则最好提供其他样式:
我已经看到了很多有关如何通过使用outline:none或outline:0删除焦点指示器的提示。请不要执行此操作,除非您用其他方式替换了轮廓,以便于查看哪个元素具有键盘焦点。删除键盘焦点的视觉指示器将使依赖键盘导航的人们很难导航和使用您的网站。
来源:“不要从链接和表单控件中删除大纲”,Berea Street 365
大纲的实际使用涉及透明度。如果您有一个带有背景的父元素,但是希望子元素的边框是透明的以便父元素的背景可以显示出来,则必须使用“轮廓”而不是“边框”。虽然边框可以是透明的,但它会显示孩子的背景,而不是父母的背景。
换句话说,此设置具有以下效果:
outline: 7px solid rgba(255, 255, 255, 0.2);
background-clip: padding-box;
样式,边框也会产生相同的效果。.:)
从W3学校站点
该CSS边框属性允许你指定元素边框的样式和颜色。
一个轮廓是绘制围绕单元(境外)的线路,使“鹤立鸡群”的元素。
大纲速记属性在一个声明中设置所有大纲属性。
可以设置的属性是(按顺序):轮廓颜色,轮廓样式,轮廓宽度。
如果缺少上述值之一,例如“ outline:solid#ff0000;”,则将插入缺少属性的默认值(如果有)。
在此处查看更多信息:http : //webdesign.about.com/od/advancedcss/a/outline_style.htm
有点老问题了,但值得一提的是Firefox渲染错误(自13年1月起仍然存在),即使所有子元素都溢出了父元素,边框也会在所有子元素的外部渲染(通过负边距,框阴影)等)
您可以使用以下方法解决此问题:
.container {
position: relative;
}
.container:before {
content: '';
margin: 0;
padding: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
outline: 1px solid #ff0000;
}
超级不幸的是,它仍然没有修复。在许多情况下,我更喜欢轮廓,因为它们不会增加元素的尺寸,从而使您不必在设置元素的尺寸时始终考虑边框宽度。
毕竟,哪个更简单?
.container {
width: 960px;
height: 300px;
outline: 3px solid black;
}
要么:
.container {
width: 954px;
height: 294px;
border: 3px solid black;
}
box-sizing
尝试,请尝试一下!链接
值得注意的是,W3C的轮廓是IE的边界,因为IE没有实现W3C盒模型。
在w3c盒子模型中,边框不包括元素的宽度和高度。在IE中是包容性的。
CSS中的outline属性在元素的外部绘制一条线。它与border类似,除了:
作为使用“大纲”的实际示例,可以使用outline属性(至少,我知道在Firefox中可以控制),使系统关注网页后的模糊虚线边框(例如,如果您通过链接进行制表) ,未尝试使用其他浏览器)。
常见的“图像替换”技术是使用,例如:
<div id="logo"><a href="/">Foo Widgets Ltd.</a></div>
CSS中包含以下内容:
#logo
{
background: url(/images/logo.png) center center no-repeat;
}
#logo a
{
display: block;
text-indent: -1000em;
}
问题在于,当焦点到达标签时,轮廓向左移1000em。轮廓可以使您关闭此类元素上的焦点轮廓。
我相信IE开发人员工具栏在“选择”模式下突出显示要检查的元素时,也会使用诸如“引擎盖下”的轮廓。这很好地说明了“概述”不占用空间的事实。
将轮廓线视为投影机在某物外部绘制的边界,因为边界是该物周围的实际对象。
投影可以很容易地重叠,但是边界不允许您通过。
有时当我使用时grid+%width
,border会改变视口的缩放比例,例如width:100%
父级中的div width:100px
完全填充了父级,但是当我添加border:solid 5px
div时,它会使div变小以留出边框空间(尽管这种情况很少见并且可以解决!),
但使用大纲则不会出现此问题,因为大纲是更虚拟的:D它只是元素外部的一条线,但问题是如果您不正确地进行间距,它将与其他内容重叠。
简而言之:
概述优点:
不影响间距和位置
缺点:
重叠的可能性很高
边框和轮廓之间的差异:
边框是盒子模型的一部分,因此它取决于元素的大小。轮廓不是盒子模型的一部分,因此它不会影响附近的元素。
演示:
#border {
border: 10px solid black;
}
#outline {
outline: 10px solid black;
}
<html>
<body>
<span id="border">Border</span>Other text<br><br>
<span id="outline">Outline</span>Other text
</body>
</html>