bootstrap 垂直居中 布局_如何让一个元素水平垂直居中

d64d61a2d79bf49089dd42cff1c1942b.png

我们这里分为两种形式,一种是定元素宽高的情况下,另一种是不定元素宽高的情况下。

定元素宽高的情况下

a.绝对定位 + 负margin

利用绝对定位absolute和margin完成元素居中,具体例子如下:

e3ebcb81343ec7712b830b33d644c1d1.png

给父元素添加相对定位,子元素添加绝对定位,利用margin负子元素宽高的一半,实现元素的居中,这种方法不常用,

  • 优点:好理解,兼容性好
  • 缺点:必需给定子元素的宽高

b.绝对定位+margin:auto

利用absolute绝对定位和margin:auto自动居中方法完成元素的居中,例子如下:

df95347d9b053b888bf55ac38922d325.png

与上例子一样给父元素加相对定位,子元素添加绝对定位,在设置元素的左、右、上、下位置为零,再利用自动居中对齐的方法margin:auto,完成元素的垂直水平居中,这种方法常用

  • 优点:简单易懂,兼容性好
  • 缺点:代码量大,占内存

c.table-cell

利用css的table属性,完成元素的垂直居中,margin完成元素的水平居中,例子如下

263ff12bd3bec01a7b56a46674d19c5f.png

设置父元素的元素类型为table-cell类型,设置表格的垂直对齐方式为居中,再给子元素添加margin:0 auto 完成元素的垂直水平居中,这种方法不常用,

  • 优点:兼容性好
  • 缺点:出来的太早,现在都不流行用了

d.translate

利用2d位移来完成元素的居中,例子如下:

47e9a931ee04636f265244ce028e31da.png

只需操作子元素,给子元素添加transform属性,利用2d位移translate,分别向左向右移动父元素宽高度减自身宽高度的一半,完成元素的垂直水平对齐,这种方法不常用,

  • 优点:代码简单
  • 缺点:我们必须给定子元素的宽和高,否则无法完成元素居中

不定元素宽高的情况下

line-heght

给元素设置line-heght,也就是行高,完成元素的居中,具体例子如下:

4534419c86de4d1e2b28f268af2e026d.png

我们给子元素设置行高,完成元素的垂直居中,再然后利用文本水平对齐方式text-align方法,完成水平居中,这中方法是最简单的,也是我们经常用的

  • 优点:写起来简单,兼容性好
  • 缺点:只适合单行文本的居中,多行文本不支持

b.绝对定位加translate

之前我们说过一个利用translate完成元素垂直水平的,这里就是在那种方法上的进一步改进,也就是可以,不用设置宽高,也能实现元素的垂直水平居中,用translate加绝对定位完成元素的居中,例子如下:

c478bc9d5605a50f4d68c8ebd6ec5a2c.png

在这里,还有不同就是,我们translate里面可以直接用百分比完成位移,从而实现元素的垂直水平居中,这种方法常用(但是我不常用)

  • 优点:代码简单,兼容性好
  • 缺点:无

c.flex

flex形成弹性盒,我们利用弹性盒可以做很多事情,其中最主要的还是布局,当然这里我们就不详细说了,我们来谈谈如何使一个元素垂直水平居中,例子如下:

f8a8c32ea2152978fa4a454c6abcaa9b.png

我们让父元素形成弹性盒子,再然后设置主轴对齐方式为居中对齐,侧轴对齐方式为居中对齐从而完成元素的垂直水平居中,这种方法经常用,

  • 优点:代码简单易懂
  • 缺点:PC端兼容性不好

d.flex+margin:auto

这种方法与上面那种不同的是,这里没用到弹性盒子里面的属性,而是用margin直接完成元素的居中对齐,例子如下:

7285c0e763b31f05149198f96c55b729.png

让父元素形成弹性盒子,再然后给子元素添加margin:auto,完成元素的垂直水平居中,这种方法也常用,

  • 优点:代码简单
  • 缺点:无

e.grid

grid网格布局,通过grid属性完成元素的居中对齐,例子如下:

d21c0956ede0bc2faa7e530fae6dcee0.png

让父元素形成网格布局,给子元素添加水平、垂直对齐方式为居中,从而完成元素的垂直水平居中,这种方法不常用

  • 优点:代码简单
  • 缺点:兼容性不好

总结

以上介绍有八种方式,比较常用的三种方法:

  • line-height 不是块级元素的情况下,使用它还是比较简单的
  • 绝对定位+负margin 兼容性好
  • flex 如果你不考虑兼容的情况下,建议使用它,灵活

版权声明:本文为weixin_35604021原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。