CSS 外边框

问题描述 投票:0回答:8

我希望能够在 Div 之外绘制边框!因此,如果我的 div 是 20px x 20px,我想要在其外部有一个 1px 边框(所以本质上,我得到一个 22x22px 大的 div)。

我知道我可以先将 div 设为 22x22,但由于我的原因,我需要将边框设置在外面。

CSS 轮廓有效,但我只想要 border-bottom 或 border-top 的东西,所以像outline-bottom 这样不起作用的东西才是我想要的。

有办法做到这一点吗?

谢谢

css border
8个回答
113
投票

我认为您对这两个属性的理解有所偏差。边框影响元素的外边缘,使元素的大小不同。轮廓不会改变元素的大小或位置(不占用空间)并且超出边框。根据您的描述,您想使用 border 属性。

在浏览器中查看下面的简单示例:

<div style="height: 100px; width: 100px; background: black; color: white; outline: thick solid #00ff00">SOME TEXT HERE</div>

<div style="height: 100px; width: 100px; background: black; color: white; border-left: thick solid #00ff00">SOME TEXT HERE</div>

注意边框如何将底部 div 推倒,但轮廓不会移动顶部 div,并且轮廓实际上与底部 div 重叠。

您可以在这里阅读更多相关信息:
边框
概要


30
投票

尝试使用outline属性CSS Outline

轮廓不会干扰元素/div 的宽度和长度!

请单击我在底部提供的链接,查看工作演示,了解制作边框和内/内嵌边框的不同方式,甚至是不破坏元素尺寸的边框!不需要每次都添加额外的 div,正如另一个答案中提到的!

您还可以将边框与轮廓相结合,如果您愿意,还可以将框阴影(也通过链接显示)

<head>
   <style type="text/css" ref="stylesheet">
      div {
        width:22px;
        height:22px;
        outline:1px solid black;
      }
   </style>
</head>
<div>
    outlined
</div>

通常默认情况下,“边框:”将边框放在宽度、测量值的外部,添加到整体尺寸中,除非您使用“插入”值:

div {border: inset solid 1px black};

但是“outline:”是边框之外的额外边框,当然仍然会为元素添加额外的宽度/长度。

PS:我也受到启发为你做这个使用边框、轮廓和框阴影


16
投票

IsisCode 为您提供了一个很好的解决方案。另一种是将边框 div inside 父 div 定位。检查这个例子http://jsfiddle.net/A2tu9/

UPD: 您还可以使用伪元素

:after
:before
),在这种情况下,HTML 不会被额外的标记污染:

.my-div {
    position: relative;
    padding: 4px;
    ...
}
.my-div:after {
    content: '';
    position: absolute;
    top: -3px;
    left: -3px;
    bottom: -3px;
    right: -3px;
    border: 1px #888 solid;
}

演示:http://jsfiddle.net/A2tu9/191/


14
投票

为什么不简单地使用

background-clip

-webkit-background-clip: padding;
   -moz-background-clip: padding;
        background-clip: padding-box;

参见:
http://caniuse.com/#search=background-clip
https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip
https://css-tricks.com/almanac/properties/b/background-clip


11
投票

我根据您的需求分享了两种解决方案:

<style type="text/css" ref="stylesheet">
  .border-inside-box {
    border: 1px solid black;
  }
  .border-inside-box-v1 {
    outline: 1px solid black; /* 'border-radius' not available */
  }
  .border-outside-box-v2 {
    box-shadow: 0 0 0 1px black; /* 'border-style' not available (dashed, solid, etc) */
  }
</style>

示例:https://codepen.io/danieldd/pen/gObEYKj


10
投票

晚了,但我刚刚遇到了类似的问题。
我的解决方案是伪元素 - 没有额外的标记,并且您可以在不影响宽度的情况下绘制边框。
绝对定位伪元素(主元素相对定位)并且whammo。

见下文,JSFiddle在这里

.hello {
    position: relative;
    /* Styling not important */
    background: black;
    color: white;
    padding: 20px;
    width: 200px;
    height: 200px;
}

.hello::before {
    content: "";
    position: absolute;
    display: block;
    top: 0;
    left: -5px;
    right: -5px;
    bottom: 0;
    border-left: 5px solid red;
    border-right: 5px solid red;
    z-index: -1;
}

4
投票

将您的 div 放入另一个 div 中,将边框应用到外部 div,并使用 n 数量的填充/边距,其中 n 是您想要的它们之间的空间。


1
投票

尝试添加

box-sizing: content-box;

(而不是

box-sizing: border-box;

© www.soinside.com 2019 - 2024. All rights reserved.