css未來:使用light-dark()切換主題色

css未來:使用light-dark()切換主題色

要根據使用的是淺色模式還是深色模式來更改顏色,我們通常會使用 prefers-color-scheme 媒體查詢。為了讓代碼實現變得更容易,CSS 現在附帶了一個名為 light-dark() 的實用函數。該函數接受兩個顏色值作為其參數。根據我們正在使用的配色方案,它將使用第一個或第二個參數。

使用 prefers-color-scheme 切換主題色

要根據所使用的淺色模式或深色模式更改顏色值(或任何其他值),我們通常會使用媒體prefers-color-scheme 查詢來更改自定義屬性的值:

:root {--text-color: #333; /* 淺色主題色 */
}@media (prefers-color-scheme: dark) {:root {--text-color: #ccc; /* 深色主題色 */}
}

實現深色模式時,通常會得到一堆重復的 CSS 變量,這些變量為每種模式設置值。然后,CSS 的其余部分將這些自定義屬性用于實際聲明。

body {color: var(--text-color);
}

使用 light-dark() 切換主題色

CSS 顏色模塊第 5 級規范 的新增功能是 light-dark() 功能。該函數接受兩個顏色值作為其參數。根據我們正在使用的顏色方案,它將使用第一個或第二個顏色參數。

light-dark(<color>, <color>);

根據規格:

如果使用的配色方案為 light 或未知,則此函數計算第一種顏色的計算值;如果使用的配色方案為dark,則此函數計算第二個顏色的計算值。

使用的配色方案不僅基于用戶的淺色/深色模式設置,還基于屬性的值 color-scheme。這類似于系統顏色的計算方式。

color-scheme屬性允許元素指示其設計用于渲染的配色方案。這些值是根據用戶的偏好進行協商的,從而產生使用的配色方案。

這意味著,為了 light-dark() 起作用,我們還必須包含一份 color-scheme 聲明。

:root {color-scheme: light dark;
}:root {--text-color: light-dark(#333, #ccc); /* 在淺色模式使用#333,在深色模式使用#ccc */
}

因為 color-scheme 的聲明方式,這也意味著我們可以覆蓋每個元素的值,以強制其進入某種模式:

.dark {color-scheme: dark; /* 在.dark元素上使用 light-dark,.dark元素的所有子元素都是深色模式 */
}

light-dark()看起來跟Chromium 內部的 -internal-light-dark()很類似。基于此功能, CSS 工作組內提出了向作者公開類似功能的提案。結果就誕生了 light-dark()。

-internal-light-dark() 適用于任何類型的值,而 light-dark() 只能用于顏色。

其他非顏色值能否支持

light-dark() 的功能相當有限:它只能處理 light/dark,并且只能處理值。這是正確的,也是非常有意的,因為這是邁向最終解決方案的中間步驟。

正如CSS 工作組問題中所提出的,最終目標是在未來(暫定)有一個命名的函數。該函數功能可以:

  • 響應 color-scheme 的任意值。
  • 返回的不僅僅是 值

它可能看起來像這樣:

:root {color-scheme: dark light custom;
}body {color: schemed-value(light hotpink, dark lime, custom rebeccapurple);
}

但是,就目前而言,我們“僅”擁有 light-dark(),而且我個人認為這很好,因為它與當今瀏覽器可以執行的操作的現實相符:

  • 它只支持 light/dark 。因為瀏覽器現在不支持incolor-scheme,所以現在支持其他值是沒有用的。
  • 它只能處理值,因為解析器需要提前知道它正在解析的值的類型。light-dark()被明確定義為一個值。

light-dark() 的名稱和語法非常容易記住,易于使用。

當 schemed-value() 成為一個事物時,light-dark()就會成為它的語法糖:

light-dark(<color>, <color>); = schemed-value(light <color>, dark <color>);

瀏覽器支持

在這里插入圖片描述
目前只有 firefox 支持,如果我們想體驗這個功能,可以使用firefox進行測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210995.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編譯原理lab3-cminus_compiler-LLVM簡要熟悉

lab3實驗報告&#xff0c;我的實驗報告圖例很少&#xff0c;這次只有兩張圖&#xff0c;其余的都以復制輸出的形式展現出來了&#xff0c;最終提交的代碼在最后 [[#你的提交|你的提交]][[#實驗設計|實驗設計]][[#提交一&#xff1a;手動編寫.ll|提交一&#xff1a;手動編寫.ll…

TREK610C高壓放大器

181/2461/8938技術規格 輸出電壓&#xff1a;0到10 kV直流電壓 輸出電流&#xff1a;0到2 mA 轉換率&#xff1a;大于500 V/μs 信號帶寬&#xff1a;直流到1.0 kHz &#xff08;-3dB&#xff09; 放大倍數&#xff1a;1000 V/V 閉環系統以保持低噪音、高精確度電壓輸出 短…

最簡單的基于 FFmpeg 的音頻解碼器

最簡單的基于 FFmpeg 的音頻解碼器 最簡單的基于 FFmpeg 的音頻解碼器正文參考工程文件下載 參考雷霄驊博士的文章&#xff0c;鏈接&#xff1a;最簡單的基于FFMPEGSDL的音頻播放器&#xff1a;拆分-解碼器和播放器 最簡單的基于 FFmpeg 的音頻解碼器 正文 FFmpeg 音頻解碼器…

【ArcGIS微課1000例】0080:ArcGIS將shp轉json(geojson)案例教程

本文以案例的形式,講述在ArcGIS軟件中,將矢量數據轉為GeoJSON的方法。 擴展閱讀:【GIS風暴】GeoJSON數據格式案例全解 文章目錄 一、GeoJson簡介二、ArcGIS將矢量數據轉為GeoJSON一、GeoJson簡介 GeoJSON是一種基于JSON的地理空間數據交換格式,它定義了幾種類型JSON對象以…

Spring Cloud Gateway 網關的基礎使用

1. 什么是網關&#xff1f;網關有什么用&#xff1f; 在微服務架構中&#xff0c;網關就是一個提供統一訪問地址的組件&#xff0c;它解決了內部微服務與外部的交互問題。網關主要負責流量的路由和轉發&#xff0c;將外部請求引到對應的微服務實例上。同時提供身份認證、授權、…

Spring-Boot---配置文件

文章目錄 配置文件的作用配置文件的格式PropertiesProperties基本語法讀取Properties配置文件 ymlyml基本語法讀取yml配置文件 Properties VS Yml 配置文件的作用 整個項目中所有重要的數據都是在配置文件中配置的&#xff0c;具有非常重要的作用。比如&#xff1a; 數據庫的…

230. 二叉搜索樹中第K小的元素 --力扣 --JAVA

題目 給定一個二叉搜索樹的根節點 root &#xff0c;和一個整數 k &#xff0c;請你設計一個算法查找其中第 k 個最小元素&#xff08;從 1 開始計數&#xff09;。 解題思路 利用List存儲數據&#xff1b;遍歷整個樹&#xff0c;讀取數各個節點的value&#xff1b;對value進行…

Python繪制多分類ROC曲線

目錄 1 數據集介紹 1.1 數據集簡介 1.2 數據預處理 2隨機森林分類 2.1 數據加載 2.2 參數尋優 2.3 模型訓練與評估 3 繪制十分類ROC曲線 第一步&#xff0c;計算每個分類的預測結果概率 第二步&#xff0c;畫圖數據準備 第三步&#xff0c;繪制十分類ROC曲線 1 數據集…

【數據結構】——排序篇(上)

前言&#xff1a;前面我們已經學過了許許多多的排序方法&#xff0c;如冒泡排序&#xff0c;選擇排序&#xff0c;堆排序等等&#xff0c;那么我們就來將排序的方法總結一下。 我們的排序方法包括以下幾種&#xff0c;而快速排序和歸并排序我們后面進行詳細的講解。 直接插入…

Qt實現二維碼生成和識別

一、簡介 QZxing開源庫: 生成和識別條碼和二維碼 下載地址&#xff1a;https://gitcode.com/mirrors/ftylitak/qzxing/tree/master 二、編譯與使用 1.下載并解壓&#xff0c;解壓之后如圖所示 2.編譯 打開src目錄下的QZXing.pro&#xff0c;選擇合適的編譯器進行編譯 最后生…

util.js

一、util.js是什么&#xff1f; 1、util.js是Node.js提供的一個工具庫&#xff0c;主要用于輔助實現JavaScript代碼的通用功能。 2、除了Node.js中內置的模塊外&#xff0c;util.js是Node.js中最核心的模塊之一。 3、通過util.js&#xff0c;開發者可以輕松實現JavaScript常…

Unity 資源管理之StreamingAssets

StreamingAssets也是Unity中特殊的文件夾&#xff0c;用于存放運行時可以直接訪問的資源。StreamingAssets一般存放數據或配置文件、圖片、視頻資源等。 StreamingAssets的文件路徑可以通過Application.streamingAssetsPath來獲取。 加載或訪問使用WWW類或UnityWebRequest類。…

MIT6S081-Lab2總結

大家好&#xff0c;我叫徐錦桐&#xff0c;個人博客地址為www.xujintong.com&#xff0c;github地址為https://github.com/xjintong。平時記錄一下學習計算機過程中獲取的知識&#xff0c;還有日常折騰的經驗&#xff0c;歡迎大家訪問。 Lab2就是了解一下xv6的系統調用流程&…

Java - Synchronized的鎖升級之路

Synchronized鎖 Synchronized在Java JVM里的實現是基于進入和退出Monitor對象來實現方法同步和代碼塊同步的 monitor enter指令是在編譯后插入到同步代碼塊的開始位置 而monitor exit是插入到方法結束處和異常處 JVM要保證每個monitor enter必須有對應的monitor exit與之配對。…

解決服務端渲染程序SSR運行時報錯: ReferenceError: document is not defined

現象&#xff1a; 原因&#xff1a; 該錯誤表明在服務端渲染 (SSR) 過程中&#xff0c;有一些代碼嘗試在沒有瀏覽器環境的情況下執行與瀏覽器相關的操作。這在服務端渲染期間是一個常見的問題&#xff0c;因為在服務端渲染期間是沒有瀏覽器 API。 解決辦法&#xff1a; 1. 修…

bat腳本之while

在批處理&#xff08;BAT&#xff09;腳本中&#xff0c;while循環是一種常用的控制流結構&#xff0c;用于在滿足特定條件的情況下重復執行一段代碼。 while循環的基本語法如下&#xff1a; while [ condition ] do command1 command2 ... commandN done這里的 cond…

【2023傳智杯-新增場次】第六屆傳智杯程序設計挑戰賽AB組-DEF題復盤解題分析詳解【JavaPythonC++解題筆記】

本文僅為【2023傳智杯-第二場】第六屆傳智杯程序設計挑戰賽-題目解題分析詳解的解題個人筆記,個人解題分析記錄。 本文包含:第六屆傳智杯程序設計挑戰賽題目、解題思路分析、解題代碼、解題代碼詳解 文章目錄 一.前言二.賽題題目D題題目-E題題目-F題題目-二.賽題題解D題題解-…

深入理解Sentinel系列-1.初識Sentinel

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛吃芝士的土豆倪&#xff0c;24屆校招生Java選手&#xff0c;很高興認識大家&#x1f4d5;系列專欄&#xff1a;Spring源碼、JUC源碼、Kafka原理、分布式技術原理&#x1f525;如果感覺博主的文章還不錯的話&#xff…

待做-待補充-每個節點做事,時間,以及與角度的關系

文章目錄 待定內容紅黑樹應用場景限制什么是二叉樹遍歷遞歸遍歷1.前序遍歷 進入節點時2.中序遍歷 遍歷完左子樹回到節點。此操作需要等到所有左樹節點做完后才會做3.后序遍歷 遍歷完左右子樹回到節點。左右子樹的所有節點都做完操作后&#xff0c;回到當前節點才會做此操作 …

如何搭建自己的直播電商系統?

當下&#xff0c;傳統的圖文電商模式已經走向沒落&#xff0c;視頻電商備受追捧。抖音、快手、小紅書、京東、淘寶、拼多多都在發力直播電商業務&#xff0c;尤其是以抖音為首的直播電商備受用戶歡迎&#xff0c;它具有實時直播和強互動的特點&#xff0c;是傳統電商所不具備的…