检测 CSS 中的 JavaScript 支持

最近,我惊喜地发现了一个CSS媒体特性——scripting,它能够在所有现代浏览器中使用。这意味着,我们可以根据用户浏览器是否支持JavaScript来提供不同的CSS规则,从而减少未样式化内容的闪烁或不受欢迎的布局偏移。

使用方法

使用这个特性,我们可以按以下方式渐进式增强样式:

@media (scripting: enabled) {.my-element {/* 如果JS可用,增强样式 */}
}

或者,我们可以优雅地回退到一些备选样式:

@media (scripting: none) {.my-element {/* 如果JS不支持,使用备选样式 */}
}

还有一个initial-only值,适用于在页面加载期间启用脚本但在之后不启用的情况。CSS媒体查询第5级W3C工作草案中提到了一些它可能有用的场景。

例如,打印页面,或者在服务器上渲染页面并发送给用户的预渲染网络代理。

我个人不太能想象自己会经常使用initial-only,尽管我很想找到更多实际应用中的具体例子。

特性出现之前

在这项特性出现之前,检测JavaScript支持的一种方法是通过在html标签上设置一个自定义选择器——常见的做法是添加一个no-js类名。如果JavaScript得到支持并启用,它会在渲染页面内容之前移除该选择器。当JavaScript被禁用时,我们可以提供适应体验的备选样式。

<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日 - 在发布这篇文章后,一些反馈浮现出来,解释了这个媒体特性在哪些方面意外地失败了。

  1. 当使用像NoScript或uBlock Origin这样的浏览器扩展来禁用页面脚本时,它的表现并不像预期的那样。即使扩展将JavaScript关闭了,scripting: enabled仍然匹配。
  2. 如果脚本被阻止或无法加载,需要通过JavaScript来处理回退。在上面的演示中,回退需要接入演示的scripting: none媒体查询规则集。

小心那些陷阱

尽管scripting媒体特性非常有用,但上述问题提醒我们,在依赖它时需要谨慎。例如,如果一个脚本由于某种原因没有加载,你可能需要一个备用计划来确保内容的可访问性和页面的可用性。

现实世界的应用

在现实世界的网页设计中,这意味着我们需要为那些可能由于技术或个人偏好而禁用JavaScript的用户考虑。通过使用scripting媒体查询,我们可以确保所有用户都能获得清晰、优雅的体验,无论他们是否选择使用JavaScript。

结语

总的来说,scripting媒体查询是一个强大的工具,可以帮助我们为支持JavaScript和不支持JavaScript的环境提供适当的样式。它让我们能够更好地控制页面加载时的样式应用,减少布局偏移,并且提供更加平滑和可预测的用户体验。

作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

当然,我更建议大家成为一个全栈,不要把自己的定位局限于前端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

su模型转3d模型不够平滑怎么办?---模大狮

当将SU模型转换为3D模型时&#xff0c;可能会遇到模型不够平滑的情况&#xff0c;这会影响到最终的渲染效果和视觉体验。本文将探讨在此情况下应该如何解决&#xff0c;帮助读者更好地处理这一常见的问题。 一、检查SU模型细分程度 首先要检查的是原始的SU模型的细分程度。在S…

go语言之map

1.map认识 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合&#xff0c;其中所有的key都是不同的&#xff0c;然后通过给定的key可以在常数时间复杂度内检索、更新或者删除对用的value。 在Go语言中&#xff0c;一个map就是一个哈希表的引用&…

XSKY CTO 在英特尔存储技术峰会的演讲:LLM 存储,架构至关重要

5 月 17 日&#xff0c;英特尔存储技术峰会在北京顺利举办。作为英特尔长期的合作伙伴&#xff0c;星辰天合受邀参加了此次峰会。星辰天合 CTO 王豪迈作为特邀嘉宾之一&#xff0c;作了主题为《LLM 存储&#xff1a;架构至关重要》的演讲&#xff0c;分享了大语言模型&#xff…

2024年中国金融行业网络安全案例集

随着科技的飞速发展,金融行业与信息技术的融合日益加深,网络安全已成为金融行业发展的生命线。金融行业作为国家经济的核心支柱&#xff0c;正在面临着日益复杂严峻的网络安全挑战。因此&#xff0c;深入研究和探讨金融行业的网络安全问题&#xff0c;不仅关乎金融行业的稳健运…

Jtti:如何在Linux服务器上查看系统日志?

在美国的Linux服务器上查看系统日志是系统管理员常见的任务之一。系统日志可以帮助你诊断和解决服务器上的问题。以下是如何在Linux服务器上查看系统日志的详细教程&#xff1a; 1. 连接到服务器 首先&#xff0c;通过SSH连接到你的Linux服务器。如果你在本地终端使用SSH&#…

MIPI竖屏解决方案,普立晶POL8901升级POL8903 两PORT LVDS桥接到MIPI,加旋转

