12

如果页面上存在具有多种边框颜色的元素,则这些颜色相交的角默认会创建一个斜角。对于边框角样式,这似乎是一个奇怪的选择。相反,我更喜欢其中一个边界“压倒”另一个边界,以便显示一条直线。

为了说明这种效果,请考虑以下内容:

顶部:默认; 底部:需要

请参阅我在此处创建的示例 jsFiddle 示例。

前两项显示默认的斜面行为。底部两个显示所需的预期行为,在这种情况下,border-top “压倒”或“覆盖”border-left 和border-right 的角。

顶部案例的标记:

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

尽管我设计的第二种方法确实产生了我想要的效果,但对于我本以为具有默认状态的东西来说,这似乎是不必要的乏味。例如,如果我希望左边框覆盖其他边框,我将不得不处理一些float: left内联元素的疯狂。

问题(最后)

有没有更简单的方法可以删除所有浏览器上观察到的默认斜角行为?

尽管上面详述的情况很容易让边框顶部或边框底部覆盖角落,但这并不是一件容易的事,例如,如果我需要边框左和边框右来覆盖边框 -顶部和边框底部。

4

2 回答 2

5

如果您不需要支持旧版浏览器(IE 8 及更低版本),您可以使用box-shadow

.border {
    padding : 35px 20px 20px 20px;
    box-shadow: inset 0 0 0 15px red, inset 0 15px 0 15px teal;
}

http://jsfiddle.net/fTGDs/

于 2013-07-16T18:45:55.057 回答
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;
}

演示:http: //jsfiddle.net/fmcvY/

还有另一种使用:before/:after伪元素的方法,但它有点混乱,但它不需要额外的标记:

<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/

于 2013-07-16T18:35:49.773 回答