合理的 Z-Index 值

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

一位名叫 Arjan 的读者最近给我发邮件,告诉我一个 The Printliminator 不起作用的网站。他们追溯到该网站使用了一堆“叠层”,并且 z-index 值高得离谱。Printliminator 通过绝对定位和 10000 的 z-index 值注入页面,我已经认为这个值高得离谱了。那么,我们是否应该开始玩这个游戏,然后使用更高得离谱的 z-index 值?我选择不玩。

Arjan 报告说他看到了“z-index: 1e+07”的值(我认为这是他使用的 DOM 检查器为了更易读而进行了简写,但意味着 1×107)。在 Safari 的 Web 检查器中,我看到了 z-index: 1.62909e+07;Firefox/Firebug 显示给我的是 z-index:12600322;谁知道实际生成这些值的代码中是什么。由于该网站看起来有点非法,所以我暂时不会提供链接。

不值得玩的游戏

也许这个网站之所以使用如此高的数字,是因为他们试图通过巨大的 z-index 值覆盖他们无法控制的某些外部内容。然后,外部来源可以提高他们的数字以确保它们再次处于顶部,从而形成一个恶性循环。一个愚蠢且无法获胜的游戏。

我可以预见到另一种技术出现,即放置外部内容的 JavaScript 会轮询页面上的所有元素以获取它们的 z-index 值,并将其设置为更高的值。然后,试图对抗它的网站也会进行定时轮询,这可能会导致类似于 CSS 抖动人 的奇怪闪烁。

渲染影响?

是否有人确切地知道处理极高数量级的 z-index 值是否会给渲染引擎带来更大的压力?我猜测它会带来一些压力,更不用说 CSS 文件中多出的所有字符了。

更合理的 z-index 值

我实际上喜欢使用“稍微”较高的 z-index 值。我喜欢以 100 为增量来分隔它们。因此,如果您有三个需要堆叠并知道顺序的元素,第一个元素将具有 z-index: 0;,第二个为 100,第三个为 200。这样您就有一定的空间,如果出于某种原因将来需要在第二个和第三个之间放置某些内容,您可以使用 110。如果您使用 1、2 和 3,则没有这种选择。我还通常避免使用负值,因为您必须小心,如果不需要,则某些元素不会被 body 或 html 元素覆盖。

像 9999 这样的数字可以用作“绝对最高的数值”,由于不同的编号约定,它在视觉上是可以识别的。

 

您在使用 z-index 时是否有自己的系统?