AI summary
type
status
date
Aug 1, 2024 02:34 AM
slug
summary
tags
category
icon
password
Layout 相关
Containing block
position: fixed
有些场景会受到祖先元素 transform
、 perspective
等影响,原因是因为这些 property 形成了 containing block,从而影响了 fixed 元素定位参考的 areaZoom vs Scale
zoom
是 May 2024 官方新增的 css 属性(之前都是 not standard,ts 也要 5.5 以上版本才支持)。zoom
会触发 layout计算 (MDN说明),原因如下:- zoom 会基于 computed value 进行计算,如果你使用
Element.getBoundingClientRect()/getComputedStyle()
等等实时获取元素大小的 API,发现其数值要么不变(如果你指定了 width/height),或者变得和 zoom 相反的方向(即如果 zoom 大于 1,你用 API 查的元素尺寸会变小),原因是这些 API 计算包含了 zoom 的缩放系数 - 针对上述 computed value 的问题,有一个新属性 currentCSSZoom,可以获取 zoom 缩放系数,并且说明了 computed value 相关 API 失效的原因,但是注意兼容性,截止目前(2024-08-01)很多浏览器还不支持
- zoom的缩放系数会乘以 Doom Tree 路径上所有父元素的 zoom,例如如果有一个父元素 zoom 为 1.1,自己的 zoom 是 1.2,那么实际效果就是
- 用法上,
zoom
的缩放中心跟writing-mode
有关,默认是 top left,对标transform-origin
的 top left - 不要使用
zoom: unset
,浏览器兼容性较差
- scale:修改元素宽高 px,不改变 layout,但是可能导致部分子元素受到 overflow 影响,从而布局混乱,例如子元素的 fixed 失效
【总结】
使用选择:
- 如果尽量希望不出现滚动条,并且不介意 layout 重绘的情况,可以考虑 zoom
- 如果需要根据元素 computed value 计算各种决定定位,建议使用 scale
- 作者:Tony
- 链接:https://wangqiwei.life/article/css-layout-conclusion
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。