在中间创建带凹口的盒子(没有任何图像)

时间:2013-09-27 00:01:35

标签: css css3 html

是否可以在顶部和底部线的中心创建一个类似下面的盒子? (包括边框插页?)

enter image description here

3 个答案:

答案 0 :(得分:2)

这是Working Fiddle 经过测试: Ie10,FF,Chrome,Safari

将您的内容放在.Content div中。 (应支持任何规模的内容)

<强> HTML:

<div class="SpecialBox">
    <div class="TopTriangle">
        <div class="Gray Border">
            <div class="Black Border">
                <div class="White Border"></div>
            </div>
        </div>
    </div>

    <div class="Content">
        Some Content
        <br />
        And another line of Content
    </div>

    <div class="BottomTriangle">
        <div class="Gray Border">
            <div class="Black Border">
                <div class="White Border"></div>
            </div>
        </div>
    </div>
</div>

<强> CSS:

*
{
    margin: 0;
    padding: 0;
}

.SpecialBox
{
    background-color: black;
    -webkit-box-shadow: inset 0 0 0 5px black, inset 0 0 0 6px gray;
    box-shadow: inset 0 0 0 5px black, inset 0 0 0 6px gray;
    display: inline-block;
    color: white;
    overflow: hidden;
    position: relative;
}
.Content
{
    padding: 20px;
}

.Border
{
    width: 0;
    border-left: 35px solid transparent;
    border-right: 35px solid transparent;   
    position: absolute;
}

.Gray
{
    position: relative;
    margin: 0 auto;
}
.TopTriangle .Gray
{
    border-top: 25px solid gray;
}
.BottomTriangle .Gray
{
    border-bottom: 25px solid gray;
    top: -1px;
}

.Black
{
    left: -35px;
}
.TopTriangle .Black
{
    border-top: 25px solid black;
    top: -27px;
}
.BottomTriangle .Black
{
    border-bottom: 25px solid black;
    top: 1px;
}

.Black:before
{
    content: '';
    position: absolute;
    left: -35px;
    width: 70px;
    height: 6px;
    background-color: black;
}
.TopTriangle .Black:before
{
    top: -24px;
}
.BottomTriangle .Black:before
{
    top: 19px;
    z-index: 1;
}

.White
{
    left: -35px;
}
.TopTriangle .White
{
    border-top: 25px solid white;
    top: -30px;
}
.BottomTriangle .White
{
    border-bottom: 25px solid white;
    top: 6px;
    z-index: 2;
}

注意:它可能在DOM中使用少量元素(使用更多伪元素)

答案 1 :(得分:1)

尝试用最少的标记来完成它,并且凹槽和插图是透明的:

CSS

.test {
    position: absolute;
    width: 200px;
    height: 400px;
    top: 40px;
    left: 40px;
    background-image: linear-gradient(-135deg, transparent 30px, black 30px), 
    linear-gradient(135deg, transparent 30px, black 30px), 
    linear-gradient(-45deg, transparent 30px, black 30px), 
    linear-gradient(45deg, transparent 30px, black 30px), 
    radial-gradient(200px 5px ellipse at 50% 50%, transparent 70px, 
               black 73px);
    background-size: 50% 20%, 50% 20%, 50% 72%, 50% 72%, 100% 10%;
    background-position: left top, right top, left bottom, right bottom, left 20%;
    background-repeat: no-repeat;
}

而且,正如所承诺的,一个简单的HTML

<div class="test"></div>

fiddle

注意:该示例使用最新的渐变语法。可以在任何支持多个背景的浏览器中工作,调整渐变语法

答案 2 :(得分:1)

此解决方案使用图像(非常宽的图像)来覆盖盒子可能采用的所有宽度。并使用border-image。 (目前IE不支持)

<强> HTML:

<div class="SpecialBorder">
    <div class="Content">
        Some Content
    </div>
</div>

<强> CSS:

.SpecialBorder
{
    border: 20px solid black; /* fallback for IE*/
    -moz-border-image: url(http://i.stack.imgur.com/ZB9vk.png) 20 20 repeat;
    -o-border-image: url(http://i.stack.imgur.com/ZB9vk.png) 20 20 repeat;
    -webkit-border-image: url(http://i.stack.imgur.com/ZB9vk.png) 20 20 repeat;
    border-image: url(http://i.stack.imgur.com/ZB9vk.png) 20 20 repeat;

}
.Content
{
    background-color: #1d1d1d; /* same BG as the image*/
}

Working Fiddle