@media (scripting: enabled) { .my-element { /* 如果JS可用,增强样式 */ } }或者,我们可以优雅地回退到一些备选样式:
@media (scripting: none) { .my-element { /* 如果JS不支持,使用备选样式 */ } }还有一个initial-only值,适用于在页面加载期间启用脚本但在之后不启用的情况。CSS媒体查询第5级W3C工作草案[1]中提到了一些它可能有用的场景。
<html class="no-js"> <!-- 页面内容 --> </html> .no-js .my-element { /* 当JS被禁用时的样式 */ }组合查询
@media (scripting: enabled) and (prefers-reduced-motion: no-preference) { /* JS可用且运动OK */ } @media (scripting: none), (prefers-reduced-motion) { /* JS已禁用或减少运动已启用 */ }每个条件当然可以有独家样式,如果预期的结果需要的话,但在规则集有重叠的地方,将它们结合起来也很好。
更新于2024年4月21日 - 在发布这篇文章后,一些反馈浮现出来,解释了这个媒体特性在哪些方面意外地失败了。当使用像NoScript或uBlock Origin这样的浏览器扩展来禁用页面脚本时,它的表现并不像预期的那样。即使扩展将JavaScript关闭了,scripting: enabled仍然匹配。如果脚本被阻止或无法加载,需要通过JavaScript来处理回退。在上面的演示中,回退需要接入演示的scripting: none媒体查询规则集。