之前公司网站在加入预先载入动画 (preload animation) 后,原本的选单无法正常置顶。

检查了一下,发现增加了 sticky 类型项目选单的上层 div 元素高度是 0。原本尝试赋予 height 值,但是无法发挥任何效果。

后来参考了这篇文章,内容说明“上层元素如果有 transform 的属性值,那么 position:fixed; 的设定则会无效。”

这样的说法其实蛮合理的,因为 transform 会改变元素的大小、位置与旋转角度,而 position 这个属性值,是根据上层元素作为参考点,因此在会根据变形后的上层元素重新定位参考点,以 position: fixed; 为例,在 #page 拥有 transform 的属性值后,其参考点会根据 #page 的 translate(0px 0px) 作为起始座标,而不再是画面的 (0 0) 作为起始座标。

检查了一下 html,果然出现这项属性值。

造成这个问题的原因,可能是在增加动画时,定义了上层元素 #page 的 transform 属性值,借此制作内容淡入、向上浮出的效果。

将第 14 行的 #page 选择器改为其他元素,甚至直接拿掉。

这种方法是在坚持必须要维持 #page 动画的情况下才需要做,但是因为本身是另外一项操作,可能会影响效能表现,而且这个做法可能会连带影响到其他对于 #page 的样式操作。因此应该是第一种方法更好。

目前提出的都是暂时解法,目的在于解决 position: fixed; 元素的上层元素中,有 transform 的属性值。这是造成问题的根源,因此未来在使用 position: fixed; 的时候必须格外注意。

此外,因为工作的关系,曾经用 Automattic 的 Underscores (_s) 替客户与公司官网进行全客制化布景主题开发。