在CSS中生成不规则边缘

9

我目前正在使用图片,想知道是否有任何CSS库或方法可以生成这些不整齐的边缘。

更大尺寸的图像:(使用PNG作为内容顶部和底部的部分) [http://i.imgur.com/LgyNSOJ.png][1] 输入图像描述

谢谢!

编辑:我注意到有人投票关闭这个问题,但我想让它在今天其余时间保持开放状态,以防提供更多解决方案。


1
我不了解CSS,但也许你可以尝试SVG?链接 - RobinvdA
明天我会尝试一下,并在这里回复你。谢谢。 - penguinsource
使用Photoshop创建一个PNG图像作为背景,并重复它。 - Alien
1
类似于[这个](http://jsfiddle.net/yKPe9/3/)的东西? - jbutler483
@Cattla 我已经在使用 PNG 图像(如上面的图像 ^)了,但我想看看是否可以完全通过 CSS 来实现,因为我希望白色区域周围都有粗糙的边缘。 - penguinsource
@jbutler483 我尝试生成的边缘更随机和波浪。感谢您的努力,我会尝试看看能否从中得到一些东西。 - penguinsource
4个回答

11

我相信自2014年发布以来,事情已经有所进展。现在是2017年,我使用CSS创建了粗糙/撕裂边缘的外观。请查看代码示例。我相信通过更多的工作,我可以使其更加真实...但是我喜欢这个结果对我的目的所带来的效果。

clip-path: polygon(3% 0, 7% 1%, 11% 0%, 16% 2%, 20% 0, 23% 2%, 28% 2%, 32% 1%, 35% 1%, 39% 3%, 41% 1%, 45% 0%, 47% 2%, 50% 2%, 53% 0, 58% 2%, 60% 2%, 63% 1%, 65% 0%, 67% 2%, 69% 2%, 73% 1%, 76% 1%, 79% 0, 82% 1%, 85% 0, 87% 1%, 89% 0, 92% 1%, 96% 0, 98% 3%, 99% 3%, 99% 6%, 100% 11%, 98% 15%, 100% 21%, 99% 28%, 100% 32%, 99% 35%, 99% 40%, 100% 43%, 99% 48%, 100% 53%, 100% 57%, 99% 60%, 100% 64%, 100% 68%, 99% 72%, 100% 75%, 100% 79%, 99% 83%, 100% 86%, 100% 90%, 99% 94%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 2% 97%, 1% 97%, 0% 94%, 1% 89%, 0% 84%, 1% 81%, 0 76%, 0 71%, 1% 66%, 0% 64%, 0% 61%, 0% 59%, 1% 54%, 0% 49%, 1% 45%, 0% 40%, 1% 37%, 0% 34%, 1% 29%, 0% 23%, 2% 20%, 1% 17%, 1% 13%, 0 10%, 1% 6%, 1% 3%); 

8
您可以使用svgfilter来获得类似的效果。

body {
  background: tan;
}
svg {
  position: relative;
  width: 500px;
  left: 50%;
  transform: translateX(-50%);
}
p {
  color: peru;
  padding: 45px;
}
<svg width="500" height="500">
  <defs>
    <filter id="filter" height="1.4" width="1.4">
      <feTurbulence baseFrequency="0.12" numOctaves="2" type="fractalNoise" result="result1" />
      <feDisplacementMap in2="result1" scale="99" result="result2" xChannelSelector="R" in="SourceGraphic" />
      <feComposite in2="result2" in="SourceGraphic" operator="atop" result="fbSourceGraphic" />
    </filter>
  </defs>
  <rect fill="saddlebrown" filter="url(#filter)" width="500" height="500" x="0" y="0" />
  <foreignObject width="500" height="500">
    <div>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        <br />
        <br />Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
        quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam
        eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit
        qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
      </p>
    </div>
  </foreignObject>
</svg>


谢谢,这大概是最接近的了,但我还是会选择使用图片,因为它们看起来更加流畅。 - penguinsource

3

谢谢,这是一篇很好的文章。在上面的图片中,我已经使用了PNG完成了它,但我想看看是否可以使用CSS创建相同的效果,以便我可以在内容周围拥有粗糙的边缘(从而使其成为边框效果)。 - penguinsource
就那个特定部分而言:请查看border-image属性。目前的支持情况不太稳定,但值得关注。 - Niels Keurentjes
在CSS3 border-image上查看浏览器支持情况,请点击此处:http://caniuse.com/#feat=border-image。 - Niels Keurentjes
我明白了,还不错但可以更好。 - penguinsource

2

我建议使用SVG。你可以在Illustrator/Sketch中轻松地创建这些准确的形状,并从那里导出SVG文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接