📌  相关文章
📜  文本输入占位符颜色反应本机 - Javascript(1)

📅  最后修改于: 2023-12-03 15:26:13.573000             🧑  作者: Mango

文本输入占位符颜色反应本机 - Javascript

在Web开发中,文本输入框是非常常用的组件。输入框中的占位符文本是为了方便用户在输入时了解该输入框的用途。在现代浏览器中,我们可以通过设置输入框的占位符文本的样式来达到一些美观和交互上的效果。本文将介绍如何利用Javascript来实现让文本输入框的占位符颜色能够反应当前本机主题样式。

实现原理

实现该功能的原理是,在客户端利用Javascript监听操作系统的主题切换事件,通过设置CSS变量来更新文本输入框占位符文本的颜色。

具体来说,我们可以使用媒体查询来检测当前系统主题样式,如果当前主题是暗色系,那么我们就设置输入框占位符文本的颜色为浅色;反之则设置为暗色。CSS变量可以提供给我们在代码中动态修改变量的值,因此我们可以通过更新这些CSS变量来改变输入框中占位符文本的颜色。

实现步骤

以下是具体的实现步骤:

  1. 定义两个CSS变量:--placeholder-color-light--placeholder-color-dark
input::placeholder {
  color: var(--placeholder-color-light);
}

@media (prefers-color-scheme: dark) {
  input::placeholder {
    color: var(--placeholder-color-dark);
  }
}
  1. 使用Javascript在文档加载时检测系统主题样式,设置相应的CSS变量:
window.onload = function() {
  const lightColor = "#999";
  const darkColor = "#bbb";

  const inputs = document.querySelectorAll('input');
  const lightColorVar = '--placeholder-color-light';
  const darkColorVar = '--placeholder-color-dark';

  const handleThemeChange = e => {
    const newTheme = e.matches ? 'dark' : 'light';
    const oppositeTheme = newTheme === 'dark' ? 'light' : 'dark';

    inputs.forEach(input => {
      input.style.setProperty(`--placeholder-color-${newTheme}`, `var(--placeholder-color-${oppositeTheme})`);
    });
  };

  const colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');
  handleThemeChange(colorSchemeQuery);
  colorSchemeQuery.addListener(handleThemeChange);
};
  1. 将上述代码添加到页面中,并确保在input标签渲染后加载。
总结

通过使用Javascript和CSS变量,我们可以实现让文本输入框占位符颜色随着操作系统的主题样式改变而改变的效果。这样的交互会让用户感到更为友好和自然,提高Web应用的易用性。