html - 在 html 中渲染带有阴影的气泡状缩略图的灵活方法

标签 html canvas css svg

目标:带有阴影的类似语音气泡的缩略图,就像这个:

http://min.us/moStWhsGd http://k.minus.com/jbkSDvCUDvhYcj.jpg

大小和阴影可能会发生变化。

我的第一个想法当然是 png 叠加层,但它缺乏灵 active 而且也不好玩。但是,它总是有可能作为旧 ie-s 的后备。

还考虑过用旋转的 div 渲染“尾部”,但在其中匹配背景将是一个皮塔饼。

什么是更好的方法? Canvas 或者 svg 蒙版?几乎没有经验。有了这些技术,我们将不胜感激一些入门技巧。

更新:好吧,这就是我在浏览文档和浏览器不一致几个小时后想到的 svg:

  1. 似乎不可能通过 css 将阴影的剪切路径和 svg 过滤器应用于 html 元素,因此我们必须在 <svg> 中呈现整个故事。 .
  2. 我发现了两种将图像嵌入到 svg 中的方法:1) 使用 feImage 进行拟合元素 2) foreignObjectimgdiv有背景。

    第一种方法可以看例如像这样

    <svg filter="url(#dropshadow)"> <rect x="0" y="0" width="120" height="120" filter="url(#imageFilter)" clip-path="url(#clipPath)"/> </svg>

    这将在 FF 和 Chrome 中工作(我没能在 Opera 中工作并且没有尝试 ie9)。然而,使用这种方法,FF 中的图像似乎变得模糊,至少在调整大小后是这样,而在 Chrome 中,它看起来比原始图像更亮(原文如此!)。

    仅从研究的 Angular 来看,需要为每张图像创建一个单独的过滤器才使其变得有趣。

    第二种方法看起来像这样

    <svg filter="url(#dropshadow)"> <foreignObject width="140" height="140" clip-path="url(#clipPath)"> <img src="img/ourImage.png" height="140" /> </foreignObject> </svg>

    它在 FF 中完美运行,但 Chrome 和 Opera 都不能将剪切路径应用于 foreignObject (没试过ie9)。

  3. 似乎只有 FF 支持 clippingPath 内的多个元素:如果您添加多个矩形,Chrome 和 Opera 会输出一些奇怪的东西。所以为了在 Chrome 中使用第一种方法,我必须创建一个 path在 InkScape 中,而在 FF 中,我设法创建了带有两个矩形的“气泡”,一大一小并旋转了。

因此,第二种方法看起来很不错,它比较灵活且易于使用。如果除 FF 之外的其他浏览器能更好地支持剪切路径就好了……

以下是 jsFiddle 示例:http://jsfiddle.net/B7593/11/演示了两个变体,其中剪切路径由 2 个矩形组合而成,因此仅适用于 FF,http://jsfiddle.net/B7593/10/使用由 InkScape 生成的路径元素并在 Chrome 中部分工作。

UPDATE2:好吧,我真丢人,还有第三种也是最合适的将图像嵌入 svg 的方法:image element .

最佳答案

如果你想把它做成 svg,我会这样做:

  • 使用光栅图像作为头像
  • 使用路径元素定义气泡形状的剪辑路径
  • 将剪辑路径应用于图像元素
  • 将 svg 滤镜应用于图像元素以获得投影

然后重复使用基本设置,只替换头像 url。使用 Inkscape 或 Illustrator 制作快速原型(prototype)应该相当简单。

更新: 这是一个 example我的意思。

关于html - 在 html 中渲染带有阴影的气泡状缩略图的灵活方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435596/

相关文章:

javascript - 如何将水平滚动按钮更改为垂直滚动

php - 通过脚本重定向图像是不好的做法吗?

JavaFX Canvas 高效动画

javascript - 如何在不删除背景的情况下在 Canvas 上删除

php - 没有 css/js 的 Gii

html - 水平溢出多个内联垂直列表

javascript - JQuery 不会按内部项删除类

html - 粘性页脚显示

css - pngfix 是否只影响标记中的图像与 css 中的图像?

html - 如何使用 angularJs 从 json 值呈现 HTML 标记