凹边可能是半径吗?

16 css css3 css-shapes

这是一个简单的凸示例.

http://jsfiddle.net/swY5k/

#test{
    width: 200px;
    height: 200px;
    background: #888888;
    border-radius: 50px;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想要一个凹边的半径.

我尝试使border-radius为负,但这不起作用.

凹/凸的例子:

在此输入图像描述

tes*_*ssi 11

通过巧妙地使用:before:after伪类,我们可以模拟凹形:

#test{
    width: 100px;
    height: 300px;
    background: green;
    position: relative;
    display: inline-block;
}

#test:before{
    background: white;
    height: 300px;
    width: 30px;
    border-radius: 0 60px 60px 0 / 0 300px 300px 0;
    display: inline-block;
    content: '';
}

#test:after{
    background: white;
    height: 300px;
    width: 30px;
    border-radius: 60px 0 0 60px / 300px 0 0  300px;
    display: inline-block;
    content: '';
    position: relative;
    left: 40px;
}
Run Code Online (Sandbox Code Playgroud)

#testDIV是一个普通的矩形.但它:before:after元素是半边凹面填充背景颜色(在这种情况下为白色).

看到这个jsfiddle.

  • 这种方法的缺点是底层背景不会通过凹面区域显示。例如,您不能在图像顶部使用这样的内容。 (2认同)

Jam*_*ess 9

您可以使用背景上的径向渐变给出凹边的印象.例如,像这样:

#test {
    width: 200px;
    height: 200px;
    background: #888888;
    background:
      radial-gradient(circle 20px at -20% 50%,transparent,transparent 100px,#888888 100px),
      radial-gradient(circle 20px at 120% 50%,transparent,transparent 100px,#888888 100px);
    background-size:100px 200px, 100px 200px;
    background-position:0 0,100% 0;
    background-repeat:no-repeat;
}
Run Code Online (Sandbox Code Playgroud)

请注意,大多数webkit浏览器仍需要径向渐变的前缀,如果要完全支持旧版浏览器,则可能还需要实现较旧的渐变语法.

  • 当我把它扔到[JSFiddle](http://jsfiddle.net/6A5Lb/41/)时,看不到任何边框.我错过了什么吗?(编辑我在IE中做的.猜猜它需要Chrome上的一些供应商前缀) (3认同)

Moh*_*man 6

SVG是创建此类形状的推荐方法。它提供了简单性和可扩展性。

我们可以用 SVG的 path 元素来创建一个像上面一样的形状,并用一些纯色、渐变或图案填充它。

只有一个属性d用于定义形状path元素中的。此属性本身包含许多短命令和这些命令工作所需的几个参数。

以下代码将创建一个凸面形状:

<path d="M 150,25
         Q 115,100 150,175
         Q 185,100 150,25" />
Run Code Online (Sandbox Code Playgroud)

下面一个将创建一个凹形:

<path d="M 30,25
         L 80,25
         Q 50,100 80,175
         L 30,175
         Q 60,100 30,25" />
Run Code Online (Sandbox Code Playgroud)

以下是path上述代码中使用的命令的简要说明:

  • M命令用于定义起点。它出现在开头并指定绘图开始的点。
  • L 命令用于绘制直线。
  • Q 命令用于绘制曲线。

输出图像:

凸凹形状

工作演示:

<path d="M 150,25
         Q 115,100 150,175
         Q 185,100 150,25" />
Run Code Online (Sandbox Code Playgroud)

有用的资源:

以下是一些有用的 SVG 链接: