一、CSS的position属性
position属性是CSS中常用的属性之一,可以设定元素的定位方式。其中,fixed的定位相当于是绝对定位,但是相对于整个页面进行定位。因此,可以通过设置fixed的left和top属性来使元素居中。
position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);
上述代码中,通过设置left和top属性为50%来让元素水平垂直居中,但是此时元素的左上角并不处于页面的中心位置,因此还需要使用transform属性进行调整。其中,translate(-50%, -50%)表示将元素向左向上移动自身宽高的50%,使其处于中心位置。
二、CSS3的flex属性
CSS3引入了flex布局,是一种非常强大的布局方式,也可以轻松实现fixed居中。首先需要在父元素上增加display:flex属性,然后通过align-items和justify-content两个属性将元素居中。
.container { display: flex; align-items: center; justify-content: center; }
上述代码中,display:flex表示将元素设置为flex布局,align-items:center和justify-content:center表示将元素垂直和水平居中。
三、CSS3的grid属性
CSS3还引入了grid布局,也可以用于实现fixed居中。首先需要在父元素上增加display:grid属性,然后使用justify-items和align-items两个属性将元素居中。
.container { display: grid; justify-items: center; align-items: center; }
上述代码中,display:grid表示将元素设置为grid布局,justify-items:center和align-items:center表示将元素垂直和水平居中。
四、JavaScript的计算方法
如果不想使用CSS的属性,还可以通过JavaScript的方法来计算元素的位置。首先通过getElementById()方法获取元素的DOM节点,然后通过获取浏览器窗口的宽高以及元素本身的宽高,计算出元素应该处于页面中心的left和top属性,并将其应用到元素上。
var element = document.getElementById("fixed-element"); var windowWidth = window.innerWidth; var windowHeight = window.innerHeight; var elementWidth = element.offsetWidth; var elementHeight = element.offsetHeight; element.style.left = (windowWidth - elementWidth) / 2 + "px"; element.style.top = (windowHeight - elementHeight) / 2 + "px";
上述代码中,先通过getElementById()方法获取id为fixed-element的元素,然后分别获取浏览器窗口的宽高和元素本身的宽高,并使用计算公式将元素居中。
五、综合应用
以上几种方法各有特点,可以根据具体的需求选择不同的方法。同时,也可以综合多种方法达到更好的效果,如下所示:
.container { display: flex; align-items: center; justify-content: center; position: fixed; left: 0; top: 0; right: 0; bottom: 0; } .container ::after { content: ""; display: inline-block; height: 100%; vertical-align: middle; margin-left: -0.25em; } .fixed-element { display: inline-block; vertical-align: middle; }
上述代码中,先用flex布局将容器居中,然后使用伪元素创建一个空白元素,将其垂直对齐到中心位置,并将fixed-element元素垂直居中对齐到该空白元素。