📅  最后修改于: 2023-12-03 15:26:13.573000             🧑  作者: Mango
在Web开发中,文本输入框是非常常用的组件。输入框中的占位符文本是为了方便用户在输入时了解该输入框的用途。在现代浏览器中,我们可以通过设置输入框的占位符文本的样式来达到一些美观和交互上的效果。本文将介绍如何利用Javascript来实现让文本输入框的占位符颜色能够反应当前本机主题样式。
实现该功能的原理是,在客户端利用Javascript监听操作系统的主题切换事件,通过设置CSS变量来更新文本输入框占位符文本的颜色。
具体来说,我们可以使用媒体查询来检测当前系统主题样式,如果当前主题是暗色系,那么我们就设置输入框占位符文本的颜色为浅色;反之则设置为暗色。CSS变量可以提供给我们在代码中动态修改变量的值,因此我们可以通过更新这些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);
}
}
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);
};
通过使用Javascript和CSS变量,我们可以实现让文本输入框占位符颜色随着操作系统的主题样式改变而改变的效果。这样的交互会让用户感到更为友好和自然,提高Web应用的易用性。