工作中遇到垂直居中问题,特此总结了一下几种方式与大家分享。本文讨论的垂直居中仅支持IE8+

 1、使用绝对定位垂直居中

HTML

  1. <div class="container">
  2. <div class="absolute_center">
  3. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias aspernatur dolor dolorem dolores earum eos error harum iusto molestiae perspiciatis possimus quisquam quo, rem rerum sit ullam velit voluptates.
  4. </div>
  5. </div>

CSS

  1. .container{
  2. position: relative;
  3. width: 800px;
  4. height: 800px;
  5. border: 1px solid #000000;
  6. }
  7. .absolute_center{
  8. position:absolute;
  9. width:200px;
  10. height:200px;
  11. top:;
  12. bottom:;
  13. left:;
  14. right:;
  15. margin:auto;
  16. background:#518fca;
  17. resize:both;/*用于设置了所有除overflow为visible的元素*/
  18. overflow:auto;
  19. }

原理:

元素在过度受限情况下,将margin设置为auto,浏览器会重算margin的值,过度受限指的是同时设置top/bottom与height或者left/right与width。

限制:

 使用绝对定位要求元素必须设置明确高度。内容超过元素高度时需要设置overflow决定滚动条的出现

  优点:支持响应式,只有这种方法在resize之后仍然垂直居中

  缺点:没有显式设置overflow时,内容超过元素高度时会溢出,没有滚动条

 2、负marginTop方式

HTML:

  1. <div class="container">
  2. <div class="absolute_center">
  3. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias aspernatur dolor dolorem dolores earum eos error harum iusto molestiae perspiciatis possimus quisquam quo, rem rerum sit ullam velit voluptates.
  4. </div>
  5. </div>

CSS:

  1. .container{
  2. position: relative;
  3. width: 800px;
  4. height: 800px;
  5. border: 1px solid #000000;
  6. }
  7. .absolute_center{
  8. position:absolute;
  9. top:50%;
  10. left:;
  11. right:;
  12. margin:auto;
  13. margin-top:-100px; /*-(height+padding)/2*/
  14. width:200px;
  15. height:200px;
  16. }
  1. 原理:

 已知元素高度后,使用绝对定位将top设为50%,mergin-top设置为内容高度的一半(height + padding)/ 2;内容超过元素高度时需要设置overflow决定滚动条的出现

  top:50%元素上边界位于包含框中点,设置负外边界使得元素垂直中心与包含框中心重合;

  1. 限制:
    已知元素高度

优点:

代码量少、浏览器兼容性高支持ie6 ie7

缺点:

不支持响应式(不能使用百分比、min/max-width)

  1.  

3、借助额外元素floater

  1.  

元素高度已知,在center元素外插入一个额外元素floater,设置floater的height为50%;margin-bottom为center元素高度的一半(height + padding) / 2。内容超过元素高度时需要设置overflow决定滚动条的出现。

  原理与2方法类似,floater的下边界是包含框的中心线,负下外边界保证center的中心线与包含框中心线重合。

HTML

  1. <div class="container">
  2. <div class="floater"></div>
  3. <div class="center floater_center">
  4. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci consequatur consequuntur corporis, cum esse
  5. est et illum inventore ipsa natus nemo nesciunt nihil, odio possimus quibusdam, quod temporibus velit vitae.
  6. </div>
  7. </div>

CSS

  1. .floater{
  2. height:50%;
  3. margin-bottom:-100px;
  4. }
  5. .floater_center{
  6. height:200px;
  7. width:200px;
  8. margin:auto;
  9. }

优点:浏览器兼容性好,支持旧版本ie

缺点:需要额外元素,不支持响应式

  1.  

4、table-cell方式

  将center元素的包含框display设置为table,center元素的display设置为table-cell,vertical-align设置为middle。

  原理:利用表布局特点,vertical-align设置为middle后,单元格中内容中间与所在行中间对齐

