去除边界角上的斜角效果

Jak*_*e Z 10 html css border

如果页面上存在具有多种边框颜色的元素,则默认情况下,这些颜色相交的角创建斜角.这似乎是边角式的奇怪选择.我宁愿选择其中一个边框"压制"另一个边框,而是显示一条直线.

为了说明这种效果,请考虑以下事项:

顶部:默认;  底部:期望

请参阅我在这里创建的示例jsFiddle示例.

前两项显示默认的斜角行为.底部两个显示所需的预期行为,在这种情况下,边界顶部"超能力"或"覆盖"边界左边和右边边角.

顶级案例的标记:

<div class="container">
    <div class="border">Item one</div>
    <div class="border">Item two</div>
</div>
Run Code Online (Sandbox Code Playgroud)

而CSS:

.container {
    margin: 5px;
    width: 150px;
    background: yellow;
}
.border {
    padding: 5px;
    border: 15px solid red;
    border-top: 15px solid teal;
}
Run Code Online (Sandbox Code Playgroud)

底壳的标记:

<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>
Run Code Online (Sandbox Code Playgroud)

而CSS:

.border-top {
    border-top: 15px solid teal;
}
.border-reg {
    border: 15px solid red;
    border-top: 0;
    padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)

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

问题(最后)

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

虽然上面详述的案例很容易让边框顶部或边框底部覆盖角落,但这并不容易,例如,如果我需要边框左边和右边边框来覆盖边框 - 顶部和边界底部.

met*_*ion 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;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/fTGDs/


Wes*_*rch 3

这就是边界的工作方式,我相信如果没有额外的元素就没有办法改变它。

您可以使用包装 div,而不是空 div。

<div class="outer">
    <div class="inner">test</div>
</div>
Run Code Online (Sandbox Code Playgroud)
.inner {
    padding : 5px;
    border : 15px solid red;
    border-top: 0;
}
.outer {
    border-top : 15px solid teal;
}
Run Code Online (Sandbox Code Playgroud)

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

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

<div>test</div>
Run Code Online (Sandbox Code Playgroud)
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 */
}
Run Code Online (Sandbox Code Playgroud)

您可以用多种不同的方式编写 CSS 来达到相同的效果。演示: http: //jsfiddle.net/fmcvY/3/