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