在上一篇文章中,我们构建了一个仅CSS的星级评级组件,利用CSS掩码, border-image
和增强的attr()
函数。由此产生的代码提供了创建变化的适应性,例如心脏评分和音量控制。
此后续活动探索了使用滚动驱动的动画的更通用的方法。我们将利用基于滚动的动画的力量,而不是border-image
方法。
这是使用此新技术实现的同一星级评级组件。由于其实验性质,最佳观看需要Chrome 115(Safari和Firefox支持待处理)。
注意关键区别:星颜色动态反映选择数 - border-image
方法不可能的壮举。
为了完全理解,强烈建议审查第一篇文章,因为本部分基于其概念和技术。
重要说明:在写作时,只有Chrome 115和Edge 115完全支持此处使用的功能。跟随时,请使用这些浏览器之一。
将卷轴驱动的动画应用于静态星级评分组件似乎是违反直觉的。滚动驱动动画的MDN解释最初增加了混乱:
它使您可以根据基于滚动的时间表的进程而不是基于默认的基于时间的文档时间表来对属性值进行动画化。这意味着您可以通过滚动可滚动元素而不是通过时间来使元素动画。
但是,MDN阐明存在两种基于卷轴的时间表:滚动进度时间表并查看进度时间表。我们将利用后者:
您可以根据滚动器内部的元素(称为主题)的可见性变化来进行此时间表。滚动器内部对象的可见性是作为进度的百分比跟踪的 - 默认情况下,当受试者在滚动器的一个边缘上首先可见时,时间轴为0%,当它到达相反的边缘时100%。
CSS-Tricks年鉴提供了另一个有用的view-timeline-name
定义。
通过将拇指元素视为主题,将输入元素视为滚动器,该概念变得更加清晰。输入区域内的拇指运动改变了其可见性,从而创造了一个基于百分比的进度,我们可以用来为输入设置样式。从本质上讲,我们正在复制document.querySelector("input").value
,但纯粹是用CSS!
实施详细信息
让我们检查代码:
@property -Val { 语法:”<number> ” 继承:正确; 初始值:0; } 输入[type =“ range”] { - min:attr(min类型(最低)类型(<number> ); -max:attr(max type(max type)(<number> ); 时间轴范围:-Val; 动画: - Val线性两者; 动画台式:-Val; 动画范围:条目100%退出0%; 溢出:隐藏; } @KeyFrames -Val { 0%{ - Val:var(-max)} 100%{ - val:var(-min)} } 输入[type =“ range”] :: thumb { 视图 - 台式: - val inline; }</number></number></number>
这可能看起来很复杂,但是逐条分解简化了它。
主题和滚动器
我们使用view-timeline
速记来定义主题(拇指):
view-timeline
CSS Shorthand属性定义了一个命名的视图进度时间表,该时间表根据可滚动元素(滚动器)中元素(主题)的可见性更改进行进展。view-timeline
是对该主题设置的。
时间轴名称为--val
,轴为inline
(水平)。
接下来,我们用溢出来定义滚动器(输入) overflow: hidden
(或overflow: auto
)。至关重要的是,不要忘记滚动器上的overflow
!没有它,浏览器将定义滚动器,有可能导致意外结果。
动画片
动画使用增强的attr()
函数修改输入的min
和max
之间的--val
变量。该动画使用animation-timeline
。 @property
规则注册动画变量。
timeline-scope
也是至关重要的。命名的视图时间表通常范围范围为元素及其后代。由于输入是拇指的父母,因此我们使用timeline-scope
扩大了范围。
密钥帧值倒置( min
为100%, max
为0%),因为动画始于拇指在右侧(最大值)并在左侧结束(最小值)。这反映了水平滚动元素的行为,该元素从右侧出现并消失向左。
动画范围
animation-range: entry 100% exit 0%;
至关重要。默认情况下,动画从主题从右侧进入滚动器并从左侧退出时结束时开始。由于拇指不会溢出,我们调整了范围,因此当拇指完全在滚动器内并开始离开时结束时,动画开始了。
重复使用--val
是指动画变量,命名的视图时间轴和键框,所有这些都共享相同的名称,以提高清晰度。使用不同的名称可以增强可读性。
星级评分组件
核心工作涉及获得输入的价值。其余代码样式组件,从第一篇文章中汲取:
输入[type =“ range”] { 背景: 线性梯度(90级, HSL(calc(30 4 * var(-val))100%56%)calc(var(-val) * 100% / var(-max)), #7B7B7B 0 ); } 输入[type =“ range”] :: thumb { 不透明度:0; }
拇指是隐藏的,梯度基于--val
变量为星星颜色。梯度的颜色还使用hsl()
动态变化。
完整的演示(推荐Chrome 115)展示了该功能,包括通过调整输入的属性来显示半明星支持。
边界图像与卷轴驱动动画
除了浏览器兼容性之外,卷轴驱动的动画方法还超过了border-image
方法。虽然border-image
更简单,但缺乏灵活性。滚动驱动的动画提供了更大的控制,因为获得了输入值,然后用于样式。即使没有直接输入样式,这种价值回归技术也可以重复使用。
示例显示了控制不同页面元素的工具提示和多个范围滑块,证明了这种方法的多功能性。即使是波浪范围的滑块也说明了广泛的样式可能性。
结论
这个分为两部分的系列展示了一个最小的代码星级评分组件,同时探索attr()
,CSS掩码和滚动驱动的动画。尽管浏览器支持限制了即时生产使用,但探索这些功能为未来CSS功能提供了宝贵的见解。
文章系列
- 仅CSS的星级等级组件等等! (第1部分)
- 仅CSS的星级等级组件等等! (第2部分)
以上是仅CSS的星级等级组件等等! (第2部分)的详细内容。更多信息请关注PHP中文网其他相关文章!

在这篇文章中,布莱克·莫里(Blackle Mori)向您展示了一些骇客,同时试图推动同位HTML支持的极限。如果您敢于使用这些,以免您也被标记为CSS罪犯。

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器