精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

網(wǎng)頁深色模式切換:簡單實(shí)現(xiàn)方法與平滑動畫效果

開發(fā) 前端
現(xiàn)在很多網(wǎng)站都提供了深色模式功能。一個(gè)好的深色模式切換不僅要能改變顏色,還要有流暢的動畫效果,并且能記住用戶的選擇。下面我們來學(xué)習(xí)如何實(shí)現(xiàn)這個(gè)功能。

現(xiàn)在很多網(wǎng)站都提供了深色模式功能。一個(gè)好的深色模式切換不僅要能改變顏色,還要有流暢的動畫效果,并且能記住用戶的選擇。下面我們來學(xué)習(xí)如何實(shí)現(xiàn)這個(gè)功能。

基本實(shí)現(xiàn)思路

1. 準(zhǔn)備兩套顏色方案

首先需要為網(wǎng)站設(shè)計(jì)淺色和深色兩套顏色。建議使用 css 變量來管理這些顏色:

:root {
--bg-color: #ffffff;
--text-color: #000000;
--border-color: #dddddd;
}

[] {
--bg-color: #121212;
--text-color: #ffffff;
--border-color: #333333;
}

2. 在網(wǎng)頁中使用這些顏色

定義好顏色變量后,在整個(gè)網(wǎng)站中使用它們:

body {
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s ease, color 0.3s ease;
}

.card {
background-color: var(--bg-color);
border: 1px solid var(--border-color);
}

3. 添加切換按鈕

在 html 中添加一個(gè)切換按鈕:

完整的代碼示例

HTML 結(jié)構(gòu)

<!DOCTYPE html>
<htmllang="zh-CN" >="light">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width, initial-scale=1.0">
<title>深色模式演示</title>
<linkrel="stylesheet"href="style.css">
</head>
<body>
<header>
<h1>我的網(wǎng)站</h1>
<buttonid="theme-toggle">切換到深色模式</button>
</header>

<main>
<divclass="card">
<h2>內(nèi)容標(biāo)題</h2>
<p>這是一段示例文本,用來展示深色模式下的效果。</p>
</div>
</main>

<scriptsrc="script.js"></script>
</body>
</html>

CSS 樣式

/* 定義顏色變量 */
:root {
--bg-color: #ffffff;
--text-color: #000000;
--card-bg: #f8f9fa;
--border-color: #dee2e6;
--primary-color: #007bff;
}

[] {
--bg-color: #121212;
--text-color: #e9ecef;
--card-bg: #1e1e1e;
--border-color: #495057;
--primary-color: #4dabf7;
}

/* 應(yīng)用樣式 */
body {
margin: 0;
font-family: system-ui, -apple-system, sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s ease, color 0.3s ease;
line-height: 1.6;
}

header {
padding: 1rem2rem;
border-bottom: 1px solid var(--border-color);
display: flex;
justify-content: space-between;
align-items: center;
}

main {
padding: 2rem;
max-width: 800px;
margin: 0 auto;
}

.card {
background-color: var(--card-bg);
padding: 1.5rem;
border-radius: 8px;
border: 1px solid var(--border-color);
transition: all 0.3s ease;
}

button {
background-color: var(--primary-color);
color: white;
border: none;
padding: 0.5rem1rem;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s ease;
}

button:hover {
opacity: 0.9;
}

JavaScript 邏輯

