我正在试图模拟这个设计:
但是,我无法正确渲染红色边框。我尝试了一个明显的解决方案:
border: 1px solid #939393;
border-left: 4px solid red;
但它受顶部和底部边框的影响,留下带有对角线的红色条纹,正如你在这个小提琴中看到的那样: http://jsfiddle.net/anp0e03k/
有没有正确的方法来解决这个问题?
我唯一可以想到的是在顶部和底部添加一个带有红色背景和负边距的div,但它似乎是一种矫枉过正,并且很想找到一些不会破坏html语义的东西。 / p>
答案 0 :(得分:4)
将左边框应用于div的:before
pseudo element并删除div左边框。
兼容性: All modern browsers and IE8 +
:before
height: 100%
跨越div的整个高度
margin-top: -1px
与顶部边框重叠
padding-bottom: 2px
与底部边框重叠
position: absolute
上:before
上position: relative
与body {
background-color: #c2c2c2;
}
div {
margin: 50px;
background-color: #FFF;
border: 1px solid #939393;
height: 50px;
width: 200px;
border-left: none;
position: relative;
}
div:before {
content: '';
display: block;
border-left: 4px solid red;
height: 100%;
margin-top: -1px;
padding-bottom: 2px;
position: absolute;
top: 0;
left: 0;
}
一样,如下例所示:
<div>
</div>
&#13;
display: inline-block
&#13;
:before
代表vertical-align: top / middle / bottom
,例如:
注意:您可能希望将:before
用于top
。此示例使用值body {
background-color: #c2c2c2;
}
div {
margin: 50px;
background-color: #FFF;
border: 1px solid #939393;
height: 50px;
width: 200px;
border-left: none;
}
div:before {
content: '';
display: inline-block;
border-left: 4px solid red;
height: 100%;
margin-top: -1px;
padding-bottom: 2px;
vertical-align: top;
}
。
<div>
There is text in this
</div>
&#13;
{{1}}&#13;