大前端项目z-index规划设计

个人发现在做前端的时候经常出现一些绝对定位、设置图层高度的时候,但不同的图层都有一个z-index的css属性。

如何规划这些图层成了一个值得思考的问题。今天设计了一套“夹层模型”的方案。考虑到了很多情况。

直接来一张草稿图:

QQ截图20230803210050

上面的夹层模型适用于React、Vue这样的前端框架,都有一个“一人之上,万人之下”的APP组件。

整个结构分为APP层和页面组件层。APP只有一个,但页面有很多。

1~999:都是页面内比较正常的元素

1000~1999:弹窗的灰色遮罩背景之类的组件,或者是能够遮住全屏的加载动画

2000~2999:弹窗面板,比如突然弹出来一个界面提示框,登录框、警告框之类的

3000~3999:页面鼠标交互层:比如在这个界面,会有一个鼠标点击一下就能让屏幕上多出来一个小桃心的上浮动画,这个小桃心就可以用绝对定位一个div来实现。但他的z-index必须很高,比弹窗组件还要高。

有了界面层,其实还应该有个全局的APP层,APP层是完全高于界面层的一种层。和界面一样,也有遮罩层、弹窗面板层和鼠标交互层。为了方便记忆,直接设定APP层为四位数上万。

也就是1000019999,2000029999,30000~39999。

值得注意的是,该模型中不仅有向上的考虑,还有0以下的考虑,可以设定一个页面背景层,让z-index:-1

然后再设计一个APP通用背景层,z-index:-2。

优点:

考虑相对全面,记忆方便:1000以内都是正常页面,上千级别是页面级别的东西,上万级别是APP级别的东西。

1xxx+是弹窗背景,2xxx+是弹窗,3xxx+是鼠标交互层。

方案模型缺点:老浏览器的兼容性问题

但在一般情况下,设置负值的z-index应该尽量避免,因为它可能会引起一些层叠问题和混乱。然而,如果确实需要设置负值的z-index,可以考虑将其限制在一个较小的范围内。一般建议最小的负值不要超过-1。
——chatGPT

建议尽量避免设置过大的z-index值,以避免可能出现的层叠顺序混乱或其他问题。通常来说,一个较为保守的做法是将z-index值限制在较小的范围内,例如1000以下。
——chatGPT

IE6及一下对z-index负数会有奇怪行为

一些大厂的规范

谷歌(Google):谷歌推荐使用自定义的z-index堆栈,通过定义一组常量变量来表示不同的层级关系,例如「Z_INDEX_DIALOG」、「Z_INDEX_NAVIGATION」等。

Facebook:Facebook的z-index规范建议使用较小的z-index值,将其限制在较小的范围内,通常为0-999。

Airbnb:Airbnb的z-index规范建议使用基于自然层次结构的命名约定,例如「layer-modal」、「layer-popover」等,以便理解和维护。

最后,如果该模型有什么没有考虑到的情况欢迎评论补充。