CSS :autofill 如何覆盖浏览器自动填充表单的样式

CSS :autofill 如何覆盖浏览器自动填充表单的样式

:autofill 伪类匹配浏览器自动填充值的 input 元素. 如果用户继续编辑这个元素内容就会停止匹配.

#name:autofill {
  background-color: red !important;
  border: 6px solid red;
}
#name:-webkit-autofill {
  background-color: red !important;
  border: 6px solid red;
}
<form action="">
  <div>
    <label for="name">Name: </label>
    <input type="text" name="name" id="name">
  </div>
  <div>
    <label for="password">Password: </label>
    <input type="password" name="password" id="password">
  </div>
</form>

在这里插入图片描述

🤔️好像生效了, 又好像没有生效? 因为只有边框的颜色发生了改变, 而背景色压根儿没变. 这是为啥? MDN 是这么解释的, 许多浏览器在自动填充时使用了 !important, 这使得其样式无法被覆盖. 至于为什么不能被覆盖, 请看我之前写过的文章 CSS 重新认识 !important 肯定有你不知道的.

Chrome 浏览器就这样做了, 如下图, 我们是没有办法通过 background-color, colorbackground-image 三个属性来覆盖其自动填充的样式.

在这里插入图片描述

如果覆盖?

其实 stackoverflow 给出了一些答案, 我们现在来看. 首先, 就是使用向内的 box-shadow, 就是关键词 inset, 其本身就有嵌入的意思, 所以用在阴影上就表示阴影是向内的.

#name:-webkit-autofill {
  background-color: red !important;
  border: 6px solid red;
  box-shadow: inset 0 0 2000px #fff;
  -webkit-text-fill-color: red;
}

还有一个 -webkit-text-fill-color CSS 属性, 其用来指定文本的填充颜色, 如果这个属性没有设值, 就是用 color, 其兼容性很好.
在这里插入图片描述

多说一嘴, 输入框外边的蓝色框框是 outline, 不属于自动填充的样式哦(_)~

还有一个方法, 也是 stackoverflow. 不过这个方法有一定的不合适, 特别在前面的方法使用起来没有明显缺陷的情况下. 这个方法就是使用过渡, 尽可能延长颜色变化的时长, 使得看起来颜色好像没有变化.

#name:-webkit-autofill,
#name:-webkit-autofill:focus {
  transition: background-color 600000s 0s, color 600000s 0s;
}

这个方法在我本地最新的 Chrome 没有效果, 在 Safari 有效果. 不论如何, 这是一种思路吧.
在这里插入图片描述

暗色模式

通过 color-scheme: dark; 指定元素在自动填充时以暗色主题渲染. 可以看到暗色背景下, 背景色颜色更深. 实际上应该适应系统的颜色模式, 在暗色模式下使用 dark, 否则使用 light, 这里不具体展开
在这里插入图片描述

兼容性

谷歌浏览器和比较久的 Firefox 和比较久的 Safari 还需要使用 -webkit- 私有前缀. 所以保险的写法是下面这样, 都写上

input:autofill,
input:-webkit-autofill {
}

谢谢你看到这里😊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery是一种流行的JavaScript库,它允许开发人员更轻松地处理HTML文档。通过使用jQuery,可以轻松地自动表单填充,从而提高用户体验。以下是一些使用jQuery自动填充表单的常见方法: 1. 使用val()方法:val()方法可用于设置或返回表单输入字段的值。可以使用它来自动填充表单字段。例如,可以使用以下代码将所有文本字段的值设置为空字符串: ```javascript $('input[type="text"]').val(''); ``` 2. 使用each()方法:可以使用each()方法遍历表单中的所有输入字段,并使用val()方法设置其值。例如,以下代码将所有输入字段的值设置为当前日期: ```javascript $('input').each(function() { switch($(this).attr('type')) { case 'text': $(this).val(new Date().toLocaleString()); break; case 'date': $(this).val(new Date().toLocaleDateString()); break; default: break; } }); ``` 3. 使用正则表达式验证:可以使用正则表达式验证表单字段的值,并根据需要自动填充该值。例如,以下代码将所有密码字段的值设置为'password': ```javascript $('input[type="password"]').each(function() { if($(this).val() === '') { $(this).val('password'); } }); ``` 4. 使用插件:可以使用一些jQuery插件来自动填充表单。例如,jQuery Form Autofill插件可以自动填充表单字段,并根据用户在浏览器历史记录中访问的页面信息自动填充表单字段的值。 这些是一些使用jQuery自动填充表单的常见方法。根据具体需求,可以选择适合的方法来实现自动填充表单的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值