如果页面上存在具有多种边框颜色的元素,则默认情况下,这些颜色相交的角创建斜角。这似乎是边角式的奇怪选择。我宁愿选择其中一个边界"压倒一切"另一个边界使得显示直线。
为了说明这种效果,请考虑以下事项:
参见示例jsFiddle示例我创建了here。
前两项显示默认的斜角行为。底部两个显示所需的预期行为,在这种情况下,边界顶部"超能力"或者"覆盖"边界左边和右边边角。
顶级案例的标记:
<div class="container">
<div class="border">Item one</div>
<div class="border">Item two</div>
</div>
CSS:
.container {
margin: 5px;
width: 150px;
background: yellow;
}
.border {
padding: 5px;
border: 15px solid red;
border-top: 15px solid teal;
}
底部案例的标记:
<div class="container">
<div class="border-top"></div>
<div class="border-reg">Item one</div>
<div class="border-top"></div>
<div class="border-reg">Item two</div>
</div>
CSS:
.border-top {
border-top: 15px solid teal;
}
.border-reg {
border: 15px solid red;
border-top: 0;
padding: 5px;
}
虽然我设计的第二种方法确实产生了我想要的效果,但似乎这对于我认为具有默认状态的东西来说是不必要的乏味。例如,如果我希望border-left覆盖其他边框,我将不得不处理一些float: left
和内联元素疯狂。
是否有更简单的方法可以删除在所有浏览器上观察到的默认斜角行为?
虽然上面详述的案例很容易让边框顶部或边框底部覆盖角落,但它并不容易完成任务,例如,如果我需要使用border-left和border-right来覆盖边界顶部和边界底部。
答案 0 :(得分:3)
这就是边界工作的方式,我相信如果没有额外的元素,就没有办法改变它。
您可以使用包装器div而不是空div。
<div class="outer">
<div class="inner">test</div>
</div>
.inner {
padding : 5px;
border : 15px solid red;
border-top: 0;
}
.outer {
border-top : 15px solid teal;
}
还有另一种方法可以使用:before/:after
psuedo元素,但它有点麻烦,但它不需要额外的标记:
<div>test</div>
div {
padding : 5px;
border : 15px solid red;
border-top: 0;
position:relative;
padding-top: 20px; /* border width plus desired padding */
}
div:before {
content:' ';
display:block;
background: teal;
height:15px;
padding:0 15px; /* border width plus div padding */
width:100%;
position:absolute;
top: 0;
left:-15px; /* border width plus div padding */
}
您可以通过多种不同方式编写CSS以实现相同的效果。演示:http://jsfiddle.net/fmcvY/3/
答案 1 :(得分:3)
如果您不需要支持旧浏览器(IE 8及更低版本),则可以使用box-shadow
:
.border {
padding : 35px 20px 20px 20px;
box-shadow: inset 0 0 0 15px red, inset 0 15px 0 15px teal;
}