如何在不使用border-width的整个元素宽度的情况下使用CSS为任何元素赋予边框?


101

如何在不使用border-width的整个元素宽度的情况下使用CSS为任何元素赋予边框?

像在Photoshop中一样,我们可以给笔画-内部,中心和外部

我认为默认的CSS边框属性是中心,如photoshop中的中心,对吗?

我想在框内而不是外面给边框。并且不想在框宽中包含边框宽度。

Answers:


221
outline:1px solid white;

这不会增加额外的宽度和高度。


10
注意:轮廓未定义边,因此仅在所有边均设置样式后才有效。
Screenack

1
我添加了一个答案,使您可以仅边界一侧。
mikevoermans

1
只是注意,它不会遵循元素上可能具有的任何边框半径的曲线,因此最终将得到正方形边框。
limitlessloop

2
但是它不支持半径。
天空

29

查看CSS框大小...

大小可调的CSS3属性可以做到这一点。border-box的值(与content-box的默认值相对)使最终渲染的框成为声明的宽度,并在框内剪切任何边框和填充。现在,您可以安全地声明元素的宽度为100%(包括基于像素的填充和边框),并完美实现目标。

  • -webkit-box-sizing:边框框; / * Safari / Chrome,其他WebKit * /
  • -moz-box-sizing:边框框;/ * Firefox,其他壁虎* /
  • 框大小:border-box;/ * Opera / IE 8+ * /

我建议创建一个mixin来为您处理。您可以在W3c上找到有关尺寸调整的更多信息,网址为http://www.w3schools.com/cssref/css3_pr_box-sizing.asp


1
这是最好的答案,尽管我认为您并不是真的需要所有前缀。caniuse.com/#feat=css3-boxsizing
贾斯汀

2
^贾斯汀是正确的,您不再需要前缀。box-sizing就足够了。
乍得

25

您可以使用该box-shadow属性,具体取决于所需的浏览器支持。

您可以将模糊值设置为0,将色散设置为所需的厚度。关于框阴影的妙处在于,您可以控制它是在外部(默认情况下)还是在内部(使用inset属性)绘制。

例:

box-shadow: 0 0 0 1px black; // Outside black border 1px

要么

box-shadow: 0 0 0 1px white inset; // Inside white border 1px

使用盒子阴影的一大优点是可以通过使用多个盒子阴影来发挥创意:

box-shadow: 0 0 0 3px black, 0 0 0 1px white inset;

我唯一不能说的是,这将使渲染性能明智地有所不同。我想如果您一次有数百个元素在屏幕上使用此技术,则可能会成为一个问题。


16

我遇到了同样的问题。

.right-border {
    position: relative;
}

.right-border:after {
    content: '';
    display: block;
    position: absolute;
        top: 0; right: 0;
    width: 1px;
    height: 100%;
    background: #e0e0e0;
}

此答案使您可以指定一个面。并且可以在IE8 +中工作-与使用盒子阴影不同。

当然,您需要根据具体情况来更改伪元素的属性。

*新增和改进*

&:before {
content: '';
display: block;
position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
border: 1px solid #b7b7b7;
}

这样就可以使用边框并击中盒子的多个侧面。


8

使用box-sizing: border-box以创建一个边界INSIDE一个div,而无需修改DIV宽度。

用于outline在div 外部创建边框而无需修改div宽度。

这是一个例子:https : //jsfiddle.net/4000cae9/1/

注意: border-boxIE目前不支持

支持:

http://caniuse.com/#feat=outline

http://caniuse.com/#search=border-box

#test, #test2 {
    width: 100px;
    height:100px;
    background-color:yellow;
}
#test {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    border: 10px dashed blue;
}
#test2 {
    outline: 10px dashed red;
}


<p>Use box-sizing: border-box to create a border INSIDE a div without modifying div width.</p>
<div id="test">border-box</div>
<p>Use outline to create a border OUTSIDE a div without modifying div width.</p>
<div id="test2">outline</div>

6

正如阿本森说的那样,您可以使用轮廓,但要注意的是Opera可能会绘制“非矩形”形状。另一个可行的选择是使用负边距,例如以下CSS:

div {
  float:left;
  width: 50%;
  border:1px solid black;
  margin: -1px;

}

与此HTML:

<body>
  <div>A block</div>
  <div>Another block</div>
</body>

另一种不太干净的选择是向html添加额外的标记。例如,设置外部元素的宽度并将边框添加到内部元素。CSS:

.outer { width: 50%; float: left;}
.inner { border: 1px solid black; }

和html:

<body>
  <div class="outer">
    <div class="inner">A block</div>
  </div>
  <div class="outer">
    <div class="inner">Another block</div>
  <div>
</body>

3

没有边框时,请使用填充。有边框时,请删除填充。

.myDiv {
    width: 100px;
    height: 100px;
    padding-left: 2px;
    padding-right: 2px;
}

.myDiv:hover {
    padding-left: 0;
    padding-right: 0;
    border-left: 2px solid red;
    border-right: 2px solid red;
}

本质上,只需将2px填充替换为2px边框即可。div大小保持不变。


2

在您的情况下,您可以通过从填充减去边框的一半来进行修饰吗?(如果边框的宽度为5像素,则填充值为-2.5,则不能使用负填充,因此请减小边框的总宽度)。您可以在边距处添加额外的2.5像素,以使整个框保持相同的大小。

我真的不喜欢这个建议,但是我不认为有一种方法可以干净地处理这个问题。



0

如果您的背景色是纯色,则另一种选择:

body { background-color: #FFF; }

.myDiv {
    width: 100px;
    height: 100px;
    border: 3px solid #FFF;  // Border is essentially invisible since background is also #FFF;
}

.myDiv:hover {
    border-color: blue;  // Just change the border color
}

您可以代替#FFF透明,然后就不必记住更改两个值。您的建议的好处是,如果您需要虚线边框,则box-shadow在这方面缺乏的情况下可以使用。
limitlessloop

0

轮廓:3px纯黑|| 边框:3px纯黑色

div{
height:50px;
width:150px;
text-align:center;

}

div{    /*this is what you need ! */
outline:1px solid black
}
<div>
hello world
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.