年初的一个笔记,闲时整理出来。
很多网上文章都说建议打开浏览器的硬件加速,这样页面渲染速度、动画流畅性会提高。这几乎成了很多人页面制作的标配,管实际有没有用都来一个:
html,body {
transform: translate3d(0,0,0);
}
但这在很多情况下会引起 html 层级文档流的“异常”。
W3C spec 中有如下描述:
代码如下 | 复制代码 |
In the HTML namespace, any value other than none for the transform results in the creation of both a stacking context and a containing block. |
意思是:
在 HTML 内,没有比对一个即是层叠对象又是容器块的 DOM 进行 transform 变换更没有意义的了。
这类对象也扮演着 positioned(主要是 absolute/fixed ) 子孙元素容器的角色。
。。。翻译能力有限,不理解的人估计这句话看了后更晕,下面详述。
页面中的 dom 元素按照其在 HTML 中的标签位置顺序进行从上到下、从左往右的排布过程
想必大家对这个基础的定义已经很熟悉了吧。但是,这个究竟在实际中有什么体现呢?
如果你在页面中放置一大堆 display: inline-block 的元素,它们会很乖巧的 上 -> 下 左 -> 右 排的很整齐。这就是标准文档流的基础体现。
当你用position、float等属性使其脱离文档流时,就会又产生一个页面 层级 的概念。(扯远了...)
例子代码如下:
点击查看例子
dom 元素的默认定位属性是 position: static; 这也是标准文档流的标准定位方式。
例子中,不管 p 怎么上下滚动,header 和 footer 会永远置于屏幕的最上和最下部。
但是如最初所述,给 body 或 html 加上一个 transform: translate3d(0,0,0);,你再去试,就会发现,原本 position: fixed; 的两个元素都不听话了,会随着屏幕进行滚动。
实际上,position: fixed; 的参考对象并不是大家所说的屏幕,而是一个 viewport 的html对象,一般地一个页面(document.documentElement)会生成一个 viewport。
你用 document.documentElement.clientHeight 就可以的看到实际 viewport 的高度,其中 fixed 的元素都是以此为容器进行定位的。
body(或html) 加了 transform 属性以后,整个 body DOM 既会产生相应的变换,但此时的“整个”仅是指 body 下标准文档流元素,对于那些 position: absolute; / position: fixed; 元素,因为已经脱离了 body 所属的文档流,所以无法凭借 body 的变换使自己也自然的达到相应的变换效果。
此时,浏览器为了让此类 DOM 得到相应的变化,会产生一个新的 viewport,这个 viewport 作为定位元素的容器存在,会响应 body 的 transform 变换效果,从而让里面那些脱离文档流的 positioned 元素也能进行变换。
这个 viewport 会严重影响 position: fixed; 的定位,当它随着“本尊”dom同步滚动的时候,会带着 fixed 元素一块滚,此时会产生一种类似 absolute 的诡异效果:
fixed 元素似乎变成了 absolute,存在于一个和document.documentElement大小一致的“看不见”容器内。
在一些移动端设备(或APP)上,给
还有一些低版本移动端浏览器上,也会出现类似的情况,可按此思路尝试解决。
其实上面的情况不只会发生在 body 上,一个任意的 dom 添加了 transform 之后都会生产一个类似 viewport 的效果,有兴趣可以去尝试。
荒野乱斗国际版 (BrawlStars)最新版本v56.274
下载一波超人内置修改器菜单版 安卓版v1.0.2
下载敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载继承了一座戏园子无限声望铜钱版 内置菜单最新版v1.7
继承了一座戏园子折相思版是游戏的破解版本,在该版本中为玩家提
山河半世橙光清软金手指版 无限鲜花v3.24
山河半世是一款超级好玩的橙光恋爱游戏,在游戏中玩家们需要扮演
蓬莱手游折相思版 安卓版v1.0.0
蓬莱免广告版是游戏的修改版本,在该版本中为玩家去除了广告,玩
当红影后橙光游戏破解版2025 最新版v1.0
当红影后橙光破解版是一款超级好玩的娱乐圈题材的橙光游戏,在这
忽然成了万人迷清软完结版 无限鲜花版v12.15
忽然成了万人迷破解版是一款非常好玩的男性向橙光游戏,在有一天