HTML

  1. <div class="container2">
  2. <div class="absolute_center table-cell">
  3. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias aspernatur dolor dolorem dolores earum eos error harum iusto molestiae perspiciatis possimus quisquam quo, rem rerum sit ullam velit voluptates.
  4. </div>
  5. </div>

CSS

  1. .container2{
  2. display:table;
  3. height:100%;
  4. }
  5. .table_cell{/*将cell垂直居中,如果外层div不为table则tablecell必须有高度*/
  6. display:table-cell;
  7. vertical-align:middle;
  8. }

优点:

支持任意内容的可变高度、支持响应式

缺点:

每一个需要垂直居中的元素都会需要加上额外标签(需要table、table-cell两个额外元素)

  1.  

5、inline-block方式

  将center元素display设置为inline-block,vertical-align设置为middle,为包含框设置after伪元素,将伪元素display设置为inline-block,vercial-align设置为middle,同时设置height为100%,撑开容器。

  原理:为同一行的inline-block元素设置vertical-align:middle,该行内的inline-block元素会按照元素的垂直中心线对齐。

HTML

  1. <div class="container">
  2. <div class="center inline_block">
  3. Lorem ipsum dolor sit amet, consectetur adipisicing elit. A accusantium eveniet molestias nobis porro
  4. repellendus ut? Distinctio eveniet fuga inventore itaque laudantium non pariatur porro similique. Excepturi
  5. itaque molestias voluptatem!
  6. </div>
  7. </div>

CSS

  1. .container{
  2. display:block;
  3. }
  4. /*inline-block的前世今生*/
  5. .container:after{
  6. content: '';
  7. display: inline-block;
  8. vertical-align: middle;
  9. height: 100%;
  10. }
  11. .inline_block{
  12. display:inline-block;
  13. vertical-align:middle;
  14. }

优点:支持响应式、支持可变高度

缺点:会加上额外标记

6、line-height方式

  该方式只适用于情况比较简单的单行文本,将line-height设置与元素高度同高。

  原理:如果line-height高度大于font-size,生于高度浏览器会平分到文字上下两端。

HTML

  1. <div class="single_line">
  2. 其实我们每个人的生活都是一个世界,即使最平凡的人也要为他生活的那个世界而奋斗。
  3. </div>

CSS

  1. .single_line{
  2. height: 30px;
  3. font-size: 14px;
  4. line-height: 30px;
  5. border: 1px solid #518dca;
  6. }

优点:简单明了

缺点:只适用于单行文本,局限性大

7、弹性盒式布局

  利用弹性盒式布局,将字元素的主轴、侧轴的排列方式都设置为居中对齐

HTML:

  1. <div class="container is-Flexbox">
  2. <div class="center">
  3. <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos facilis impedit, laborum magni
  4. maiores porro sapiente velit. Architecto cum ipsam, laborum magnam non officiis, perferendis quas quo
  5. recusandae sequi, suscipit.
  6. </div>
  7. <div>Accusantium alias animi beatae blanditiis facere quasi totam voluptatem? Consequatur, eveniet expedita
  8. incidunt magnam, natus non nostrum numquam officia praesentium rem voluptatem voluptatibus, voluptatum!
  9. Iusto laudantium nulla quidem repellendus veniam.
  10. </div>
  11. </div>
  12. </div>

CSS:

  1. .is-Flexbox {
  2. display: -webkit-box;
  3. display: -moz-box;
  4. display: -ms-flexbox;
  5. display: -webkit-flex;
  6. display: flex;
  7. -webkit-align-items: center;
  8. align-items: center;
  9. -webkit-justify-content: center;
  10. justify-content: center;
  11. }

 优点:真正的垂直居中布局

