如何使用 CSS 实现星标(★)的渐进式部分填充效果?

陌枫酱_5261

陌枫酱_5261

2026-04-10

676人浏览

原创

本文介绍一种基于 CSS linear-gradient 与 background-clip: text 的纯 CSS 星标动态填充方案,支持任意小数评分(如 4.27),无需修改 HTML 结构或依赖 SVG,兼容现代浏览器且性能优异。

本文介绍一种基于 css `linear-gradient` 与 `background-clip: text` 的纯 css 星标动态填充方案,支持任意小数评分(如 4.27),无需修改 html 结构或依赖 svg,兼容现代浏览器且性能优异。

实现星标的部分填充(如显示 4.27 颗星)的核心难点在于:不能简单用 width 裁剪图标元素(因字体图标不可缩放裁剪),也不能用 clip-path 硬编码星形路径(维护成本高、响应性差)。更优解是利用文本渲染能力 + 渐变遮罩,将五星字符(★★★★★)视为“文字”,通过背景渐变控制可见区域。

以下为完整、可直接运行的解决方案:

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

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

下载

✅ 推荐实现:CSS 变量驱动的文本渐变填充

<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: #e0e0e0;     /* 未填充星标颜色(底色)*/
  --star-fill: #ffc107;      /* 已填充星标颜色(主色)*/
}

.stars-landing {
  --percent: calc(var(--rating) / 5 * 100%);
  display: inline-block;
  font-size: var(--star-size);
  font-family: "Segoe UI", "Times New Roman", serif; /* 使用衬线字体确保 ★ 渲染一致 */
  line-height: 1;
  color: var(--star-color);  /* 默认显示为空心星(灰阶)*/
  letter-spacing: -2px;       /* 紧凑排布,避免星间空隙 */
  position: relative;
}

/* 利用 ::before 叠加渐变填充层,覆盖原文字 */
.stars-landing::before {
  content: attr(aria-label); /* 或直接写 '★★★★★',但需确保与 DOM 文本一致 */
  position: absolute;
  top: 0; left: 0; width: 100%; height: 100%;
  color: transparent;
  background: linear-gradient(90deg,
    var(--star-fill) 0%,
    var(--star-fill) var(--percent),
    var(--star-color) var(--percent),
    var(--star-color) 100%
  );
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

? 关键原理说明:

  • ::before 伪元素复刻五星文本(视觉上与原内容重叠),但将其文字颜色设为 transparent;
  • 用 linear-gradient(90deg, ...) 水平渐变:前 --percent 区域显示 --star-fill(金色),之后区域显示 --star-color(灰色);
  • background-clip: text 将该渐变「裁剪」到文字轮廓内,实现精准填色;
  • --rating 由 JS 动态注入(如 element.style.setProperty('--rating', ratingValue)),无需操作 DOM 类名或样式属性。

✅ JavaScript 动态更新示例(简洁可靠)

const starsBox = document.getElementById('stars-box');
const ratingValue = 4.27;

// 直接更新 CSS 自定义变量
starsBox.style.setProperty('--rating', ratingValue.toFixed(2));
// 可选:同步更新 aria-label 提升可访问性
starsBox.setAttribute('aria-label', `Rating: ${ratingValue} out of 5`);

⚠️ 注意事项与最佳实践

  • 字体兼容性:★ 字符在不同系统中渲染略有差异,推荐指定 font-family 并测试 iOS/Android/Windows 表现;
  • 可访问性:务必保留 aria-label,屏幕阅读器会读取该属性而非视觉填充效果;
  • IE 不支持:background-clip: text 在 IE 中无效,如需兼容旧版浏览器,建议降级为 SVG 方案;
  • 响应式优化:可通过 clamp() 控制 --star-size,例如 --star-size: clamp(16px, 4vw, 28px);;
  • 多语言适配:若项目支持 RTL(如阿拉伯语),添加 direction: ltr 到 .stars-landing 防止渐变方向异常。

该方案彻底规避了原始问题中的两大缺陷:
❌ 不再依赖 .half-star 类名和 clip-path 复杂路径;
✅ 填充色直接作用于星形轮廓本身(非背景),视觉精准、语义清晰、维护成本极低。

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

相关专题

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

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

2023.06.14

5575

7

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

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

2023.06.21

3172

4

html网页制作
html网页制作

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

2023.07.31

2850

5

html空格
html空格

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

2023.08.01

2859

5

html是什么
html是什么

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

2023.08.11

4719

6

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

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

2023.08.11

2821

3

html转txt
html转txt

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

2023.08.31

2609

3

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

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

2023.09.01

2348

6

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

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

2023.09.20

2348

5

热门下载

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

精品课程

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

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.8万人学习

CSS教程
CSS教程

共754课时 | 95.9万人学习