用color-scheme和light-dark()寫出更彈性的dark mode

dark mode 的CSS寫法一直以來都不是很方便,在偵測使用者作業系統是不是dark mode的時候,我們可以用prefers-color-scheme來另外寫一套CSS。現在多了另一種寫法light-dark()

prefers-color-scheme

prefers-color-scheme寫法如下,當然還有很多東西要考慮,例如border、hightlight…等等,但為了方便說明,只用文字和背景顏色舉例。


:root {
  --text-color: #333;
  --background-color: #eee;
}

@media (prefers-color-scheme: dark) {
  :root {
    --text-color: #efefef;
    --background-color: #222;
  }
}

新的語法 light-dark()

light-dark()可以搭配color-scheme使用達到自動偵測使用者作業系統是不是dark mode:


:root {
  color-scheme: light dark;
  --text-color: light-dark(#333, #efefef);
  --background-color: light-dark(#eee, #222);
  }

除此之外,還可以用input讓使用者自己選擇要不要用dark mode:


:root {
  /* 偵測使用者作業系統 */
  &:has(input[name="scheme"][value="light dark"]:checked) {
    color-scheme: light dark;
  }
  /* 不用 dark mode */
  &:has(input[name="scheme"][value="light"]:checked) {
    color-scheme: light;
  }
  /* 使用 dark mode */
  &:has(input[name="scheme"][value="dark"]:checked) {
    color-scheme: dark;
  }
}
use input and css to make dark-mode

寫法比舊的prefers-color-scheme更方便和彈性許多。

留言

這個網誌中的熱門文章

用CSS的 min() max() 與vw,設計有極限值的RWD響應式文字

10 steps、「ライブ会場を沸らせる、フロアを沸かす」ミーム動画の作り方 (Viggle AI)

運用資料層 dataLayer.push 建立 GTM 自訂事件