文本输入中自动填充的 CSS 字体系列问题

Posted

技术标签:

【中文标题】文本输入中自动填充的 CSS 字体系列问题【英文标题】:CSS font family issue with autofill within a text input 【发布时间】:2019-10-04 16:18:24 【问题描述】:

我正在尝试为输入设置等宽字体,但是当自动填充启动并在自动填充下拉菜单选项之间切换时,文本输入的自动填充状态中的字体系列不会显示为指定的等宽字体,请参阅此代码并将字体系列更改为等宽字体以描述我的问题(我正在使用 Chrome 顺便说一句): Codepen example by CSS tricks

/* Change autocomplete styles in WebKit */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus 
  border: 1px solid green;
  -webkit-text-fill-color: green;
  -webkit-box-shadow: 0 0 0px 1000px #000 inset;
  transition: background-color 5000s ease-in-out 0s;


/* PRESENTATIONAL STYLES */
body 
  background: #333;
  color: #fff;
  display: flex;
  font-family: monospace;
  font-size: 3em;
  justify-content: center;


form 
  padding: 50px 0;
  width: 50%;

<form>
  <div class="form-group">
    <label for="exampleInputFirst">First Name</label>
    <input type="text" class="form-control input-lg" id="exampleInputFirst">
  </div>
  <div class="form-group">
    <label for="exampleInputLast">Last Name</label>
    <input type="text" class="form-control input-lg" id="exampleInputLast">
  </div>
  <div class="form-group">
    <label for="exampleInputEmail">Email Address</label>
    <input type="email" class="form-control input-lg" id="exampleInputEmail">
  </div>

  <button type="submit" class="btn btn-primary btn-lg btn-block">Submit</button>
</form>

【问题讨论】:

根据 MDN,“当 元素的值被浏览器自动填充时,:-webkit-autofill CSS 伪类匹配。” - 这仍然适用对于输入字段本身,不是浏览器本身为自动填充功能呈现的自动创建的下拉列表。我很确定您想要的东西是不可能的;这基本上与您为 title 属性获得的自动工具提示相同 - 您也不能格式化。 我没有尝试更改下拉列表,我在从下拉自动填充列表切换值时遇到文本输入中呈现的文本的问题,字体系列从等宽(由 css 规则指定)到默认值。 这与***.com/q/56026043/1709587 中描述的问题相同,最终是我报告的security bug 修复的副作用,在提出此问题的前一个月发货。 【参考方案1】:

这里的解决方案是input:-webkit-autofill::first-line 选择器。

它允许您在鼠标悬停在自动完成元素上时覆盖默认系统字体(和字体大小)。

【讨论】:

我不知道为什么input:-webkit-autofill 不起作用,但input:-webkit-autofill::first-line 起作用,但它起作用了!谢谢! Chrome 是新的 Internet Explorer。我最近似乎有 20% 的工作量是在尝试解决 Chrome 的烦恼。 也适合我。 TY 在 macOS Chrome 版本 95 上不再为我工作。Chrome 删除自动填充字体样式的原因归结为安全问题 bugs.chromium.org/p/chromium/issues/detail?id=1035058。 ::first-line 是解决他们最初的创可贴“修复”的一个技巧,但他们现在也修复了我们的解决方法。值得注意的是,Chrome 96 将支持 :autofill chromestatus.com/feature/5592445322526720 但我不确定 Chrome 会在多大程度上让我们对其进行样式设置。【参考方案2】:

这是我的部分答案,希望能有所帮助:

我在 Chrome 中遇到了同样的问题,我想在自动填充选项悬停时更改输入文本区域内的字体系列,但它似乎是一件事不会改变。

根据我在 WebKit 中更改自动完成样式的实验,如 CSS 技巧教程和您的代码 sn-p 中所述,我可以更改边框样式、框阴影样式,甚至是 font-weight 和 @987654322 @。

因为我可以在悬停时更改文本输入区域内字体的其他属性,但 不是 font-family,我相信这要么是故意的,要么是 Chrome 的错误。我还注意到 CSS 技巧的示例行为方式相同:字体系列是悬停时的默认值,但在选择后切换到 Lato。所以,我相信这是 Chrome 所期望的。如果我能找到一些明确的文档表明这里不允许更改font-family,我会更满意,但这是我能得出的最大结论。

【讨论】:

这似乎是故意的,但也许这是一个错误,由于设计不一致,有点烦人,Firefox 工作 符合预期(它甚至不显示文本将鼠标悬停在下拉选项上时的文本输入)。我希望我可以覆盖它,我只是要禁用自动完成。

以上是关于文本输入中自动填充的 CSS 字体系列问题的主要内容,如果未能解决你的问题,请参考以下文章

设置自动填充建议的样式

更改自动填充输入字段的字体颜色

即使自动完成关闭,文本也会自动填充到输入文本中

Excel中设置下拉菜单并填充不同颜色

通过用户表单替换自动填充的文本

通过用户表单替换自动填充的文本