【发布时间】:2022-10-25 15:13:13
【问题描述】:
所以我需要一些文本、图像和其他元素,以便在它们周围有一种粗略的手绘边框。例如,这里是我使用 rough.js 库创建的。
我对如何解决这个问题有多种想法。我不知道哪一个可能是最好的,或者是否还有其他更好的选择。
要求是单个图像周围的粗略边框,画廊周围的多个图像,标题或带有文本图像和按钮的整个博客元素。当然,所有这些都是响应式的。
到目前为止,我的选择如下:
香草 CSS
Vanilla css 方法是创建一个粗略的边框,如下所示:https://codemyui.com/hand-drawn-border-buttons-css/
这并不真正满足要求,因为它并不真正接近所需的最终产品。我添加的示例有多个边界线,而香草 css 边界是不可能的。
SVG
另一种选择是将边框作为 SVG 元素添加到代码中,然后将它们放在图像上方。这似乎不是很好,因为对于一个人来说,我只想在元素上设置一个类来实现这个边框,并且仍然保留将前后元素用于其他目的的可能性。
另外我想这会因为不同的屏幕尺寸而改变元素的尺寸和纵横比而变得困难,类似于边框图像可能不起作用的方式。
粗糙的.js
Rough.js 是一个很棒的库,体积小,效果好。这个库的问题是随机性。对于整个页面的特定元素,边框应该具有独特的外观。似乎没有停用所述随机性的选项(我猜是有道理的)。
另外我宁愿不使用任何库。
帆布
通过 JS 添加画布并在图像顶部创建绘制边框似乎确实有效。这里的问题是,页面上的许多元素需要重新创建为画布。我不知道这是否真的会影响性能,但我认为它会在将这么多元素作为画布时产生许多其他困难。
我对画布的了解也很有限。
创建 SVG
我一直在研究的另一个选择是以编程方式创建 svg 并将它们添加到图像中。到目前为止,这似乎在使用 Rough.js 创建 svg 时有效。我不知道在 vanilla 或 jquery 中创建它会有多复杂。以及那将是多么实用。还有如何在不使用任何伪元素的情况下将其添加到图像/文本元素中。
创建一个 Paintworklet
一个很好的解决方案是使用paint worklet 和registerpaint。然后通过边框图像调用它。这种方法我真的很喜欢。这里的问题是浏览器功能,因为包括 firefox 在内的许多浏览器不支持 registerPaint。如果有办法使用这个跨浏览器,我真的很喜欢这个解决方案。
所以到目前为止,这些是我的选择。对于我的方案的最佳选择和/或我还没有考虑过更好的选择和解决方案,我真的很感激一些建设性的批评。
PS:我没有添加任何代码,因为它并不重要。它应该独立于底层代码工作。
【问题讨论】:
标签: javascript html jquery css