檢測 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.pswp.cn/bicheng/17007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17007.shtml
英文地址,請注明出處:http://en.pswp.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…