我有一个同事在CSS中经常使用绝对定位。
我发现,通过为HTML提供不同的结构,通常可以实现相同的视觉效果 - 实际上,除非绝对需要,否则我倾向于避免使用绝对定位。
问题 - 除了CSS复杂性之外,我的直觉是否正确,绝对定位是否应该被谨慎使用?
我有一个同事在CSS中经常使用绝对定位。
我发现,通过为HTML提供不同的结构,通常可以实现相同的视觉效果 - 实际上,除非绝对需要,否则我倾向于避免使用绝对定位。
问题 - 除了CSS复杂性之外,我的直觉是否正确,绝对定位是否应该被谨慎使用?
如果可以的话,我也总是尽量避免使用绝对定位。因为最终这往往会让事情变得更加困难。但有时候我真的没有选择。
在进行这些有趣的性能测试https://www.artlebedev.com/tools/technogrette/html/browser-performance/之后
对于交互元素,最好使用position:absolute。
但在Opera中,这样做会“更好”(性能略有提升)。
Chrome 在处理动画绝对位置时存在问题;当许多元素重叠或进出视图时。CSS 动画可以,但使用 JavaScript 移动元素应该这样做:
element.style.transform = "translate3d(" + x + "px, " + y + "px, " + z + "px)"
-webkit-transform: translateZ(0);
transform: translateZ(0); /* make GPU composite layer */
will-change: transform, top, left; /* try optimize */
使用静态定位根本没有性能问题!
通过 CSS 的 calc()
和简单的数学计算和缩放,您可以实现远超其他方式的完美定位。
您需要非常清楚在页面上哪些内容应该根据屏幕的哪一侧进行调整大小。例如,一个真实的纸牌应该相对于视口的高度来确定每个细节。在所有可以使用em
单位的地方都使用vh。这就是所谓的静态绝对定位。
使用动态绝对定位,您可以获得无法想象的控制力。当屏幕重新加载、刷新、重绘、调整大小或旋转时,Javascript 需要调整绝对位置和尺寸。至少在页面重新加载时执行此操作:
<script>
var screenHeight = Math.max(document.body.offsetHeight, html.clientHeight, html.offsetHeight);
var screenWidth = Math.max(document.body.offsetWidth, html.clientWidth, html.offsetWidth);
</script>
e
上设置:e.style.left = screenWidth*scaleFactorX1
e.style.width = screenWidth*scaleFactorX2
e.style.top = screenHeight*scaleFactorY1
e.style.height = screenHeight*scaleFactorY2
如何计算比例因子由您决定。但是,每个唯一比例因子的标准公式为:
scaleFactorX1 = distance_from_left / screenWidth
scaleFactorX2 = width_of_element / screenWidth
scaleFactorY1 = distance_from_top / screenHeight
scaleFactorY2 = height_of_element / screenHeight