成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2024 啦,我們終于能用 CSS 一行代碼實現暗黑模式了!

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

Hello,大家好,我是 Sunday。

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

如果使用 原生 css 實現的話,那么則需要借助 @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;
  }
}

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

  • 代碼冗長:需要為每個模式定義單獨的樣式塊。
  • 維護困難:當項目中有大量深淺模式樣式時,修改和擴展變得復雜。

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

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

圖片圖片

1. 什么是 light-dark()?

1.1 基本特性

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

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

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

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

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

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

// 傳統的 @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 進階用法

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

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

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

通過這種方式,可以輕松實現主題切換的全局樣式管理。

2. light-dark() 的兼容性

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

圖片圖片

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

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

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

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2025-05-16 11:44:43

CSS模式樣式

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語言開發

2024-12-12 08:55:25

CSS代碼模式

2020-03-05 18:40:06

iPhone安卓Android 10

2024-12-03 09:23:20

2022-05-03 17:04:08

CSS前端

2014-02-12 13:43:50

代碼并行任務

2017-04-05 11:10:23

Javascript代碼前端

2025-01-20 08:35:53

2024-11-08 17:22:22

2020-12-17 08:06:33

CSS 日歷界面

2021-09-13 10:43:12

開發CSS代碼

2024-02-20 12:49:00

CSS函數前端

2015-12-15 10:32:44

chromecss開發

2020-09-09 16:00:22

Linux進程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠狠干 | 情侣av | 国产清纯白嫩初高生在线播放视频 | 国产一区二区视频在线 | 日日摸夜夜添夜夜添特色大片 | av天天看 | 91麻豆精品国产91久久久更新资源速度超快 | 精品久久九| 欧美人妇做爰xxxⅹ性高电影 | 国产精品久久国产精品久久 | 国产欧美在线观看 | 国色天香综合网 | 久久亚洲一区二区三区四区 | 羞羞色视频 | 精品成人佐山爱一区二区 | 欧美毛片免费观看 | 日韩精品视频在线 | 亚洲二区视频 | 久久久久久国产精品免费免费男同 | 中文字幕蜜臀 | 国产婷婷综合 | 激情福利视频 | av在线一区二区 | 激情久久久久 | 午夜视频在线观看一区二区 | 啪啪综合网| 日韩在线不卡视频 | 成人国产毛片 | 久久久久久国产精品免费免费狐狸 | 99热首页 | 久久久久久国产精品免费免费 | 在线激情视频 | 久久伊人久久 | 999热精品| av免费网站在线观看 | 国产精品久久久久久久久久久新郎 | 久久免费大片 | 超碰在线国产 | 艹逼网| 亚洲国产激情 | 中文字幕91 |