对于一个内容服务的网站来说评价打分也是很重要的一部分,它有利于分析用户对我们的内容的喜好程序。最近,我们团需要为一个项目实现一个星级评价的组件,需求如下:
- 性能(不能用图片)
- 可调整的大小
- 可访问性
- 小数位打分(如:
3.5
或3.2
) - 使用 css 就可以直接控制样式
要达到上面的要求,经常调研,最终选择了 SVG 方案。
任务
下图是我们最终想要的效果:
为了解决这个问题,我们需要另一个星形轮廓。可以通过复制<use>
元素并删除它的 mask
来实现这一点。
<p > <svg width="32" height="32" viewBox="0 0 32 32"> <use href="#star" mask="url(#half)" fill="green"></use> <use href="#star" fill="none" stroke="grey"></use> </svg> </p>
注意,我们有两个<use>
元素。一个带mask
的,一个只有 stroke
的。这就是使用 SVG masks 实现轮廓样式的方法。
事例地址:点击链接
SVG 渐变实现轮廓样式
对于渐变解决方案,我们不需要复制图标,因为没有mask
。我们需要做的是添加一个stroke
,它就完成了。
<svg style="width: 0; height: 0;" viewBox="0 0 32 32"> <defs> <linearGradient id="half" x1="0" x2="100%" y1="0" y2="0"> <stop offset="50%" stop-color="#f7efc5"></stop> <stop offset="50%" stop-color="#fed94b"></stop> </linearGradient> </defs> </svg> <p > <svg width="32" height="32" viewBox="0 0 32 32"> <use href="#star" fill="url(#half)" stroke="grey"></use> </svg> </p>
事例地址:点击链接
大小
通过使用 CSS 变量并确保 SVG 具有正确的viewBox
属性,我们可以轻松地调整它们的大小。
.c-icon { width: var(--size, 24px) height: var(--size, 24px); } .c-icon--md { --size: 40px; } .c-icon--lg { --size: 64px; }