您的位置:

如何实现fixed居中

一、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元素垂直居中对齐到该空白元素。