classThemeManager {
  constructor() {
this.toggleButton = document.getElementById('theme-toggle');
this.htmlElement = document.documentElement;
this.init();
  }

  init() {
// 從本地存儲獲取主題設(shè)置,如果沒有就使用系統(tǒng)偏好
    const savedTheme = localStorage.getItem('theme');
    const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;

    const initialTheme = savedTheme || (systemPrefersDark ? 'dark' : 'light');
this.setTheme(initialTheme);

// 監(jiān)聽按鈕點(diǎn)擊
this.toggleButton.addEventListener('click', () =>this.toggleTheme());

// 監(jiān)聽系統(tǒng)主題變化
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (!localStorage.getItem('theme')) {
this.setTheme(e.matches ? 'dark' : 'light');
      }
    });
  }

  setTheme(theme) {
this.htmlElement.setAttribute('>, theme);
    localStorage.setItem('theme', theme);
    this.updateButtonText(theme);
  }

  toggleTheme() {
    const currentTheme = this.htmlElement.getAttribute('>);
    const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
this.setTheme(newTheme);
  }

  updateButtonText(theme) {
this.toggleButton.textContent = theme === 'dark' ? '切換到淺色模式' : '切換到深色模式';
  }
}

// 初始化主題管理器
new ThemeManager();

高級動畫效果

如果想要更炫酷的切換效果,可以使用 View Transitions api:

class AdvancedThemeManager extends ThemeManager {
async toggleTheme() {
// 檢查瀏覽器是否支持 View Transitions API
if (!document.startViewTransition) {
returnsuper.toggleTheme();
    }

const currentTheme = this.htmlElement.getAttribute('>);
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';

// 使用 View Transitions API 創(chuàng)建平滑過渡
const transition = document.startViewTransition(() => {
      this.setTheme(newTheme);
    });

try {
await transition.finished;
    } catch (error) {
      console.log('主題切換動畫完成');
    }
  }
}

// 使用高級主題管理器
new AdvancedThemeManager();

在流行框架中的實(shí)現(xiàn)

React 版本

import { useState, useEffect } from'react';

function useTheme() {
  const [theme, setTheme] = useState('light');

  useEffect(() => {
    const saved = localStorage.getItem('theme');
    const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
    setTheme(saved || (systemDark ? 'dark' : 'light'));
  }, []);

  const toggleTheme = () => {
    const newTheme = theme === 'dark' ? 'light' : 'dark';
    setTheme(newTheme);
localStorage.setItem('theme', newTheme);
document.documentElement.setAttribute('>, newTheme);
  };

  return [theme, toggleTheme];
}

function ThemeToggle() {
  const [theme, toggleTheme] = useTheme();

  return (
    <button onClick={toggleTheme}>
      {theme === 'dark' ? '淺色模式' : '深色模式'}
    </button>
  );
}

vue 版本

<template>
  <button @click="toggleTheme">
    {{ theme === 'dark' ? '淺色模式' : '深色模式' }}
  </button>
</template>

<script>
import { ref, onMounted } from'vue'

exportdefault {
  setup() {
    const theme = ref('light')

    const toggleTheme = () => {
      theme.value = theme.value === 'dark' ? 'light' : 'dark'
localStorage.setItem('theme', theme.value)
document.documentElement.setAttribute('>, theme.value)
    }

    onMounted(() => {
      const saved = localStorage.getItem('theme')
      const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches
      theme.value = saved || (systemDark ? 'dark' : 'light')
      document.documentElement.setAttribute('>, theme.value)
    })

return { theme, toggleTheme }
  }
}
</script>

重要注意事項(xiàng)

  1. 性能優(yōu)化
  • 只對顏色相關(guān)的屬性添加過渡動畫
  • 避免對大量元素同時(shí)進(jìn)行復(fù)雜動畫
  • 使用 will-change: opacity, color, background-color 提示瀏覽器優(yōu)化
  1. 可訪問性
  • 確保顏色對比度符合 WCAG 標(biāo)準(zhǔn)
  • 為色盲用戶提供足夠的視覺區(qū)分
  • 不要完全依賴顏色來傳達(dá)信息
  1. 測試要點(diǎn)
  • 在不同瀏覽器中測試效果
  • 檢查移動設(shè)備上的表現(xiàn)
  • 驗(yàn)證打印樣式是否正常

常見問題解決

頁面加載時(shí)閃爍怎么辦?在 HTML 的 head 部分添加內(nèi)聯(lián)腳本快速設(shè)置主題:

<script>
  const savedTheme = localStorage.getItem('theme');
  const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.setAttribute('>, 
    savedTheme || (systemDark ? 'dark' : 'light')
  );
</script>

如何支持更多主題?可以擴(kuò)展顏色變量系統(tǒng):

[] {
--bg-color: #f0f8ff;
--text-color: #003366;
--primary-color: #007bff;
}

[] {
--bg-color: #f8fff0;
--text-color: #1a331a;
--primary-color: #28a745;
}

總結(jié)

實(shí)現(xiàn)一個(gè)完整的深色模式功能需要綜合考慮顏色設(shè)計(jì)、動畫效果、用戶偏好和性能優(yōu)化。通過 CSS 變量、JavaScript 控制和適當(dāng)?shù)膭赢嫞梢詣?chuàng)建出既美觀又實(shí)用的主題切換功能。

責(zé)任編輯:龐桂玉 來源: web前端開發(fā)
相關(guān)推薦

2011-05-30 13:23:11

Android 動畫

2024-03-28 09:11:24

CSS3TransitionCSS屬性

2011-07-08 10:15:15

IPhone 動畫

2011-07-29 13:55:10

IPhone 動畫

2021-11-22 09:56:13

FedoraLinux

2021-11-04 10:29:01

CSS前端

2012-06-14 15:49:59

Slider

2025-01-06 11:59:32

2012-06-04 14:47:42

HTML5

2017-02-06 13:00:49

Android翻轉(zhuǎn)卡片動畫效果

2009-08-06 19:50:03

linux命令行模式切linux命令行模式linux命令行

2018-04-16 14:39:10

Vue輪播切換

2011-07-22 18:20:04

IOS View 動畫

2022-03-29 11:28:24

HarmonyOS動畫css

2011-08-12 14:04:53

iPhone動畫

2021-12-06 15:10:01

鴻蒙HarmonyOS應(yīng)用

2024-05-30 08:23:37

ViewPager滑動效果接口

2021-09-02 00:13:41

Windows 11Windows微軟

2009-09-22 12:59:58

ibmdwDojo

2011-08-16 18:13:42

IPhone開發(fā)UIView動畫
點(diǎn)贊
收藏

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

国产天堂在线| 欧美日韩一级大片| 国产私拍福利精品视频二区| 国产亚洲精品bt天堂精选| 国产精品免费一区豆花| 一区二区在线观看免费视频| 亚洲三级网址| 欧美一级在线观看| www.com毛片| 顶级网黄在线播放| 国产亚洲一区二区在线观看| 91成人免费观看| 久久精品视频5| 欧美福利影院| 一区二区三区天堂av| 色婷婷一区二区三区在线观看| 视频在线这里都是精品| 亚洲国产经典视频| 久久久久久久久一区二区| 国产精品久久久久久免费免熟| 国产精品视频久久一区| 欧美成人午夜激情在线| 日韩欧美黄色网址| 亚洲国产合集| 亚洲国内精品在线| wwwww在线观看| 色8久久久久| 欧美亚洲自拍偷拍| 国产熟女高潮视频| 精精国产xxx在线视频app| 一区二区在线观看不卡| 一区二区成人国产精品 | 日韩视频一区二区在线观看| 精品久久久噜噜噜噜久久图片| av资源网在线播放| 亚洲一区在线观看视频| 日本一区二区三区四区五区六区| 91av资源在线| 国产欧美日韩视频一区二区| 久久精品中文字幕一区二区三区 | 亚洲欧美日韩人成在线播放| 美女视频久久| 台湾av在线二三区观看| 成人免费高清视频在线观看| 亚洲精品欧美日韩专区| 亚洲综合精品国产一区二区三区 | 视频在线观看国产精品| 欧美最猛黑人xxxx黑人猛叫黄| 久久精品国产亚洲av麻豆色欲| 亚洲色图网站| 色综合久久悠悠| 欧美特级一级片| 在线看片不卡| 欧美日本高清一区| 黄网站免费在线| 亚洲天堂男人| 欧美综合在线观看| 成人小视频在线播放| 日韩精品亚洲一区二区三区免费| 国产91在线播放精品91| 亚洲 欧美 中文字幕| 免费在线成人| 国产精品成人aaaaa网站| 青青国产在线视频| 久久99精品国产.久久久久| 国产精品中文字幕在线| 国产乱色精品成人免费视频| 国产一区二区三区av电影| 91久久爱成人| 天堂资源中文在线| 国产女同性恋一区二区| 中文字幕欧美人与畜| 最新国产露脸在线观看| 亚洲高清视频中文字幕| 欧美牲交a欧美牲交aⅴ免费真| av高清一区| 7777精品伊人久久久大香线蕉的| 特黄特黄一级片| 久久男人av| 中国人与牲禽动交精品| 91精品国产高清一区二区三蜜臀| 亚洲视频精品| 国产精品一区二区三| 99久久久久久久| 99久久99精品久久久久久| 日本午夜精品一区二区| 国产素人视频在线观看| 香蕉成人啪国产精品视频综合网| 日韩手机在线观看视频| 粉嫩一区二区三区在线观看| 亚洲国产精品免费| 日韩黄色中文字幕| 亚洲福利电影| 国产精品中文久久久久久久| 国产91免费在线观看| 久久精品夜色噜噜亚洲a∨| 超碰成人在线免费观看| 人妻少妇无码精品视频区| 国产在线观看成人| 99精品国产福利在线观看免费| 国产精品成人国产乱一区| www.黄色国产| 日本一区二区成人| 18禁免费观看网站| 亚洲精品自拍| 亚洲色图综合网| 免费视频一二三区| 麻豆一区二区三| 久久综合中文色婷婷| 国产黄色小视频在线| 色欧美乱欧美15图片| 极品白嫩少妇无套内谢| 日韩中文在线电影| 欧美一区第一页| 韩国av电影在线观看| 国产精品美女久久久久久2018| 男女视频网站在线观看| 成人午夜888| 在线成人免费网站| 中文字幕视频网| 国产高清不卡二三区| 亚洲 国产 欧美一区| 午夜欧美激情| 亚洲国产高潮在线观看| 日韩三级久久久| 秋霞午夜鲁丝一区二区老狼| 九九九九精品九九九九| av资源中文在线| 精品国产一区二区国模嫣然| 天天操天天操天天操天天操天天操| 视频一区二区欧美| 日韩一区二区视频在线观看| 亚洲自拍偷拍网址| 成人免费黄色网页| 色婷婷激情综合| 成人无码www在线看免费| 亚洲成人在线| 国产欧美日韩综合精品二区| 天使と恶魔の榨精在线播放| 欧美久久久一区| 国产美女网站视频| 蜜臀a∨国产成人精品| 免费看成人av| 一区二区电影免费观看| 日韩精品在线影院| 91九色丨porny丨肉丝| 9人人澡人人爽人人精品| 免费人成自慰网站| 精品久久对白| 欧美一区二区.| 巨骚激情综合| 欧美视频完全免费看| 人人妻人人澡人人爽| 日韩电影免费一区| 日韩av电影免费观看| 欧洲成人一区| 精品视频在线播放色网色视频| 日本一级淫片色费放| 99久久精品情趣| av免费在线播放网站| 精品国产91乱码一区二区三区四区| 国产一区二区三区四区五区3d| 亚洲.国产.中文慕字在线| 少妇搡bbbb搡bbb搡打电话| 国产精品av久久久久久麻豆网| 亚洲字幕一区二区| 爱情岛亚洲播放路线| 欧美成人三级电影在线| 亚欧洲精品在线视频| 91视频在线观看免费| 午夜精品久久久内射近拍高清 | 欧美伦理视频网站| 99精品久久久久| 97久久超碰精品国产| 97公开免费视频| 欧美h版在线| 国产精品白丝jk白祙| 亚洲欧洲自拍| 色av吧综合网| 殴美一级特黄aaaaaa| 日韩欧美国产成人| 四虎影院中文字幕| 99国产精品视频免费观看| 日本成人黄色网| 99精品美女| 国产乱码一区| 精品三级在线| 欧美又大粗又爽又黄大片视频| 一区二区三区视频在线观看视频| 精品久久一区二区| 波多野结衣不卡| 亚洲综合久久av| 欧美丰满美乳xxⅹ高潮www| 国产91精品一区二区麻豆网站 | 国产一区二区导航在线播放| 久激情内射婷内射蜜桃| 久久国产小视频| 精品视频高清无人区区二区三区| 国产精品久久乐| 91高清在线免费观看| 美女隐私在线观看| 亚洲欧洲在线观看| 日韩在线一区二区三区四区| 欧美亚洲自拍偷拍| 日韩av大片在线观看| 亚洲免费色视频| av手机在线播放| 不卡电影免费在线播放一区| 天天看片天天操| 丝瓜av网站精品一区二区| 粉嫩av一区二区三区天美传媒| 精品国产一区二区三区av片| 国产精品对白一区二区三区| 欧美xxxx网站| 国产成人精品视| 欧美卡一卡二卡三| 国产二区精品| 欧美日韩一区二区三区免费| 视频二区欧美毛片免费观看| 国产精品久久二区| 成人片免费看| 欧美一区二区三区免费观看| 国产99re66在线视频| 日韩三级成人av网| 91大神在线网站| 亚洲欧洲xxxx| 日本又骚又刺激的视频在线观看| 精品日韩99亚洲| 成 人片 黄 色 大 片| 制服视频三区第一页精品| 中文精品久久久久人妻不卡| 粉嫩av一区二区三区免费野| 日韩欧美亚洲国产| 亚洲成av人片一区二区三区| 欧美日韩大片在线观看| 亚洲私人黄色宅男| 多男操一女视频| 亚洲色图清纯唯美| 日韩欧美综合视频| 一区二区视频在线| 久久久久久久久久91| 一区二区三区日韩| 国产精品suv一区二区| 亚洲综合久久久久| 亚洲欧美在线视频免费| 精品日韩视频在线观看| 久草成人在线视频| 亚洲高清中文字幕| 国产无遮挡呻吟娇喘视频| 欧美午夜影院在线视频| 久久精品国产亚洲av高清色欲 | 久久夜色精品国产噜噜av小说| 国产精品免费一区二区三区观看| 国产精品qvod| 美国av一区二区三区| 欧美美女在线观看| 亚洲在线色站| 你懂的国产精品永久在线| 天堂8在线天堂资源bt| 最新日韩欧美| 黑鬼大战白妞高潮喷白浆| 首页亚洲欧美制服丝腿| 亚洲一区二区福利视频| 国产超碰在线一区| 国产ts丝袜人妖系列视频| 国产日韩欧美精品综合| a一级免费视频| 亚洲伊人伊色伊影伊综合网| 久久草视频在线| 欧洲精品视频在线观看| 一卡二卡三卡在线观看| 日韩女同互慰一区二区| 午夜成人免费影院| 日韩在线一区二区三区免费视频| 任你弄在线视频免费观看| 5252色成人免费视频| 欧美三级电影网址| 国产精品久久7| 欧美日韩性在线观看| 最新黄色av网站| 国产模特精品视频久久久久| 嫩草影院国产精品| 国产不卡在线一区| 在线观看免费小视频| 亚洲激情自拍偷拍| 秋霞av一区二区三区| 欧美一区二区黄色| 黄色在线播放| 欧美疯狂性受xxxxx另类| 欧美黑人一区| 高清不卡日本v二区在线| 精品免费一区二区| 中国丰满熟妇xxxx性| 免费人成网站在线观看欧美高清| 亚洲欧洲日韩综合| 欧美高清一级片在线观看| 国产极品在线播放| 欧美日韩国产首页| 日韩午夜影院| 久久久这里只有精品视频| 国产成人午夜性a一级毛片| 国产综合 伊人色| 我不卡影院28| 国产视频一区二区视频| 成人免费电影视频| av激情在线观看| 欧美视频精品在线观看| 无码精品黑人一区二区三区| 久久五月天色综合| 亚洲成av在线| 久久久久资源| 亚洲激情av| 美女被爆操网站| 亚洲三级在线看| 中文字幕人妻丝袜乱一区三区| 亚洲国产女人aaa毛片在线| 大地资源网3页在线观看| 国产精品三级美女白浆呻吟 | 人人草在线观看| 日韩h在线观看| 国产在线xxx| 2019国产精品视频| 亚洲91中文字幕无线码三区| 好男人www社区| 国产三级精品三级在线专区| 亚洲精品午夜国产va久久成人| 精品裸体舞一区二区三区| 51xtv成人影院| 亚洲最大av网站| 女主播福利一区| 欧美体内she精高潮| 国产精品福利影院| 亚洲自拍偷拍另类| 日韩日本欧美亚洲| 国产日韩一区二区三免费高清| 一区二区三区国产福利| 久久99精品视频| 成人一级黄色大片| 91精品国产综合久久久久久久久久| 1024免费在线视频| 国产欧美最新羞羞视频在线观看| 精品免费一区二区| 日本中文字幕二区| 国产精品传媒在线| 国产不卡av在线播放| 欧美精品制服第一页| 9l视频自拍九色9l视频成人| 欧美国产视频一区| 成人精品国产福利| 西西44rtwww国产精品| 亚洲另类xxxx| 少妇精品视频一区二区免费看| 五月婷婷综合色| 激情另类小说区图片区视频区| 免费成年人视频在线观看| 日韩无一区二区| av资源中文在线| 欧美日韩一区二区三区在线观看免| 久久精品在线| 天堂а√在线中文在线鲁大师| 欧美精品色一区二区三区| 国产精品剧情| 狠狠爱一区二区三区| 天堂成人国产精品一区| 欧美性生给视频| 欧美videos中文字幕| 亚洲精品动漫| 这里只有精品66| 国产91精品在线观看| 老熟妇仑乱一区二区av| 神马久久桃色视频| xxxxxhd亚洲人hd| 黄色片视频在线播放| 国产精品久久久久aaaa| 亚洲国产中文字幕在线| 2019中文字幕免费视频| 日韩精品一区二区三区免费观看| 日本人妻一区二区三区| 色综合久久中文综合久久牛| 在线观看黄av| 狠狠久久综合婷婷不卡| 美女视频一区二区| 国产网站在线看| 中文字幕无线精品亚洲乱码一区| 欧一区二区三区| 日韩免费高清在线| 亚洲资源中文字幕| yw193.com尤物在线| 国产精品久久久对白| 免费的成人av| 在线观看 中文字幕| 久久影视免费观看| 色棕色天天综合网| 在线观看欧美一区二区| 欧美怡红院视频| 麻豆成全视频免费观看在线看| 中文一区一区三区免费| 久久综合一区二区| 亚洲AV无码成人片在线观看 | 91精品啪在线观看国产手机|