CSS过滤器反转规则打破Chrome 68上的固定位置

Zen*_*noo 15 css google-chrome css-position css-filters

我在使用Chrome 68.

每当我filter: invert(xxx);进入时<body>,任何定位fixed都不会粘在屏幕上,它会滚动所有内容.


演示用 filter: invert(xxx);

body{
  height: 8000px;
  filter: invert(0.85);
}

div{
  position: fixed;
  top: 0;
  left: 0;
  height: 100px;
  width: 100px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)


没有演示 filter: invert(xxx);

body{
  height: 8000px;
}

div{
  position: fixed;
  top: 0;
  left: 0;
  height: 100px;
  width: 100px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

编辑:适用于Chrome 67,但不适用于Chrome 68.

Seb*_*sch 12

它看起来像谷歌Chrome 68上的一个错误,但您可以使用<html>元素而不是元素来解决这个问题<body>:

html {
  height: 8000px;
  filter: invert(0.85);
}
div {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100px;
  width: 100px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

注:在唯一的情况top,并left设置为0,不留固定在滚动的元素.但是如果你添加bottom: 0;元素再次固定.


我还比较了之前(Chrome 67)和之后(Chrome 68)的更新样式,并在同一个示例(with filter)上更改了以下值:

+---------------+-----------------+
| Chrome 67     | Chrome 68       |
+---------------+-----------------+
| bottom: 97px; | bottom: 7898px; |
| right: 526px; | right: 510px;   |
+---------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

  • 将它添加到`<html>`似乎确实解决了它! (2认同)
  • 不是错误。它只是创建了一个新的[堆叠上下文](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context),也[见这里](https://stackoverflow.com /a/52937920/927631) (2认同)