【问题标题】:CSS oval shape cut out from div从 div 中切出的 CSS 椭圆形
【发布时间】:2013-09-20 18:30:35
【问题描述】:

上面的图片是我正在尝试创建的,但在椭圆形方面遇到了一些困难。一个解释:

  • 菜单栏是一个带有轻微线性渐变的 div(深灰色到透明的浅灰色)
  • 公司徽标图像具有透明背景,将位于菜单栏的“顶部”
  • 椭圆形切口需要与徽标的椭圆形相匹配,并在其间留有透明间隙,以显示背景颜色(每页都会发生变化,橙色只是一个示例)

我已经尝试过多次使用径向渐变但都失败了 - 我能够切出一个圆形,但无法弄清楚如何使它变成椭圆形,然后无法使线性渐变起作用。见代码:

.circle {
    height: 10em;
    background: radial-gradient(circle 50px at 50% 100%, transparent 50px, rgba(84, 82, 94, 0.8) 50px);
    background: -webkit-radial-gradient(50% 100%, circle, transparent 50px, rgba(84, 82, 94, 0.8) 50px);
}

当裁剪形状和渐变被排序时,徽标将位于顶部。

任何建议或 jsfiddle 解决方案将不胜感激,谢谢!

编辑:jsfiddle here

编辑2:通过稍微改变设计解决了这个问题,感谢那些回答的人。我写了一些 jquery 来解决这个问题 - 当彩色区域滚动到视野之外时,椭圆形边框和标题边框将拾取顶部的颜色,而不是透明度。

【问题讨论】:

标签: jquery html css css-shapes


【解决方案1】:

你可以从这个Running Demo

注意:我添加了一个小动画来更改背景颜色,以明确岛和带有切口的 div 之间的空间真的透明。

HTML

<div class="cutout">
    <div class="island">
        <div id="circleText">Circle Text </div>
    </div>
</div>

CSS

.cutout {
    height: 10em;
    background: radial-gradient(ellipse 200px 150px at 50% 100%, 
                                transparent 100px, #555 50px);
    position: relative;
}
.island {
    position: absolute;
    left: calc(50% - 150px);
    bottom: -50%;
    width: 300px;
    background: radial-gradient(ellipse 200px 150px at 50% 50%, 
                                silver 90px, rgba(0, 0, 0, 0) 50px);
    height: 10em;
}
.island > div {
    position: absolute;
    left: 80px;
    right: 80px;
    top: 30px;
    bottom: 30px;

    background: rgba(fff, 0, 0, 0.2);
    padding: 5px;    
    text-align: center;    
}

#circleText {
    padding-top: 30px;
    font-size: 1.5em;
}

【讨论】:

  • 你能改变你的答案,以便在曲线内添加阴影吗?
  • @AmiNadimi 只需使用 box-shadow ;) 如果有帮助就点赞
【解决方案2】:

试试这个:

background: radial-gradient(ellipse at 50% 100%, transparent 50px, rgba(84, 82, 94, 0.8) 50px);

jsfiddle here

【讨论】:

    【解决方案3】:

    试试这个:http://css-tricks.com/the-shapes-of-css/

    绝对放置在菜单其他部分的顶部

    【讨论】:

    • 是的,我发现该网页以前很有用,但形状需要是一个切口 - 并且是透明的。不过谢谢
    • 哦,对不起。我误解了这个问题
    • 如果您创建了一个与背景颜色相同的 div,将其放置在您想要剪切的位置,然后在其顶部放置另一个带有徽标的 div?
    • 背景颜色会随着页面的滚动而变化,所以确实需要裁剪
    【解决方案4】:

    你可以这样做:

    .container{
        height: 10em;
        background: #76757e;
    }
    
    .ovalCutout{
        background:white;
        height:50px;
        width:100px;
        border-radius:50%;
        margin:0px auto;
        position:relative;
        top:120px;
    }
    

    http://jsfiddle.net/UwXKu/

    【讨论】:

    • 好主意,但是背景颜色会随着页面滚动而改变,它需要是一个透明的切口。不过谢谢
    【解决方案5】:

    您可以合成 3 个背景,中心是放射状的,侧面是线性的。

    然而,让这两种渐变完全匹配是很困难的;只有在渐变非常平滑的情况下才可行。

    .back {
        height: 100px;
        width: 1000px;
        padding: 0px;
        background-image: radial-gradient(200px 100px ellipse at 50% 100%, transparent 70px, 
                   rgba(100, 100, 100, 0.8) 73px, 
                   rgba(80, 80, 80, 1) 198px), 
        linear-gradient(180deg, rgb(80, 80, 80), rgba(100, 100, 100, 0.8)), 
        linear-gradient(180deg, rgb(80, 80, 80), rgba(100, 100, 100, 0.8));
        background-size: 200px 100px, 40% 100%, 40% 100%;
        background-repeat: no-repeat;
        background-position-x: 50%, 0%, 100%;
        background-position-y: 100%;
    }
    

    demo

    【讨论】:

    • 您的代码在 Firefox 中中断,椭圆形切口被渐变填充;感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多