轻松实现星级评分组件

99f0f2461bc7f0518bc0a5c9a92cd1ef.png

实现星级评分的五种方式:

1.使用图片2.使用背景图片3.使用 SVG 绘制形状4.使用 CSS 绘制形状5.使用 Unicode 符号

8348b8f572136ac07ae90c25a9997e53.png

先介绍一下 CSS 介绍如何实现一个五角星,我们可以给一个 div 元素先设置 100 宽高,然后通过 clip-path 把元素裁剪出五角星的形状。

<div class="clip-star"></div>


.clip-star {
  background: gold;
  clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
  display: inline-block;
  height: 100px;
  width: 100px;
}

前几种方式都比较常见,今天主要介绍如何通过特殊符号实现评分组件。

Unicode 字符可以直接把 ★★★★★ 复制并粘贴到 HTML 中,我们可以使用字体、颜色、宽度、高度和其他属性来调整大小和样式。

<div class="Stars" style="--rating: 2.3;" aria-label="Rating of this product is 2.3 out of 5.">


:root {
    --star-size: 60px;
    --star-color: #fff;
    --star-background: #fc0;
}


.Stars {
    --percent: calc(var(--rating) / 5 * 100%);
    display: inline-block;
    font-size: var(--star-size);
    font-family: Times; 
    line-height: 1;
}
.Stars::before {
    content: '★★★★★';
    letter-spacing: 3px;
    background: linear-gradient(90deg, var(--star-background) var(--percent), var(--star-color) var(--percent));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

评级值作为内联自定义 CSS 属性变量 --rating,它实际上是使用 calc() 函数在 CSS 处理从数值到百分比的转换:

--percent: calc(var(--rating) / 5 * 100%);

评级值是一个浮点数,它是一种 number 类型。使用此转换有助于确保我们可以通过多种方式设置这些值。

填充星星可能听起来很困难,但事实证明非常简单。我们需要一个linear-gradient背景来在金色填充结束的地方创建颜色停止点:

background: linear-gradient(90deg,
  var(--star-background) var(--percent), 
  var(--star-color) var(--percent)
);

请注意,我使用自定义颜色变量,因为我希望样式可以轻松调整。由于自定义属性是从父元素样式继承的,因此您可以在 :root 元素上定义,然后在元素中使用。

:root {
  --star-size: 60px;
  --star-color: #fff;
  --star-background: #fc0;
}

最后就是将背景剪裁为文本的形状,以便背景渐变呈现星星的形状。将 Unicode 星星视为我们用来从背景颜色中剪出星星形状的模板。

-webkit-background-clip: text;
-webkit-text-fill-color: transparent;

这样就可以轻松的定义评分组件了,并且评分的值支持小数也支持整数,可以很方便的设置半颗星。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值