自动填充用户名/密码时,如何防止Chrome更改字体?

sha*_*ana 25 html css

我有一个使用用户名和密码输入的登录表单。在Windows上的Chrome(其他浏览器或Mac上不会发生)中,当将鼠标悬停在Chrome密码管理器中保存的用户名上时,字体会更改。然后,更改字体会更改输入的宽度,从而使我的对齐方式毫无用处。

显然,我可以为输入设置固定宽度以保存对齐方式,但这并不能真正解决问题,只需在其上放置一个创可贴即可。我真正想要的是首先防止字体更改。

我尝试将输入作为目标输入,:-webkit-autofill然后将!important输入的所有CSS都放到上面,以查看是否有东西粘住但没有骰子。

Codepen 在这里。您需要使用Windows上的Chrome浏览器,并使用Google的密码管理器。

HTML:

<form>
    <label>
        <input type="text" name="username" placeholder="Username" required />
    </label>
    <label>
        <input type="password" name="password" placeholder="Password" required />
    </label>
  <button type="submit">Login</button>
</form>
Run Code Online (Sandbox Code Playgroud)

SCSS:

// setting font for more exaggerated difference
* {
  font-family: Times, "Times New Roman", serif;
}

// why doesn't this or anything else work?
input {
  &:-webkit-auto-fill {
    &,
    &:hover,
    &:focus {
    font-family: Times, "Times New Roman", serif !important;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

关于防止这种字体更改的任何线索将不胜感激!

cup*_*_of 26

尝试这个!

      &:-webkit-autofill::first-line,
      &:-webkit-autofill,
      &:-webkit-autofill:hover,
      &:-webkit-autofill:focus,
      &:-webkit-autofill:active {
        font-family: Times, "Times New Roman", serif !important;
      }
Run Code Online (Sandbox Code Playgroud)

你可能只需要这个

     &:-webkit-autofill::first-line
Run Code Online (Sandbox Code Playgroud)

其他的只是装箱

  • 对我来说不起作用 (4认同)
  • 是的,目前看来这不起作用。 (4认同)
  • 好吧,你知道什么,它成功了!我只需要第一行。谢谢@cup_of! (2认同)
  • 好吧,这么多年过去了,这就是问题的最终答案!唯一需要注意的是,您必须重复字体系列、字体大小和字体粗细的样式。 (2认同)

Thi*_*las 15

这似乎是Chrome的最新更改:问题953689:将鼠标悬停在时,先前输入的表单值会覆盖样式。据我所知,这种情况在macOS和Windows上均会发生,向最终用户呈现自动填充的任何地方。显然,这是为解决以前的实施中的安全性问题而故意完成的– 问题916838:安全性:两个自动完成漏洞一起使站点在一次按键后就可以无形地读取信用卡号

似乎没有成为此刻覆盖这些新样式的方式-如果风格的变化实在是太讨厌,您可以禁用自动填写(停用Chrome自动填充),或者设置字段的字体样式(font-familyfont-weightfont-stylefont-size对比赛Chrome的自动填充建议的建议-如此处建议:https : //stackoverflow.com/a/56997845/1798491

  • 呵呵。从这里的观点和投票来看,很多人对我利用该漏洞报告造成的损害感到恼火。对于那个很抱歉。在我的辩护中,我[*did*警告Google SecurityTeam](https://bugs.chromium.org/p/chromium/issues/detail?id=916838#c16)这一变化有用户体验方面的缺点,并建议另一个修复方案,但是无论如何,他们还是这么做了。从好的方面来说,有一个[提交](https://chromium.googlesource.com/chromium/src.git/+/39f06061af8da287363cba093071ec348ef642c2)现在公开实施替代修复,所以也许我们会看到强制恢复默认字体也很快。 (7认同)
  • @MarkAmery 知道这个修复程序什么时候发布吗? (3认同)
  • 我不再在 macOS Chrome 版本 95 上工作。Chrome 删除自动填充字体样式的原因是出于安全考虑 https://bugs.chromium.org/p/chromium/issues/detail?id=1035058。`::first-line` 是解决他们最初的创可贴“修复”的一个技巧,但他们现在也修复了我们的解决方法。值得注意的是,Chrome 96 将支持 `:autofill` https://www.chromestatus.com/feature/5592445322526720 但我不确定 Chrome 会让我们对其进行样式设置到什么程度。 (3认同)
  • 遗憾的是,回来检查时发现“:autofill”不允许更改字体大小(尚未测试其他字体属性)。 (3认同)

Dzm*_*ski 5

这是 2021 年对我有用的解决方案,可防止 Chrome 更改密码/用户名输入字段的字体:

input#username {
  font-family: "Rubik";
  font-weight: bold;
  color: blue;
}

input:-webkit-autofill::first-line {
      color: red;
      font-family: "Rubik"; 
      font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://fonts.googleapis.com/css?family=Rubik&display=swap" rel="stylesheet">
<input id="username" name="username"></input>
Run Code Online (Sandbox Code Playgroud)

我还注意到由于某种原因display: flex与该代码冲突,请看一下:

input#username {
  font-family: "Rubik";
  color: blue;
  font-weight: bold;
  display: flex;
}

input:-webkit-autofill::first-line {
      color: red;
      font-family: "Rubik";
      font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://fonts.googleapis.com/css?family=Rubik&display=swap" rel="stylesheet">
<input id="username"></input>
Run Code Online (Sandbox Code Playgroud)

  • 选择后有效,但不幸的是,将鼠标悬停在条目上时**不起作用**,这正是OP所要求的。 (4认同)