闽公网安备 35020302035485号
@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媒体查询规则集。