我们平时常用的定高,top:50%;left:50%和margin-left负一半宽度margin-top负一半高度的居中方式暂不考虑,因为这种方式大家都会。

第一种绝对定位(absolute centering)居中:

<div class="abs-center"></div>
.abs-center{ height: 50%; width: 50%; background: red; margin: auto; position: absolute; left: 0; top: 0; right: 0; bottom: 0; }

原理:

在普通内容流(normal content flow)中,margin:auto的效果等同于margin-top:0;margin-bottom:0。

position:absolute使绝对定位块跳出了内容流,内容流中的其余部分渲染时绝对定位部分不进行渲染。

为块区域设置top: 0; left: 0; bottom: 0; right: 0;将给浏览器重新分配一个边界框,此时该块block将填充其父元素的所有可用空间,父元素一般为body或者声明为position:relative;的容器。

由于内容块被绝对定位,脱离了正常的内容流,浏览器会给margin-top,margin-bottom相同的值,使元素块在先前定义的边界内居中。

这么看来, margin:auto似乎生来就是为绝对居中(Absolute Centering)设计的,所以绝对居中(Absolute Centering)应该都兼容符合标准的现代浏览器。

优点:

1、支持跨浏览器,包括IE8以上,Chrome,Firefox, Safari, Mobile Safari;
2、无需其他特殊标记,CSS代码量少;
3、支持百分比%属性值和min-/max-属性
4、不论是否设置padding都可居中(在不使用box-sizing属性的前提下)
5、完美支持图片居中

缺点:

1、必须声明高度
2、在Windows Phone设备上不起作用

第二种方法table-cell居中

<div class="is-table">
<div class="table-cell">
<div class="center-block">
<!-- content -->
</div>
</div>
</div>
 .is-table{ display: table; background: grey; position: absolute; width: 100%; height: 100%; }
.is-table .table-cell{ display: table-cell; vertical-align: middle; background: blue; }
.is-table .center-block{ width: 50%; margin: 0 auto; background: red; }

优点:

1、不定高度
2、内容溢出会将父元素撑开
3、跨浏览器兼容性好

缺点:

1、需要大量额外的标记
2、ie7以下不支持

第三种方法transform

<div class="box"></div>
 .box{width: 50%;
height: 400px;
background: red;
margin: auto;
position: absolute;
top: 50%; left: 50%;
-webkit-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
}

优点:

1、内容可变高度
2、代码量少

缺点:

1、IE8不支持
2、属性需要写浏览器厂商前缀
3、可能干扰其他transform效果
4、某些情形下会出现文本或元素边界渲染模糊的现象

第四种方法inline-block

<div class="inline-block">
<div class="center-block">
<p>inline-block这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容</p>
</div>
</div>
*{margin: 0; padding: 0; }
.inline-block{
text-align: center;
overflow: auto;
height: 100%;
width: 100%;
position: absolute;
left: 0;
top: 0;
}
.inline-block:after{
content: '';
height: 100%;
margin-left: -0.25em;
}
.inline-block:after, .center-block{
display: inline-block;
vertical-align: middle;
}
.center-block{
max-width: 99%;
width: 500px; /*自定宽度*/
/* Prevents issues with long content causes the content block to be pushed to the top */
/* max-width: calc(100% - 0.25em) Only for IE9+ */
}

优点:

1、内容可变高度
2、内容溢出会将父元素撑开。

缺点:

1、IE7以下不支持
2、水平居中依赖于margin-left: -0.25em;该尺寸对于不同的字体/字号需要调整
3、内容块宽度不能超过容器的100% - 0.25em。

第五种方法display: flex:

<div class="box">
<!-- content -->
</div>
 html{height: 100%;}
body{
display: -webkit-box; /* OLD: Safari, iOS, Android browser, older WebKit browsers. */
display: -moz-box; /* OLD: Firefox (buggy) */
display: -ms-flexbox; /* MID: IE 10 */
display: -webkit-flex; /* NEW, Chrome 21–28, Safari 6.1+ */
display: flex; /* NEW: IE11, Chrome 29+, Opera 12.1+, Firefox 22+ */ -webkit-box-align: center; -moz-box-align: center; /* OLD… */
-ms-flex-align: center; /* You know the drill now… */
-webkit-align-items: center;
align-items: center; -webkit-box-pack: center; -moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center; margin:;
height: 100%;
width: 100%; /*needed for Firefox */
}
.box{
display: -webkit-box; display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex; -webkit-box-align: center; -moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
height: 10rem;
}

优点:

