搜索

首页  >  问答  >  正文

重写后的标题为:CSS 3形状:「反向圆形」或「剪切圆形」

<p>我想创建一个形状,我将其描述为“反圆”:</p> <p>该图像在某种程度上不准确,因为黑线应该沿着 div 元素的外边框继续。</p> <p>这是我目前拥有的演示:http://jsfiddle.net/n9fTF/</p> <p>使用没有图像的 <code>CSS</code> 是否有可能?</p>
P粉979586159P粉979586159463 天前433

全部回复(2)我来回复

  • P粉680087550

    P粉6800875502023-08-25 13:34:04

    我无法从你的绘图中真正看出你想要的点有多圆,但有一种可能性: http://jsfiddle.net/n9fTF/6/

    如果点需要更圆,您需要在末端放置一些圆圈,以便它们与大勺融合。

    回复
    0
  • P粉391677921

    P粉3916779212023-08-25 12:22:15

    更新:CSS3 径向背景渐变选项

    (对于那些支持它的浏览器 - 在 FF 和 Chrome 中测试 - IE10,Safari 也应该可以工作)。

    我最初的答案中的一个“问题”是那些没有扎实背景的情况。此更新创建了相同的效果,允许圆圈与其反向切口之间存在透明的“间隙”。

    查看示例小提琴

    CSS

    .inversePair {
        border: 1px solid black;
        display: inline-block;    
        position: relative;    
        height: 100px;
        text-align: center;
        line-height: 100px;
        vertical-align: middle;
    }
    
    #a {
        width: 100px;
        border-radius: 50px;
        background: grey;
        z-index: 1;
    }
    
    #b {
        width: 200px;
        /* need to play with margin/padding adjustment
           based on your desired "gap" */
        padding-left: 30px;
        margin-left: -30px;
        /* real borders */
        border-left: none;
        -webkit-border-top-right-radius: 20px;
        -webkit-border-bottom-right-radius: 20px;
        -moz-border-radius-topright: 20px;
        -moz-border-radius-bottomright: 20px;
        border-top-right-radius: 20px;
        border-bottom-right-radius: 20px;
        /* the inverse circle "cut" */
        background-image: -moz-radial-gradient(
            -23px 50%, /* the -23px left position varies by your "gap" */
            circle closest-corner, /* keep radius to half height */
            transparent 0, /* transparent at center */
            transparent 55px, /*transparent at edge of gap */
            black 56px, /* start circle "border" */
            grey 57px /* end circle border and begin color of rest of background */
        );
        background-image: -webkit-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: -ms-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: -o-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
    }
    

    原始答案

    花费了比我预期更多的努力来使 z 索引正常工作(这似乎忽略了负 z-索引),但是,这提供了一个漂亮干净的外观 (在 IE9、FF、Chrome 中测试):

    HTML

    <div id="a" class="inversePair">A</div>
    <div id="b" class="inversePair">B</div>

    CSS

    .inversePair {
        border: 1px solid black;
        background: grey;
        display: inline-block;    
        position: relative;    
        height: 100px;
        text-align: center;
        line-height: 100px;
        vertical-align: middle;
    }
    
    #a {
        width: 100px;
        border-radius: 50px;
    }
    
    #a:before {
        content:' ';
        left: -6px;
        top: -6px;
        position: absolute;
        z-index: -1;
        width: 112px; /* 5px gap */
        height: 112px;
        border-radius: 56px;
        background-color: white;
    } 
    
    #b {
        width: 200px;
        z-index: -2;
        padding-left: 50px;
        margin-left: -55px;
        overflow: hidden;
        -webkit-border-top-right-radius: 20px;
        -webkit-border-bottom-right-radius: 20px;
        -moz-border-radius-topright: 20px;
        -moz-border-radius-bottomright: 20px;
        border-top-right-radius: 20px;
        border-bottom-right-radius: 20px;
    }
    
    #b:before {
        content:' ';
        left: -58px;
        top: -7px;
        position: absolute;
        width: 114px; /* 5px gap, 1px border */
        height: 114px;
        border-radius: 57px;
        background-color: black;
    } 
    

    回复
    0
  • 取消回复