|
|

楼主 |
发表于 2026-2-22 13:38
|
显示全部楼层
元素在视口水平方向自居中的实现原理:先获取元素所在的父元素的相关值,主要是——
其一,父元素左侧离浏览器视口左边缘的距离。这叫偏移量,它可以视为是元素的left属性值(严谨的话还应该让父元素的 margin、padding 等属性值参与计算);
其二,元素自身的宽度;
其三,视口宽度(window.innerWidth)。
依据获取到的上述各值,我们要计算的是元素初始状态下的中心点和浏览器视口中心点的差距,其结果就是元素的偏移量,我们用 transform 属性的 translateX 将其平移即可。以下是 JS 核心函数:
- function setElmCenter (elm) {
- const pa = elm.parentNode; // 获取父元素
- const rect = pa.getBoundingClientRect(); // 获取父元素的矩形数据
- const winCenter = window.innerWidth / 2; // 浏览器视口水平方向中心点
- const offsetX = winCenter - (rect.left + elm.offsetWidth / 2); // 计算偏移量
- elm.style.setProperty('--offsetX', `${offsetX}px`); // 通过CSS变量驱动元素平移
- }
复制代码 【附】元素的CSS变量设计:
- transform: translateX(var(--offsetX));
复制代码 同时需要注意:元素的 position 属性设置为 relative,left 默认(不设置),margin-left 为 0,这样才能配套 JS 的自动居中定位功能。
|
|