【问题标题】:CSS3 Inverted Rounded CornerCSS3 倒圆角
【发布时间】:2010-05-29 19:05:21
【问题描述】:

有没有办法在 CSS3 中做一个倒圆角,类似于下面(粗略)图中的左下角?

/-------\
|       |
|       |
|       |
| ______/
|/ <---The left side is flush (straight), the slant should be rounded

也许border-radius 可以和this technique结合?

编辑:我不是在寻找气泡,而只是在左下角的点的右侧弯曲的方法。

【问题讨论】:

标签: css css-shapes


【解决方案1】:

嗯,这纯粹是疯狂,但肯定有办法实现这一点:-) 不是跨浏览器,但让我们看看:

我们的加价:

<div id="bubble">
    <p>This is madness!</p>
</div>

我们的 CSS:

#bubble {
    width:200px;
    height:100px;
    border:1px solid #000;
    -webkit-border-radius:20px;
    -moz-border-radius:20px;
    border-radius:20px;
}
    #bubble p {
        margin: 1em;
        font-family:Comic Sans MS;/* well, madness it is! */
    }
#bubble:before {
    content:'';
    border:20px solid;
    border-color:#fff transparent transparent;
    position:absolute;
    top:110px;
    left:25px;
    z-index:2;
}
#bubble:after {
    content:'';
    border:20px solid;
    border-color:#000 transparent transparent;
    position:absolute;
    top:111px;
    left:25px;
    z-index:1;
}

结果: http://jsfiddle.net/MrLWY/

我只在 Firefox 3.6.3 中测试过这个,但想法很清楚 :-)

这里有两个:

#bubble {
    width:200px;
    height:100px;
    border:1px solid #000;
    position:relative;
    -webkit-border-radius:20px 20px 20px 0;
    -moz-border-radius:20px 20px 20px 0;
    border-radius:20px 20px 20px 0;
}
    #bubble p {
        margin: 1em;
        font-family:Comic Sans MS;
    }
#bubble:before {
    content:'';
    width:20px;
    height:20px;
    background:#fff;
    border-left:1px solid #000;
    position:absolute;
    top:100px;
    left:-1px;
}
#bubble:after {
    content:'';
    -webkit-border-radius:20px 0 0 0;
    -moz-border-radius:20px 0 0 0;
    border-radius:20px 0 0 0;
    border:solid #000;
    border-width:1px 0 0 1px;
    width:20px;
    height:19px;
    position:absolute;
    top:100px;
    left:0;
}

结果:http://jsfiddle.net/ajeN7/

也许这可以通过多种方式增强:

  • 让它跨浏览器(至少+webkit和opera)
  • 不过,它可以在 IE 中工作,无需四舍五入,借助 http://code.google.com/p/ie7-js/ 之类的东西(以便生成的内容工作)。
  • 了解它如何在灵活高度下工作。
  • 更改字体系列声明:-)

【讨论】:

  • +1 感谢 gryzzly。这不是我想要的,但它是一种非常酷的技术。请查看我的编辑。
  • 非常好!谢谢!不过,我不确定您为什么要更改 Comic Sans。它是网络上最漂亮的字体之一。 ;-)
  • 我将它调整为使用填充的 rgba 颜色...它适用于 firefox 和 webkit jsfiddle.net/XpghH
【解决方案2】:

我还不能发表评论,但这是一个新的答案(关于 Gryzzlys 的答案):

Gryzzlys 的第一个示例没有处理不同的背景颜色(用于背景和气泡)。

但是第二个可以。这是一个应用背景颜色的示例:

http://jsfiddle.net/tGnfb/

(我还添加了border-radius 属性,以便它可以为除Firefox 之外的其他浏览器呈现边框)。

【讨论】:

  • 这是一个绝妙的主意,但不幸的是,如果页面有背景图片,它就行不通了。
【解决方案3】:

这样就实现了FF中的效果。为其他浏览器使用适当的border-radius 变体。 本质上,您使用的是 3 div 系统,其中一个具有相同的背景颜色。 仅适用于纯色背景。

<div class="top">some text here</div>
<div class="bottom"><div class="bottom2"></div></div>

还有 CSS:

body
    {
    background-color:red;
    }

.top
    {
    display: block;
    width: 200px;
    height: 50px;
    background-color:white;
    padding:5px;

    -moz-border-radius-topleft:10px;
    -moz-border-radius-topright:10px;
    -moz-border-radius-bottomright:10px;
    }

.bottom
    {
    display: block;
    width: 20px;
    height: 20px;
    background-color: white;    
    }

.bottom2
    {
    display: block;
    width: 20px;
    height: 20px;
    background-color: red;  
    -moz-border-radius-topleft:20px;
    }

【讨论】:

    【解决方案4】:

    如果您想实现那种外观(一个语音气球),最好只使用一张图片:)

    【讨论】:

    • 使用图像不是问题,但我特意询问是否可以使用 CSS3。
    【解决方案5】:

    您可以通过仅使用 CSS 来解决此问题。我决定使用一种技术来制作标签 - 但可以很容易地适应气泡。

    我在这里介绍如何制作Inverse Border Radius in CSS (here) 的基本示例。这使用了边框大小的技巧来使用内部,您可能需要进行一些定位才能使其正常工作,但是您可以看到它是可能的。

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多