如何使用 CSS 实现星形评分的渐进式部分填充(支持小数精度)

夏萱大大_3383

夏萱大大_3383

2026-04-10

1047人浏览

原创

本文介绍一种基于 CSS 自定义属性与 background-clip: text 的纯前端方案,无需 SVG 或额外 DOM 元素,即可精准按百分比(如 4.27 星)为五角星图标实现颜色渐变填充,且填充区域严格限定在星形轮廓内。

本文介绍一种基于 css 自定义属性与 `background-clip: text` 的纯前端方案,无需 svg 或额外 dom 元素,即可精准按百分比(如 4.27 星)为五角星图标实现颜色渐变填充,且填充区域严格限定在星形轮廓内。

实现星形评分的部分填充,关键在于将“填充色”精确映射到星形字符(★)的视觉轮廓中,而非简单裁剪容器或覆盖背景。原始方案中使用 clip-path: polygon() 试图对 元素做几何裁剪,但存在两大根本性问题:一是 FontAwesome 图标本质是字体图标,其渲染依赖文本路径,clip-path 作用于块级容器时无法智能识别字形轮廓;二是 CSS 变量 --half-star-percentage 在 :root 中被静态声明为字符串 percentageFilled * 100%,未通过 JS 动态注入,导致无效。

✅ 推荐方案采用 CSS 自定义属性 + background-clip: text + 纯文本 ★ 字符,原理清晰、兼容性好(Chrome/Firefox/Safari 均支持)、且完全响应式:

<div class="stars-landing" id="stars-box" style="--rating: 4.27;" aria-label="Rating: 4.27 out of 5">
  ★★★★★
</div>
:root {
  --star-size: 24px;
  --star-color: #ffd700;     /* 填充色(亮金色) */
  --star-background: #e0e0e0; /* 未填充背景色(浅灰) */
}

.stars-landing {
  --percent: calc(var(--rating) / 5 * 100%);
  font-size: var(--star-size);
  font-family: "Times New Roman", Times, serif; /* 确保 ★ 渲染一致 */
  line-height: 1;
  letter-spacing: -3px; /* 消除星号间默认间距 */
  color: var(--star-background); /* 默认显示为背景色 */
  position: relative;
}

.stars-landing::before {
  content: attr(data-stars, "★★★★★"); /* 兜底内容 */
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  background: linear-gradient(90deg,
    var(--star-color) 0%, 
    var(--star-color) var(--percent), 
    var(--star-background) var(--percent), 
    var(--star-background) 100%
  );
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  z-index: 1;
}

? 核心要点说明:

CSS婚礼策划服务机构宣传网站模板
CSS婚礼策划服务机构宣传网站模板

CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载
  • 使用 ::before 伪元素叠加一层与原星号完全重合的文本层,并通过 background-clip: text 将线性渐变背景“裁剪”至文字轮廓内,实现真正意义上的“星形内着色”。
  • --percent 计算逻辑为 rating / 5 * 100%,完美支持任意小数(如 4.27 → 85.4%),无需手动区分 full-star/half-star 类名。
  • letter-spacing: -3px 是关键微调项,避免字体渲染间隙导致填充断层;若使用 FontAwesome,建议改用 SVG 图标并配合 mask,但本方案更轻量通用。

? JS 动态更新示例:

const starsEl = document.getElementById('stars-box');
const ratingValue = 4.27;
starsEl.style.setProperty('--rating', ratingValue.toFixed(2));
// 同时可同步更新 aria-label 提升可访问性
starsEl.setAttribute('aria-label', `Rating: ${ratingValue} out of 5`);

? 注意事项:

  • 必须设置 color: transparent + background-clip: text,仅靠 color 无法实现渐变填充;
  • font-family 建议指定衬线字体(如 Times),确保 ★ 符号轮廓稳定;无衬线字体下 ★ 可能变形;
  • 若需深色模式适配,可结合 @media (prefers-color-scheme: dark) 覆盖 --star-color 和 --star-background;
  • Safari 旧版本需添加 -webkit-background-clip: text 前缀(已包含在示例中)。

该方案摒弃了复杂 DOM 操作与脆弱的几何裁剪,以声明式 CSS 驱动视觉表现,兼顾性能、可维护性与设计精度,是现代星级评分组件的理想实践。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

css

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6115

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3432

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3110

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3139

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4879

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3081

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2889

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2548

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2608

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.9万人学习

CSS教程
CSS教程

共754课时 | 97.4万人学习