我有一个<div>元素,我想给它加一个边框。我知道我可以写style="border: 1px solid black",但这将在div的两侧增加2px,这不是我想要的。
我更希望这个边界距离div的边缘为-1px。div本身是100px x 100px,如果我添加一个边界,那么我必须做一些数学运算来使边界出现。
有什么方法我可以使边界出现,并确保盒子将仍然是100px(包括边界)?
我有一个<div>元素,我想给它加一个边框。我知道我可以写style="border: 1px solid black",但这将在div的两侧增加2px,这不是我想要的。
我更希望这个边界距离div的边缘为-1px。div本身是100px x 100px,如果我添加一个边界,那么我必须做一些数学运算来使边界出现。
有什么方法我可以使边界出现,并确保盒子将仍然是100px(包括边界)?
当前回答
我知道这有点老了,但由于关键字“内部边界”直接把我带到了这里,我想分享一些值得在这里提到的发现。 当我在悬停状态上添加边界时,我得到了OP所说的效果。边框的广告像素与盒子的尺寸一致,这使它跳动。 还有另外两种方法也适用于IE7。
1) 有一个边界已经附加到元素,并简单地改变颜色。这种方法已经包含了数学。
div {
width:100px;
height:100px;
background-color: #aaa;
border: 2px solid #aaa; /* notice the solid */
}
div:hover {
border: 2px dashed #666;
}
2) 用负边缘补偿你的边界。这仍然会增加额外的像素,但元素的位置不会跳跃
div {
width:100px;
height:100px;
background-color: #aaa;
}
div:hover {
margin: -2px;
border: 2px dashed #333;
}
其他回答
使用伪元素:
.button { 背景:# 333; 颜色:# fff; 浮:左; 填充:20 px; 保证金:20 px; 位置:相对; } {后.button:: 内容:”; 位置:绝对的; 上图:0; 右:0; 底部:0; 左:0; 边框:5px solid #f00; } < div class =”按钮“> < / div >你好
在样式化选定元素的虚拟最后一个子元素之后使用::。内容属性创建匿名替换元素。
我们使用相对于父元素的绝对位置来包含伪元素。然后你可以自由地在你的主元素的背景中设置任何自定义背景和/或边框。
这种方法不会影响主元素内容的位置,这与使用box-sizing: border-box;不同。
想想这个例子:
.parent { 宽度:200 px; } .button { 背景:# 333; 颜色:# fff; 填充:20 px; 边框:5px solid #f00; border-left-width: 20 px; box-sizing: border-box; } < div class =“父”> < div class =”按钮“> < / div >你好 < / div >
这里.button的宽度使用父元素约束。设置左边框宽度可以调整内容框大小,从而调整文本的位置。
.parent { 宽度:200 px; } .button { 背景:# 333; 颜色:# fff; 填充:20 px; 位置:相对; } {后.button:: 内容:”; 位置:绝对的; 上图:0; 右:0; 底部:0; 左:0; 边框:5px solid #f00; border-left-width: 20 px; } < div class =“父”> < div class =”按钮“> < / div >你好 < / div >
使用伪元素方法不会影响内容框的大小。
根据应用程序的不同,使用伪元素的方法可能是也可能不是理想的行为。
为了在新旧浏览器之间保持一致的呈现,可以添加一个双容器,外部的容器具有宽度,内部的容器具有边框。
<div style="width:100px;">
<div style="border:2px solid #000;">
contents here
</div>
</div>
这显然只在精确宽度比额外标记更重要的情况下才会发生!
雅虎这真的是可能的。我找到了。
对于底部边界:
div {box-shadow: 0px -3px 0px red inset; }
Top Border:
div {box-shadow: 0px 3px 0px red inset; }
我在上面没有看到的一个解决方案是在输入上填充,我99%的时间都是这样做的。你可以按照……
input {
padding: 8px;
}
input.invalid {
border: 2px solid red;
padding: 6px; // 8px - border or "calc(8px - 2px)"
}
我喜欢的是,我有一个完整的菜单,每边的边框+填充+过渡属性。
你可以使用属性outline和outline-offset带负值,而不是使用常规边框,适合我:
div { 身高:100 px; 宽度:100 px; 背景颜色:灰色; margin-bottom: 10 px; } {div#边界 边框:2px纯红色; } div #{轮廓 轮廓:2px实心红色; outline-offset: 2 px; } 使用常规边界。 < div id = "边境" > < / div > 使用outline和outline-offset。 < div id = "大纲" > < / div >