应使用@keyframes定义warn-pulse动画,结合color变化与轻微translatex抖动,时长控制在1.2秒内,配合prefers-reduced-motion兜底,并通过css变量与data-stock属性动态响应库存状态,避免硬编码和可访问性风险。

库存不足时让文字变红并加闪烁效果
直接用 color 和 animation 就能实现,但要注意闪烁不能干扰可访问性。浏览器默认不支持 blink 值(已废弃),必须手写 @keyframes。
常见错误是只设 color: red,结果用户根本注意不到——尤其在移动端或弱光环境下。建议搭配轻微抖动+颜色变化,提升感知度,但动画持续时间别超过 2s,否则会被屏幕阅读器反复播报。
- 用
@keyframes warn-pulse { 0%, 100% { color: #e74c3c; transform: translateX(0); } 50% { color: #c0392b; transform: translateX(1px); } } - 绑定到类如
.stock-low { animation: warn-pulse 1.2s ease-in-out infinite; } - 务必加
prefers-reduced-motion: reduce媒体查询兜底,否则会触发 WCAG 2.3.2 失败
用 CSS 变量动态控制库存状态样式
硬编码颜色和动画参数会导致维护困难,比如运营临时要求“库存 ≤3 时黄底+黑字,≤1 时红底+白字”。用 CSS 变量配合 data-stock 属性更灵活。
关键点在于:不要用 JS 频繁改 class,而是让 CSS 自动响应属性值。现代浏览器支持属性选择器匹配数字范围,但仅限于精确值;真要按区间区分,得靠 JS 设置变量值,CSS 只负责消费。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- HTML 写成
<span class="stock" data-stock="2">仅剩 2 件</span> - JS 根据数值设置
el.style.setProperty('--stock-value', stock) - CSS 里用
.stock { --low-threshold: 3; color: var(--stock-color, #333); } .stock:not([data-stock='0'])::before { content: '⚠ '; } .stock[data-stock='0'] { --stock-color: #95a5a6; }
避免文字被截断或重叠的布局处理
库存提示常出现在商品卡片右上角、价格旁或按钮内,空间紧张。直接加红字容易撑开容器或盖住图标,尤其在 flex 或 grid 布局中。
最稳妥的方式是用 position: absolute 脱离文档流,但必须确保父容器有 position: relative,且留出足够 padding 防止遮挡交互区域。
- 绝对定位示例:
.stock-badge { position: absolute; top: 4px; right: 4px; font-size: 0.75em; padding: 2px 6px; background: #e74c3c; color: white; border-radius: 2px; } - 若父容器高度固定(如
height: 36px),优先用line-height垂直居中,比flex更轻量 - 禁用
white-space: nowrap—— 库存文案如“库存紧张”在小屏可能超宽,应允许折行或用省略号
IE11 兼容时的降级方案
IE11 不支持 CSS 变量、@keyframes 动画会失效,且 data- 属性选择器行为不稳定。这时候别强撑动画,专注信息传达本身。
核心原则:先保证“用户知道库存少”,再考虑“怎么显得更醒目”。IE 用户大概率是企业内网场景,体验预期本就偏低。
- 用 class 区分状态:
.stock-low-ie { color: #e74c3c; font-weight: bold; },由后端或构建时注入 - 放弃动画,但保留
text-shadow: 0 0 2px rgba(231,76,60,0.5)做轻微描边增强对比 - 避免使用
transform,IE11 的translateX在 inline 元素上表现异常,改用margin-left微调位置
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










