如何使用css为任何元素指定边框,而不向元素的整个宽度添加边框宽度?

如何使用css为任何元素指定边框,而不向元素的整个宽度添加边框宽度?,css,Css,如何使用css为任何元素指定边框,而不向元素的整个宽度添加边框宽度 就像在Photoshop中一样,我们可以绘制内部、中心和外部的笔划 我认为默认的css边框属性在photoshop中是类似中心的,对吗 我想给盒子里面的边框,而不是外面的。并且不希望在框宽中包含边框宽度。因此,您试图实现与众所周知的相同的效果?那是不可能的。或者您希望仅在Windows上支持IE客户端,并选择一个强制IE进入的客户端。因此,您正在尝试实现与众所周知的相同的功能?那是不可能的。或者,您希望仅在Windows上支持I

如何使用css为任何元素指定边框,而不向元素的整个宽度添加边框宽度

就像在Photoshop中一样,我们可以绘制内部、中心和外部的笔划

我认为默认的css边框属性在photoshop中是类似中心的,对吗


我想给盒子里面的边框,而不是外面的。并且不希望在框宽中包含边框宽度。

因此,您试图实现与众所周知的相同的效果?那是不可能的。或者您希望仅在Windows上支持IE客户端,并选择一个强制IE进入的客户端。

因此,您正在尝试实现与众所周知的相同的功能?那是不可能的。或者,您希望仅在Windows上支持IE客户端,并选择一个强制IE进入的选项。

在您的情况下,您可以通过从填充中减去一半边框来伪造它吗?(-2.5从填充中减去-2.5如果边框宽度为5px,则不能使用负填充,以便缩小框的总宽度)。您可以在边距上额外添加2.5px,以保持整个框的大小相同


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

在你的情况下,你能通过从填充物中减去一半边框来回避它吗?(-2.5从填充中减去-2.5如果边框宽度为5px,则不能使用负填充,以便缩小框的总宽度)。您可以在边距上额外添加2.5px,以保持整个框的大小相同

outline:1px solid white;
我真的不喜欢这个建议,但我不认为有一种方法可以干净地处理这个问题

outline:1px solid white;
这不会增加额外的宽度和高度


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

正如abenson所说,你可以使用一个新的图形,但有一个问题是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:

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

街区
另一个街区

正如阿本森所说,你可以使用一个“非矩形”,但有一个问题是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:

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

街区
另一个街区

根据您想要的浏览器支持,您可以使用
框阴影
属性

您可以将模糊值设置为0,并将扩散设置为所需的厚度。长方体阴影的优点在于,您可以控制它是在外部(默认情况下)还是在内部(使用
inset
属性)绘制

例如:

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

使用“长方体阴影”的一大优点是,您可以通过使用多个长方体阴影获得创造性:

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

我唯一不能说的是,这将使渲染性能有所不同。如果屏幕上同时有数百个元素使用此技术,我认为这可能会成为一个问题。

根据您预期的浏览器支持,您可以使用
框阴影
属性

您可以将模糊值设置为0,并将扩散设置为所需的厚度。长方体阴影的优点在于,您可以控制它是在外部(默认情况下)还是在内部(使用
inset
属性)绘制

例如:

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

使用“长方体阴影”的一大优点是,您可以通过使用多个长方体阴影获得创造性:

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

我唯一不能说的是,这将使渲染性能有所不同。如果屏幕上同时有数百个元素使用这种技术,我想这可能会成为一个问题。

我遇到了同样的问题

.right-border {
    position: relative;
}

.right-border:after {
    content: '';
    display: block;
    position: absolute;
        top: 0; right: 0;
    width: 1px;
    height: 100%;
    background: #e0e0e0;
}
此答案允许您指定一个单面。并且可以在IE8+中工作-不同于使用box shadow

当然,您需要更改伪元素属性,因为您需要挑出特定的一面

*新的和改进的*

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

这允许使用边框并击中方框的多个侧面。

我遇到了同一个问题

.right-border {
    position: relative;
}

.right-border:after {
    content: '';
    display: block;
    position: absolute;
        top: 0; right: 0;
    width: 1px;
    height: 100%;
    background: #e0e0e0;
}
此答案允许您指定一个单面。并且可以在IE8+中工作-不同于使用box shadow

当然,您需要更改伪元素属性,因为您需要挑出特定的一面

*新的和改进的*

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

这允许使用边框并点击方框的多个侧面。

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

.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大小保持不变。

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

.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大小保持不变。

如果背景色为纯色,则另一个选项为:

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
}

另一个选项,如果背景色为纯色:

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
}

检查CSS框大小

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

  • -webkit框大小:边框框;/*Safari/Chrome,其他网络工具包*/
  • -moz框大小:边框框;/*火狐,其他壁虎*/
  • 框大小:边框框;/*歌剧院/IE 8+*/

我建议创建一个mixin来处理这个问题。您可以在W3c上找到有关框大小的更多信息查看CSS框大小

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

  • -webkit框大小:边框框;/*Sa