详解web如何改变主题配色方法示例

 更新时间:2023年03月06日 15:56:23   作者:今天又学到了  
这篇文章主要为大家介绍了web如何改变主题配色方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

自从苹果系统支持了暗色主题之后,越来越多的网站开始支持暗色模式,来改善用户夜晚使用网站的舒适度,那么一般都是如何处理的呢.

在开始一个项目时,我们通常会将用到的主题色,和一些全局配置,通过css变量定义在根元素,注意,变量必须以"--"开头

:root {
  --color-primary: white;
}

以下是可以改变主题的几种方式

一、通过在根元素定义选择器来改变主题

定义class

html.dark {
  --docsearch-modal-background: #23272f;
  --docsearch-hit-background: #23272f;
  --docsearch-highlight-color: #149eca;
}
<html class="dark"></html>

定义dateset

:root[data-theme='dark'] { 
    --color-primary: #3C7EFF; 
}
<html date-theme='dark'></html>
// 设置页面根元素的 dataset
const doc = document.documentElement; 
const newTheme = theme === 'light' ? 'dark' : 'light'; 
doc.dataset.theme = newTheme;

自定义标签属性

:root[arco-theme='dark'] { 
    --color-primary: #3C7EFF; 
}
<html arco-theme='dark'></html>
// 设置页面根元素的 dataset
const [theme, setTheme] = useStorage('arco-theme', 'light');
const doc = document.documentElement; 
doc.setAttribute('arco-theme', 'dark');

样式一般定义在:root中,当然也可以定义在html、body标签中,目的是为了能够在全局使用

二、通过prefers-color-scheme来改变主题

通过媒体查询,获取系统主题,来改变网站主题. scheme有三个可选值,分别是light、dark 和 no-preference,代表着亮色主题、暗色主题和未知,大部分浏览器都支持该特性,可以在这里查看 caniuse.

:root {
      --font-color: black;
}
  
@media (prefers-color-scheme: dark) {
  :root {
      --font-color: white;
  }
}

获取主题色

const theme = window.matchMedia('(prefers-color-scheme: dark)');
if (theme.matches) { } else { }

通过通知,监听主题色的变化

// handleChange(event) { if (event.matches) {} else {} }
const theme = window.matchMedia('(prefers-color-scheme: dark)');
theme.addListener(handleChange);
theme.removeListener(handleChange);

三、通过颜色反转来改变主题

这种filter方式,就是所谓的一行代码改变主题的方式,加入如下代码即可,不过这种一刀切的方式不够灵活,有些元素不需要颜色反转,还需要再加一层hue-rotate(180deg)反转回来,不推荐使用.

// 颜色反转,色调反转
filter: invert(1) hue-rotate(180deg);

特殊纪念日,网站置灰,也是用filter来实现的

filter: grayscale(1);

总结

以上就是三种改变主题的方法,不过通常我们做法是使用dateset + media(prefers-color-scheme)结合的方式来处理. 优先使用dateset,如果用户没有设置dateset,就使用media来获取系统主题,然后设置即可,更多关于web改变主题配色的资料请关注脚本之家其它相关文章!

相关文章

  • JS+CSS实现的蓝色table选项卡效果

    JS+CSS实现的蓝色table选项卡效果

    这篇文章主要介绍了JS+CSS实现的蓝色table选项卡效果,通过鼠标事件调用自定义函数实现页面元素样式的遍历与动态切换效果,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • js String.prototype.trim字符去前后空格的扩展

    js String.prototype.trim字符去前后空格的扩展

    这篇文章主要介绍了js String.prototype.trim字符去前后空格的扩展,需要的朋友可以参考下
    2020-04-04
  • 解决layui数据表格table的横向滚动条显示问题

    解决layui数据表格table的横向滚动条显示问题

    今天小编就为大家分享一篇解决layui数据表格table的横向滚动条显示问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JS实现让访问者自助选择网页文字颜色的方法

    JS实现让访问者自助选择网页文字颜色的方法

    这篇文章主要介绍了JS实现让访问者自助选择网页文字颜色的方法,涉及javascript针对radio表单控件的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 三分钟学会用ES7中的Async/Await进行异步编程

    三分钟学会用ES7中的Async/Await进行异步编程

    这篇文章主要介绍了三分钟学会用ES7中的Async/Await进行异步编程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 原生JS实现导航下拉菜单效果

    原生JS实现导航下拉菜单效果

    这篇文章主要介绍了JS实现导航下拉菜单效果,用原生JS实现的一个导航下拉菜单,下拉菜单的宽度与浏览器视口的宽度一样,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • JavaScript中的ES6 Proxy的具体使用

    JavaScript中的ES6 Proxy的具体使用

    这篇文章主要介绍了JavaScript中的ES6 Proxy的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Javascript中拼接大量字符串的方法

    Javascript中拼接大量字符串的方法

    这篇文章主要介绍了Javascript中拼接大量字符串的方法,本文实现的就是JS语言中的Heredoc语法,需要的朋友可以参考下
    2015-02-02
  • JavaScript的11个小技巧整理

    JavaScript的11个小技巧整理

    这篇文章介绍了JavaScript的11个小技巧,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 一文详解JavaScript 如何将 HTML 转成 Markdown

    一文详解JavaScript 如何将 HTML 转成 Markdown

    这篇文章主要介绍了一文详解JavaScript如何将HTML转成Markdown,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论