Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用css为任何元素指定边框,而不向元素的整个宽度添加边框宽度?_Css - Fatal编程技术网

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

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

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

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

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


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

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

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

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

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>

街区
另一个街区

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

您可以将模糊值设置为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;
}

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

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

.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
}

检查CSS框大小

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

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

我建议创建一个mixin来处理这个问题。您可以在W3c上找到有关框大小调整的详细信息使用
框大小调整:边框框
,以便在不修改div宽度的情况下在div内创建边框

使用
outline
在div外部创建边框,而不修改div宽度

这里有一个例子:

注:
边框框
目前IE不支持

支持:

#测试#测试2{
宽度:100px;
高度:100px;
背景颜色:黄色;
}
#试验{
-webkit框大小:边框框;
-moz框大小:边框框;
框大小:边框框;
边框:10px蓝色虚线;
}
#测试2{
轮廓:10px红色虚线;
}
使用“框大小:边框框”在div内创建边框,而不修改div宽度

边框框 使用outline在div外部创建边框,而不修改div宽度

概述
轮廓:3倍纯黑| |边框:3倍纯黑

div{
高度:50px;
宽度:150px;
文本对齐:居中;
}
div{/*这就是您需要的*/
外形:1px纯黑
}

你好,世界

Noted:outline不定义边,因此只有在所有边都设置了样式的情况下才有效。我添加了一个答案,允许您只对一侧进行边界设置。只需一个注释,它不会跟随元素上任何边界半径的曲线,因此您将以方形边界结束。但它不支持radious。这是最好的答案,虽然我不认为你真的需要所有的前缀。^贾斯汀是对的,你不再需要前缀了<代码>框大小调整就足够了。您可以用
#FFF
代替透明,这样您就不需要记住更改两个值。您的建议的好处是,如果您需要虚线边框,这将适用于as
box shadow
在这方面缺乏的地方。
.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;
}
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
}
#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>