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

2024 啦,我們終于能用 CSS 一行代碼實(shí)現(xiàn)暗黑模式了!

開發(fā) 前端
說起主題切換,很多同學(xué)肯定是不陌生的。在過去我的很多課程中都講到了主題切換的功能。它的實(shí)現(xiàn)原理簡單一句話描述就是:通過不同的狀態(tài)標(biāo)記(light || dark),使用不同的 css,從而達(dá)到不同的樣式。

Hello,大家好,我是 Sunday。

說起主題切換,很多同學(xué)肯定是不陌生的。在過去我的很多課程中都講到了主題切換的功能。它的實(shí)現(xiàn)原理簡單一句話描述就是:通過不同的狀態(tài)標(biāo)記(light || dark),使用不同的 css,從而達(dá)到不同的樣式。

如果使用 原生 css 實(shí)現(xiàn)的話,那么則需要借助 @media (prefers-color-scheme: <value>),代碼大概是這樣的:

@media (prefers-color-scheme: dark) {
  body {
    color: #fff;
    background-color: #222;
  }
}

@media (prefers-color-scheme: light) {
  body {
    color: #333;
    background-color: #fff;
  }
}

這樣的代碼標(biāo)記著我們需要在 dark 模式下指定一套 css,然后在 light 模式下指定另外一套 css。雖然可以實(shí)現(xiàn)主題切換的功能,但它的缺點(diǎn)也很明顯:

  • 代碼冗長:需要為每個(gè)模式定義單獨(dú)的樣式塊。
  • 維護(hù)困難:當(dāng)項(xiàng)目中有大量深淺模式樣式時(shí),修改和擴(kuò)展變得復(fù)雜。

因此,這種方式并不被我們所喜歡(大家在工作中應(yīng)該也很少見這樣的代碼),導(dǎo)致我們更多的時(shí)候會(huì)使用一些庫(如:tailwindcss)來實(shí)現(xiàn)主題切換。

但是,隨著一個(gè)全新的 css 屬性函數(shù) light-dark(),一切不一樣了!

圖片圖片

1. 什么是 light-dark()?

1.1 基本特性

light-dark() 是一種新的 CSS 屬性值函數(shù),用于在 淺色模式 和 深色模式 下分別指定不同的樣式值。

以往我們需要使用 @media (prefers-color-scheme) 媒體查詢來處理深淺模式,代碼量大且重復(fù)。而 light-dark() 通過一個(gè)簡單的函數(shù)調(diào)用,直接在單條樣式規(guī)則中定義深淺模式的不同表現(xiàn),大大簡化了開發(fā)工作。

// <light-value> 淺色模式下的樣式值。
// <dark-value> 深色模式下的樣式值。
property: light-dark(<light-value>, <dark-value>);

以設(shè)置背景色 + 字體顏色為例,light-dark() 可以輕松在淺色和深色模式之間切換:

// 在淺色模式下,背景色為白色(#ffffff),字體為黑色(#333333)
// 在深色模式下,背景色為深灰色(#1e1e1e),字體為白色(#f0f0f0)
body {
  background-color: light-dark(#ffffff, #1e1e1e);
  color: light-dark(#333333, #f0f0f0);
}

是不是賊簡單了!對比下傳統(tǒng)的 @media (prefers-color-scheme: <value>) 的方式,就更能體現(xiàn)出差異了

// 傳統(tǒng)的 @media (prefers-color-scheme: ...) 方案
@media (prefers-color-scheme: dark) {
  body {
    color: #1e1e1e;
    background-color: #f0f0f0;
  }
}

@media (prefers-color-scheme: light) {
  body {
    color: #ffffff;
    background-color: #333333;
  }
}

1.2 進(jìn)階用法

除了剛才的基本使用方式之外,light-dark() 還可以與 CSS 變量結(jié)合,動(dòng)態(tài)定義深淺模式下的值:

:root {
  --bg-color: light-dark(#ffffff, #1e1e1e);
  --text-color: light-dark(#333333, #f0f0f0);
}

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

通過這種方式,可以輕松實(shí)現(xiàn)主題切換的全局樣式管理。

2. light-dark() 的兼容性

截至目前(2024年11月),light-dark() 的瀏覽器支持場景如下:

圖片圖片

根據(jù) mdn 的數(shù)據(jù),可以看到目前大部分的瀏覽器都支持了 light-dark() 屬性。

如果你的項(xiàng)目使用場景包含舊版本的瀏覽器,那么可以添加如下兼容方案:

body {
  background-color: #ffffff; /* 默認(rèn)值 */
  background-color: light-dark(#ffffff, #1e1e1e);
}

責(zé)任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2023-05-15 10:41:13

CSS深色模式

2022-04-09 09:11:33

Python

2020-08-19 10:30:25

代碼Python多線程

2025-04-21 10:43:21

2016-12-02 08:53:18

Python一行代碼

2021-02-24 14:30:59

JavaScript語言開發(fā)

2024-12-12 08:55:25

CSS代碼模式

2024-12-03 09:23:20

2022-05-03 17:04:08

CSS前端

2020-03-05 18:40:06

iPhone安卓Android 10

2014-02-12 13:43:50

代碼并行任務(wù)

2017-04-05 11:10:23

Javascript代碼前端

2025-01-20 08:35:53

2024-11-08 17:22:22

2021-09-13 10:43:12

開發(fā)CSS代碼

2020-12-17 08:06:33

CSS 日歷界面

2024-02-20 12:49:00

CSS函數(shù)前端

2021-11-02 16:25:41

Python代碼技巧

2020-09-09 16:00:22

Linux進(jìn)程

2021-08-31 09:49:37

CPU執(zhí)行語言
點(diǎn)贊
收藏

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