自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CSS Color-Scheme 和深色模式

開發(fā) 前端
color-scheme顧名思義,即為“配色方案”,在系統(tǒng)中指的是“白天模式”和“夜間模式”。使用這個屬性可以輕松的更改瀏覽器的默認配色方案。

介紹一個和深色模式相關(guān)的CSS屬性:color-scheme。

一、什么是 color-scheme?

color-scheme[1]顧名思義,即為“配色方案”,在系統(tǒng)中指的是“白天模式”和“夜間模式”。使用這個屬性可以輕松的更改瀏覽器的默認配色方案,語法如下:

color-scheme: normal;
color-scheme: light;
color-scheme: dark;
color-scheme: light dark;

幾個關(guān)鍵詞如下:

normal:表示元素未指定任何配色方案,因此應(yīng)使用瀏覽器的默認配色方案呈現(xiàn)。

light:表示可以使用操作系統(tǒng)亮色配色方案渲染元素。

dark:表示可以使用操作系統(tǒng)深色配色方案渲染元素。

下面來看一個簡單的例子:

<h2>前端偵探</h2>
<button>關(guān)注我</button>

在無任何CSS的情況下,效果如下:

圖片

如果將系統(tǒng)配色設(shè)置為深色模式,由于什么都沒有做,當(dāng)然也不會有什么變化,如下:

圖片

現(xiàn)在在根元素上添加color-scheme屬性。

:root{
color-scheme: light dark
}

這里設(shè)置兩個值,表示可選的配色方案,由系統(tǒng)來決定。

官方文檔上雖然說是優(yōu)先選擇,實測兩種順序沒有區(qū)別。

效果如下:

圖片

是不是非常神奇?平平無奇的頁面馬上就支持深色模式了。

還可以指定單個值,這樣就和系統(tǒng)配色無關(guān)了,比如:

:root{
color-scheme: dark
}

這樣在淺色模式下也能以深色主題來渲染,效果如下:

圖片image-20220702172224904

二、color-scheme 的作用范圍

通過上面的例子看著好像很強大,是不是可以一鍵生成“深色”模式了?其實不然,??color-scheme?? 的作用范圍很有限,包括表單控件、滾動條和 CSS 系統(tǒng)顏色的使用值。

1、表單元素

先看表單元素,就拿 checkbox來說吧。

<input type="checkbox">

圖片

假設(shè)現(xiàn)在我們需要做一個深色模式的主題,手動將頁面背景設(shè)置為黑色。

body[dark]{
background: #000
}

圖片

是不是感覺到未勾選狀態(tài)有點太過刺眼了呢?

這時,就可以用到color-scheme了,可以將表單元素以深色模式渲染。

body[dark]{
background: #000;
color-scheme: dark
}

圖片

這樣是不是柔和多了?這里選中的主題色貌似也發(fā)生了變換,這個是瀏覽器為了方便夜間瀏覽默認設(shè)置的,如果你不希望這個選中顏色,可以用accent-color來覆蓋。

body{
accent-color: #0175ff
}

效果如下:

圖片

accent-color可以更改表單元素的默認顏色,有興趣的可以參考張鑫旭的這篇文章 CSS accent-color屬性簡介[2]。

下面是其他表單元素的深色模式。

圖片

2、滾動條

color-scheme也能改變滾動條的配色模式。這個在 windows 下比較明顯,默認淺色模式下,滾動條是這種灰白色的。

圖片

如果在沒有自定義滾動條的情況下(很多設(shè)計覺得默認滾動條挺好看的),設(shè)計了一套深色主題,可能就變成了這樣。

圖片

滾動條是不是顯得非常突兀?是不是只能通過偽類自定義滾動條樣式了呢?現(xiàn)在有了color-scheme就不需要這么麻煩了,直接設(shè)置如下:

body[dark]{
color-scheme: dark
}

這樣是不是和諧多了?

圖片

其實 MDN 官網(wǎng)已經(jīng)這么做了,上面只是臨時屏蔽了這一屬性。

圖片

3、CSS 系統(tǒng)顏色

系統(tǒng)顏色指的是瀏覽器內(nèi)置的一些顏色。比如前面的button,為什么能自動渲染成深色模式呢?除了因為它是表單元素外,最根本的一點是這些表單元素的默認樣式上使用了系統(tǒng)顏色。注意看下面這個截圖。

圖片

可以看到,button的默認樣式里,使用到了一些系統(tǒng)顏色。

button{
/**/
color: buttontext;
background-color: buttonface;
border-color: buttonborder;
}

這里的buttontext、buttonface、buttonborder?就是系統(tǒng)顏色了,它會根據(jù)color-scheme自動適應(yīng)深色模式。

圖片

這些系統(tǒng)顏色不僅僅可以用在表單元素上,也能用在普通元素上,比如這里取按鈕文本顏色buttontext。

div{
background-color: buttontext;
}

這個顏色會在深色模式下自動變成白色,如下:

圖片