css 垂直居中方法总结的更多相关文章

  1. 最常用的css垂直居中方法

    css垂直居中一直以来都是一个被大家说烂了的话题,翻来覆去的炒.不过说实话,正是因为css没有提供标准的垂直居中方法(不过在css3中已经有了相关规范),所以大家才会对它进行专门的研究.这研究来研究去 ...

  2. css垂直居中方法

    CSS垂直居中的简便方法:{position:absolute;left:0;bottom:0;top:0;right:0;margin:auto;}.

  3. css垂直居中方法总结

    在网页布局中,我们往往会遇到下图所示的场景,让小图标和文字对齐 可能有的小伙伴会说,这个简单,直接给小图标设置左浮动来实现. 这样做是可以的,但不推荐,毕竟浮动是会影响布局的,能少用还是少用. 以前遇 ...

  4. css垂直居中方法(四)

    第六种方法,使用css的writing-mode属性,结合margin:auto. 参考文章:改变CSS世界纵横规则的writing-mode属性 传统的web流中,margin设置auto值的时候, ...

  5. css 垂直居中方法汇总

    查看原文可以有更好的排版效果哦 前言 居中是平时工作中的最常见的一种需求,各种图片居中或者各种弹窗,水平居中还好,特别是垂直居中,很多初学者表示太难写了,现在列举一些常用的方法. 实战 这里只讲述cs ...

  6. css垂直居中方法盘点

    1.单行文字垂直居中 利用 line-height 即可轻松实现,如下示例: height:45px;line-height:45px; 2.多行文本固定高度垂直居中1 利用 display:tabl ...

  7. [css] 垂直居中方法

    原文链接:http://www.cnblogs.com/2050/p/3392803.html 一.text-algin:center; 适用于行内元素水平居中,如图片.按钮.文字, 但是在IE67下 ...

  8. css垂直居中方法(二)

    第四种方法: 这个方法把一些div的显示方式设置为表格,因此我们可以使用表格的vartial-align属性. 代码如下: <!doctype html> <html lang=&q ...

  9. css垂直居中方法(一)

    第一种方法:首先用margin:0 auto实现水平居中,然后设置position:relative,设置top为50%(父元素高度的50%),然后设置margin-top:-150px(设置负值是因 ...

随机推荐

  1. 51nod——T1103 N的倍数

    题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. ...

  2. iOS UIToolBar的使用

    UIToolBar存在于UINavigationController导航栏控制器中.并且默认被隐藏. 当设置UIToolBar显示,或者存在UITabBarController且tabbar被隐藏的时 ...

  3. POJ 3608

    1.计算P上y坐标值最小的顶点(称为 yminP )和Q上y坐标值最大的顶点(称为 ymaxQ). 2.为多边形在 yminP 和 ymaxQ 处构造两条切线 LP 和 LQ 使得他们对应的多边形位于 ...

  4. 4443: [Scoi2015]小秃玩矩阵|二分答案|匈牙利

    第K大看成第K小各种WA. .. 第K大也就是第n−K+1小.所以就能够愉快的二分答案了 二分答案找出比当前答案小的数的位置的坐标.推断一下能否够选出满足不在同一行同一列的n−K+1个数,然后就能够愉 ...

  5. Linux 服务具体解释

    acpid ACPI(全 称 Advanced Configuration and Power Interface)服务是电源管理接口. 建议全部的笔记本用户开启它. 一些server可能不须要 ac ...

  6. Qt5.8 提供 Apple tvOS,watchOS的技术预览版

    New Platforms Apple tvOS (technology preview) Apple watchOS (technology preview) https://wiki.qt.io/ ...

  7. bootstrap模态框通过传值解决重复提交问题

    自己通过模态框确认是否提交的功能时,总是重复提价上次的请求. 原因:重复的原因是jquery通过id绑定了确定按钮的onclick事件,所以每次提交都会增加 一次绑定(没有清除上次的绑定),才造成了重 ...

  8. docker overlay网络实现

    DOCKER的内置OVERLAY网络 内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan.Pipework ...

  9. linux 标准输出和后台运行

    一.后台运行程序 至需要在命令后面加上一个 & 即可 # command & 例如: python test.py & 二.标准输出.标准错误输出 # command > ...

  10. VUE 基础语法

    <script> //构造器 new Vue({ el: "#apps", data: { MSG: 'THIS IS A TEST Pages', h2test: ' ...