1、内容块的宽高任意,优雅的溢出。
2、可用于更复杂高级的布局技术中。

缺点:

1、IE9以下不支持。
2、Body需要特定的CSS样式。
3、运行于现代浏览器上的代码需要浏览器厂商前缀。
4、表现上可能会有一些问题

div水平垂直居中的更多相关文章

  1. 如何让div水平垂直居中

    引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...

  2. 文字以及div水平垂直居中

    文字以及div水平垂直居中.md <div class=”content”> <div class=”mydiv”> huangyingnin! </div>< ...

  3. 【笔记】让DIV水平垂直居中的两种方法

    今天写的了百度前端学院春季班的任务:定位和居中问题  由于距离上次学习CSS有点久远了,加上以前木有记笔记的习惯,方法忘得只剩下一种,今天通过网上查阅资料总结了以下两种简单的方法让DIV水平垂直居中. ...

  4. DIV水平垂直居中的CSS兼容写法

    DIV水平垂直居中,非IE浏览器可以用CSS3来处理,IE浏览器中分别处理IE6和/IE7.IE8.IE9. 在IE低版本中,虽然大致上没有问题,但还是有一些细微的显示问题. 示例如下: <!D ...

  5. Div水平垂直居中的三种方法

    百度了很多种方法,很多是不起作用的.下面这些方法是我亲自试过的.希望对大家有帮助! 下面是一波代码水军. <!DOCTYPE html> <html lang="en&qu ...

  6. scss : div水平垂直居中

    scss 是一个很好用的css预处理语言,有很多很好的特性. 比如 mixin. 我们可以像使用函数那样使用mixin. 比如写一个div水平垂直居中. 上代码. @mixin absolute_ce ...

  7. 【最全】CSS盒子(div)水平垂直居中居然还有这种方式

    最全的CSS盒子(div)水平垂直居中布局,对CSS 布局掌握程度决定你在 Web 开发中的开发页面速度. 相对于屏幕 方法一:利用定位 <div class="box"&g ...

  8. 【html】【10】div布局[div水平垂直居中]

    必看参考: http://www.jb51.net/css/28259.html 让div居中对齐缩写形式为: .style{margin:0 auto;} 数字0 表示上下边距是0.可以按照需要设置 ...

  9. 未知宽高div水平垂直居中3种方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...

  10. 如何将一个div水平垂直居中?4种方法做推荐

    方案一: div绝对定位水平垂直居中[margin:auto实现绝对定位元素的居中], 兼容性:,IE7及之前版本不支持 div{ width: 200px; height: 200px; backg ...

随机推荐

  1. 使用C#开发计划任务调度服务

    在系统运维中常常需要定期去跑一些计划任务,比如扫描服务器监控其性能.检查SQL Server作业是否正常.监控MQ队列是否存在堵塞现象等.如果使用Windows计划任务调度,一来管理起来就比较松散,二 ...

  2. CSSText属性批量修改样式

      给一个HTML元素设置css属性 var head= document.getElementById("head");head.style.width = "200p ...

  3. jsonp与JAVA的配合使用

    一.客户端 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...

  4. sublimetext 3 set

    from https://segmentfault.com/a/1190000002596724{ "font_size": 21, "highlight_line&qu ...

  5. oracle的over函数应用(转载)

    摘自: http://www.poluoluo.com/jzxy/201004/81921.html 百度文库也记载了Oracle中over()分析函数的用法 在泡坛子的时候中无意中发现了这个函数,才 ...

  6. python中的内存管理

    不像大多数编译型语言,变量必须在使用之前声明名字和类型,在python中,变量在第一次被赋值时自动声明.在变量创建时,python解释器会根据语法和右侧的操作数来决定新对象的类型,在对象创建后,一个该 ...

  7. C语言编程技巧-signal(信号)[转]

    自 http://www.uml.org.cn/c++/200812083.asp 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用 ...

  8. Kafka安装

    一.下载kafka: http://kafka.apache.org/downloads 二.解压 tar -zxvf kafka_2.10-0.10.0.1.tgz 三.kafka需要用到zooke ...

  9. Oracle 创建dblink

    创建dblink语法: create database link link名称 connect to 对方数据库用户名 identified by 对方数据库用户密码  using '对方数据库ip: ...

  10. window7下karma 报 nodejs request TypeError: The header content contains invalid characters BUG

    这个BUG 估计只有中国人才 遇到 打开你的依赖node_modules\karma\node_modules\connect\lib\patch.js 将里面的setHeader方法改成下面这样,干 ...