css实现div的水平和垂直居中

来源:互联网 发布:spark教程python版本 编辑:程序博客网 时间:2024/05/20 03:43

方案一:

div绝对定位水平垂直居中【margin:auto实现绝对定位元素的居中】,

代码两个关键点:1.上下左右均0位置定位;

        2.margin: auto; 其width、height如何更改都是居中显示的,兼容性可以,IE7及之前版本不支持

.div1{    width: 100px;    height: 100px;    border: 4px solid red;    position: absolute;    text-align: center;    left:0;    right:0;    top: 0;    bottom: 0;    margin: auto;}

优点:

1.支持跨浏览器,包括IE8-IE10.

2.无需其他特殊标记,CSS代码量少

3.支持百分比%属性值和min-/max-属性

4.只用这一个类可实现任何内容块居中

5.不论是否设置padding都可居中(在不使用box-sizing属性的前提下)

6.内容块可以被重绘。

7.完美支持图片居中。

缺点:

1.必须声明高度(查看可变高度Variable Height)。

2.建议设置overflow:auto来防止内容越界溢出。(查看溢出Overflow)。

3.在Windows Phone设备上不起作用。

浏览器兼容性:

Chrome,Firefox, Safari, Mobile Safari, IE8-10.

绝对定位方法在最新版的Chrome,Firefox, Safari, Mobile Safari, IE8-10.上均测试通过。

方案二:(margin负间距设置)

div绝对定位水平垂直居中【margin 负间距】

此方案代码关键点:1.必需知道该div的宽度和高度,

                2.然后设置位置为绝对位置,

           3.距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的宽度和高度的50%,

         4.最后将该div分别左移和上移,左移和上移的大小就是该DIV宽度和高度的一半。

.div1{    width: 100px;    height: 100px;    border: 4px solid red;    position: absolute;    text-align: center;    left:50%;    top: 50%;    margin: -50px 0 0 -50px;    /*50%为自身尺寸的一半*/}

测试表明,这是唯一在IE6-IE7上也表现良好的方法。

优点:

1.      良好的跨浏览器特性,兼容IE6-IE7。

2.      代码量少。

缺点:

1.      不能自适应。不支持百分比尺寸和min-/max-属性设置。

2.      内容可能溢出容器。

3.      边距大小与padding,和是否定义box-sizing: border-box有关,计算需要根据不同情况。

方案三:(经典/个人推荐)

div绝对定位水平垂直居中【Transforms 变形】

这是最简单的方法,不近能实现绝对居中同样的效果,也支持联合可变高度方式使用。内容块定义transform: translate(-50%,-50%)  必须加上

top: 50%; left: 50%;

.div1{    width: 200px;    height: 200px;    background-color: pink;    position: absolute;    text-align: center;    left:50%;    top: 50%;    /*-webkit-transform: translate(-50%,-50%);*/    /*-ms-transform: translate(-50%,-50%);*/    transform: translate(-50%,-50%);}

优点:

1.      内容可变高度

2.      代码量少

缺点:

1.      IE8不支持

2.      属性需要写浏览器厂商前缀

3.      可能干扰其他transform效果

4.      某些情形下会出现文本或元素边界渲染模糊的现象

方案四:(css3 的 display:flex)

在父元素设置如下,即可实现子元素水平垂直居中:

{    justify-content:center;   /*子元素水平居中*/ align-items:center; /*子元素垂直居中*/ display:-webkit-flex; display:flex; /弹性布局/}
或者
{  /*父容器*/   display:flex;   display:-webkit-flex;}{  /*子元素*/   margin:auto auto;}
优点:
1.      在未知div宽高时,用这种方法比较方便
2.      代码量少
3.      在移动端表现的比较兼容
缺点:
1.      flex布局在pc端浏览器中兼容性不是特别好,尤其是IE

2 0
原创粉丝点击