POL8903描述&#xff1a; 系统&#xff1a; •采用高性能MIPS 32位CPU内核&#xff1b; •高性能DSP内核图像处理单元&#xff1b; •16 KB指令Cache&#xff1b;16 KB数据Cache&#xff1b; •96 KB SRAM&#xff1b;内置DDR 3控制器&#xff1b; LVDS输入&#xff1a; …

Python代码:十七、生成列表

1、题目 描述&#xff1a; 一串连续的数据用什么记录最合适&#xff0c;牛牛认为在Python中非列表&#xff08;list&#xff09;莫属了。现输入牛牛朋友们的名字&#xff0c;请使用list函数与split函数将它们封装成列表&#xff0c;再整个输出列表。 输入描述&#xff1a; …

取代或转型?人工智能对软件测试的影响(内附工具推荐)

在当今快速发展的数字环境中&#xff0c;从移动App到基于Web的平台&#xff0c;软件已成为我们日常生活和工作不可或缺的一部分。然而&#xff0c;随着软件系统变得越来越复杂&#xff0c;如何确保其质量和可靠性已成为开发人员和测试人员所面临的一大重要挑战。 这就是软件测…

从0开始学统计

1.什么是统计学&#xff1f;统计学主要研究哪些问题&#xff1f; 统计学是一门科学&#xff0c;主要研究数据的收集、分析、解释和呈现方法。它涉及收集数据的方法&#xff0c;如调查和实验设计&#xff0c;以及通过数学和计算方法来分析和解释数据的过程。统计学的主要目标是…

(九)Python3 接口自动化测试,Jenkins调度执行

(九)Python3 接口自动化测试,Jenkins调度执行 Jenkins配置在远程服务器上执行Shell来运行Python(通过SSH免密方式执行) 说明:Jenkins部署在ServerA:10.1.1.74上,要运行的程序在ServerB:10.1.1.196 分两步 第一步:Linux Centos7配置SSH免密登录 Linux Centos7配置SSH…

长沙客户忠诚度调查

本文由群狼调研&#xff08;长沙员工满意度调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。员工满意度调查是衡量员工对公司或组织的工作环境、待遇、领导力和管理的满意程度的一种方法。这项调查对于组织和公司非常重要&#xff0c;因为它可以提供有关员工…

Autoware 软件功能(二)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&#xff0c;并附带200G…

【好物推荐】给大家安利一个静态网站生成器框架搜集

你一定好奇很多文档网站是用什么框架写的&#xff0c;或者你听说过 vue press&#xff0c;Git Book&#xff0c;其实这类优秀的网站很多&#xff0c;有个网站统计了所有框架的热度&#xff0c;大家有兴趣的可以去看看。 传送门&#xff1a;https://jamstack.org/generators/ 比…

UE5 使用外置摄像头进行拍照并保存到本地

连接外置摄像头功能&#xff1a;https://docs.unrealengine.com/4.27/zh-CN/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/ 核心功能&#xff1a;UE4 相机拍照功能&#xff08;图片保存&#xff09;_ue 移动端保存图片-CSDN博客 思路是&#xff1a; …

万博智云×华为云 | HyperBDR云容灾上架,开启联营联运新篇章

日前&#xff0c;万博智云HyperBDR云容灾正式入驻华为云云商店&#xff0c;成为华为云基础软件领域联营联运合作伙伴。通过联营联运&#xff0c;双方将进一步加深在产品、解决方案、渠道拓展等多方面的强强联合&#xff0c;为企业提供更加安全、高效的数据保护解决方案&#xf…

vue-table的使用,解决懒加载展开列,数据量过大,造成的卡顿问题

场景 有需求,使用懒加载的展开列,当加载的数据量过大,如大于1000条以上,浏览器可能卡死挂了 分析 大量的dom的渲染绘制,导致了浏览器处理不过来 解决 虚拟列表 vue-table 虚拟列表的使用 vue-table官网 <vxe-table border resizable height="100%" r…

重量and体积,不要在傻傻的花冤枉钱寄快递了!

寄快递时有没有遇到过明明不重却被按体积收费的情况&#xff1f;别急&#xff0c;今天就来给大家揭秘快递收费的奥秘&#xff01; 实际重量和体积重量&#xff01; 首先&#xff0c;我们要明白两个概念&#xff1a;实际重量和体积重量。实际重量就是你看到的物品重量&#xf…

JVM为什么要进行分代呢?

Java 虚拟机&#xff08;JVM&#xff09;的内存管理是 Java 性能优化的核心部分&#xff0c;而分代思想&#xff08;Generational Garbage Collection&#xff09;是其关键机制之一。理解 JVM 的分代思想对于优化 Java 应用的性能、减少垃圾收集的停顿时间至关重要。本文将详细…

angr使用学习(持续更新)

首先我是直接在kali中安装的&#xff0c;也是边练边学的。 嗯&#xff0c;要在纯净python环境&#xff0c;所以是在 virtualenv 虚拟环境里&#xff0c;也不是特别会用这个&#xff0c;按照教程一步步做的 source venv/bin/activate 进入了对应环境 退出是 deactivate en,ipy…