如果手動的指定了一些正常顏色,那么也就失效了

button{
color: #333
}

圖片

所以,綜合上面所述,只有系統(tǒng)相關(guān)的樣式和顏色才可以受到color-scheme的影響。

完整的 CSS 系統(tǒng)顏色可以參考官方 MDN 文檔[3] ,比較有限,而且顏色都是那種黑白等高飽和度顏色,酌情使用。

三、color-scheme 和 prefers-color-scheme

相比color-scheme?,大家可能更熟悉prefers-color-scheme,它用于檢測用戶是否有將系統(tǒng)的主題色設(shè)置為亮色或者暗色。

.day   { background: #eee; color: black; }
.night { background: #333; color: white; }
@media (prefers-color-scheme: dark) {
.day.dark-scheme { background: #333; color: white; }
.night.dark-scheme { background: black; color: #ddd; }
}

那么,它和color-scheme有什么聯(lián)系呢?舉個例子。

:root{
color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
body {
color: red
}
}

請問,在淺色模式下,body 的顏色是什么?

下面來看實際結(jié)果:

圖片

只有當(dāng)系統(tǒng)真正切換到深色模式,才會變成紅色。

圖片

所以結(jié)論是,color-scheme? 和 prefers-color-scheme?沒有必然聯(lián)系,并不會干涉prefers-color-scheme?的判斷,但是是相輔相成的,color-scheme? 可以更好的處理系統(tǒng)默認的一些樣式,而 prefers-color-scheme可以更方便的自定義其他普通樣式。

四、總結(jié)一下

綜上所述,為了更好的支持深色模式,可以在常規(guī)的深色模式下添加color-scheme作為兜底方案,可以很好的適配瀏覽器原生樣式。

:root{
color-scheme: light dark
}

這樣一個小知識點,學(xué)到了嗎?下面是本文要點總結(jié)。

  1. color-scheme 是原生支持的配色方案,支持“白天模式”和“夜間模式”,可以輕松地更改瀏覽器的默認配色方案。
  2. color-scheme 支持的對象有表單控件滾動條CSS 系統(tǒng)顏色。
  3. CSS 系統(tǒng)顏色指的是瀏覽器內(nèi)置的顏色,這些顏色是動態(tài)的。
  4. 但是系統(tǒng)顏色比較有限,而且顏色都是那種黑白等高飽和度顏色,酌情使用。
  5. 媒體查詢 prefers-color-scheme 不會受到 color-scheme 的影響,只和系統(tǒng)設(shè)置有關(guān)。
  6. 平時使用中 color-scheme 和 prefers-color-scheme 需要相互配合, color-scheme 適配原生,prefers-color-scheme 適配自定義。

然后提一下兼容性,其實對版本要求還挺高的。

圖片image-20220706152054928

但是,這并不影響我在項目中使用。原因很簡單,這算得上是漸進增強的屬性,即使瀏覽器不支持,也不會對頁面造成什么影響,如果支持,體驗會更好。所以,趕緊使用起來吧,就一行代碼的事,無形之中提升了視覺體驗。

參考資料

?[1]color-scheme: https://developer.mozilla.org/zh-CN/docs/Web/CSS/color-scheme。

[2]CSS accent-color屬性簡介: https://www.zhangxinxu.com/wordpress/2022/03/css-accent-color/。

[3]MDN 文檔: https://developer.mozilla.org/zh-CN/docs/Web/CSS/color_value#%E7%B3%BB%E7%BB%9F%E9%A2%9C%E8%89%B2?。

責(zé)任編輯:姜華 來源: 前端偵探
相關(guān)推薦

2021-11-04 10:29:01

CSS前端

2023-07-27 10:42:45

必應(yīng)聊天微軟

2019-05-29 10:16:47

iOS應(yīng)用系統(tǒng)

2020-12-07 13:23:07

LibreOffice開源

2022-03-25 09:45:40

GNOMEGNOME 42

2020-03-23 11:43:43

微信iOS 7.0.12深色模式

2023-10-10 09:00:00

CSSJavaScript

2020-04-13 15:05:10

Ubuntu深色模式Ubuntu 20.0

2021-11-22 09:56:13

FedoraLinux

2023-06-26 09:16:34

CSScolor-mix

2022-09-16 07:33:52

瀏覽器深色模式Firefox

2019-04-16 09:47:42

iOS應(yīng)用系統(tǒng)

2020-04-07 16:25:39

微信深色模式黑色模式

2021-12-08 11:21:37

Windows 11記事本微軟

2021-04-02 17:05:43

Chrome瀏覽器Incognito

2022-11-08 11:39:34

Web瀏覽器深色模式

2019-12-19 15:09:19

微信深色模式消息引用

2021-09-02 00:13:41

Windows 11Windows微軟

2019-06-18 09:28:34

iOS 13手機黑暗模式

2023-05-15 10:41:13

CSS深色模式
點贊
收藏

51CTO技術(shù)棧公眾號