content 属性不支持直接解析 CSS 变量,因规范限制其仅接受字符串、attr()、counter()等有限类型;需通过 counter-reset 结合 counter() 间接实现变量值显示。
属性本身不支持直接解析 CSS 变量(
),写成
会完全失效,浏览器忽略该声明——这不是 bug,是规范限制。
为什么
不能直接用
CSS 的
是一个“生成内容”属性,只接受字符串字面量、
、
、
和 URL 等有限类型。它不参与 CSS 变量的计算上下文,
在这里不会被求值,而是当作无效语法丢弃。
常见错误现象:
页面上伪元素完全不显示内容(连空格都没有)
开发者工具里能看到
声明被划掉(strikethrough)
误以为是变量没定义,其实即使
已声明,
仍不工作
用
中转变量值的原理
关键突破口在于:
的第二个参数(初始值)**支持 CSS 变量求值**,而
函数能安全读取这个已初始化的计数器值。
立即学习
“
前端免费学习笔记(深入)
”;
所以实际走的是这条链路:
→
→
→ 渲染为
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
实操要点:
必须为每个需要显示变量的元素单独设置
,不能靠继承或全局重置
计数器名(如
)要唯一,避免多个元素共用同一计数器导致互相覆盖
中的
必须是整数;小数会被截断为整数(
→
)
如果变量未定义或值非法(如
、
),计数器初始化为
如何补零、加单位或支持小数
只输出纯数字,不支持格式化。想显示
或
?原生 CSS 没办法。
可行方案:
补零:用 JS 计算并写入
,再用
+
(但
不触发重绘,适合静态值)
小数/千分位:必须用 JS 更新
并配合
/
做视觉动画,
仅作 fallback 显示整数部分
单位符号(如
):只能硬拼,
;
是语法错误
移动端与性能要注意什么
这个技巧在 iOS Safari 和 Android Chrome 上都可用,但要注意:
频繁修改 CSS 变量(如每帧更新进度)会触发大量
重计算,可能造成 layout thrashing
别把这种伪元素塞进
或滚动容器里,重排成本高
若目标是动画式数字增长(非跳变),优先考虑 JS +
方案,比强行用
+
更可控
真正容易被忽略的点是:
的变量求值只发生在样式计算阶段,不是响应式更新——变量变了,但没触发重排时,
不会自动刷新。得靠其他方式(比如改伪元素的
或添加 class)来“撬动”重绘。
contentvar(--num)content: var(--num);contentvar()contentattr()counter()counters()var()content--num: 42content: var(--num)counter-resetcounter-resetcounter()--percent: 75counter-reset: progress var(--percent)counter(progress)"75"counter-resetprogresscounter-reset: name var(--val)var(--val)99.699""auto0counter()"087%""99.5%"data-pctattr(data-pct)contentattr()--numtransformclip-pathcounter%content: counter(progress) "%"counter(progress "%")counter-resetposition: stickytransition: transformsteps()counter-incrementcounter-resetcounter()opacity