CSS边框弯曲

时间:2014-05-28 06:28:27

标签: html5 css3 responsive-design

我想在元素中构建带有弯曲边框的容器。是否可以只使用css?如果是容器,则应该具有auto高度 image

3 个答案:

答案 0 :(得分:2)

您可以尝试此方法 - 在div

之前和之后绘制带圆角边框的div

CSS:

#bend-inside{
    width: 500px;
    overflow: hidden;
}

#box-before{
    background-color: white;
    border-radius: 600px;
    height: 600px;
    width: 600px;
    display: inline-block;
    position: absolute;
    z-index: 2;
   right: 550px;
    top: -200px;
    overflow: hidden;
}

#box{
    background-color: #e5e5e5;
    width: 400px;
    height: 200px;
    margin: 0 auto;
    display: inline-block;
    overflow: hidden;
    position: absolute;
    z-index: 1;
    right: 200px;
}

#box-after{
    background-color: white;
    border-radius: 600px;
    height: 600px;
    width: 600px;
    display: inline-block;
    position: absolute;
    z-index: 2;
    right: -350px;
    top: -200px;
    overflow: hidden;
}

HTML:

<div id="bend-inside">
    <div id="box-before"></div>
    <div id="box"></div>
    <div id="box-after"></div>
</div>

<强> Example

答案 1 :(得分:1)

如果您正在寻找一个纯CSS解决方案,那么一个选项可能是使用::before::after伪元素来实现类似的东西。

演示:http://jsfiddle.net/abhitalks/2mx6b/

HTML

<div class="curved"></div>

相关CSS

.curved {
    width: 400px;
    height: 200px;
    background-color: #ccc;
    border-radius: 0 0 35% 35%;
    position: relative;
}
.curved::before {
    height: 200px;
    width: 40px;
    border-radius: 0 40% 50% 0;
    content: '';
    position: absolute;
    top: 0px; left: 0px;
}
.curved::after{
    height: 200px;
    width: 40px;
    border-radius: 40% 0 0 50%;
    content: '';
    position: absolute;
    top: 0px; right: 0px;
}

<强>更新

另一种方法可能是使用radial-gradient。这将摆脱伪元素altogther。但是,缺点是您必须仔细制作它并记住跨浏览器兼容性。

无论如何,只是为了说明如何做到这一点:

演示2:http://jsfiddle.net/abhitalks/2mx6b/2/

CSS

.curved {
    width: 400px;
    height: 200px;
    border-radius: 0 0 40% 40%;
    background: 
        -webkit-radial-gradient(-19% center, circle, orange 0, orange 124px, transparent 50px), 
        -webkit-radial-gradient(119% center, circle, orange 0, orange 124px, transparent 50px) #ccc;
    background-clip: padding-box;
}

注意:关于您的评论:否。您无法在任何建议的解决方案中使用transparent。原因是父元素的背景会渗透,或者在多个背景的情况下,堆叠顺序中的较低背景将会渗透。

答案 2 :(得分:1)

你可以使用这种技术:

HTML:

<div class='continer'>
    <div class='left'></div>
    <div class='right'></div>
</div>

CSS:

.continer{
    width:500px;
    height:200px;
    background:red;
}
.right{
    float:right;
    width:10%;
    height:120%;
    border-radius:100%;
    margin-top:-5%;
    margin-right:-4%;
    background:white;
}
.left{
    float:left;
    width:10%;
    height:120%;
    border-radius:100%;
    margin-top:-5%;
    margin-left:-4%;
    background:white;
}

这里的例子: http://jsfiddle.net/NSm8M/