使一个div垂直+水平居中

来源:互联网 发布:origin改host软件 编辑:程序博客网 时间:2024/05/16 04:36

使一个div垂直+水平居中的几种方法

一:绝对定位居中(原始版)

 

设外层div相对定位,内层div绝对定位,top、left分别设为50%,然后通过设置margin-top、margin-left值为宽度的负数就可以成功实现垂直水平居中了:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

<style type="text/css">

*{margin: 0;padding:0;}

.outer{

width: 80%;

height: 400px;

background: #ccc;

margin: 0 auto;

position: relative;

}

.inner{

width: 400px;

height: 300px;

background: green;

position: absolute;

top: 50%;left: 50%;

margin-top: -150px;/*设为高度的1/2*/

margin-left: -200px;/*设为宽度的1/2*/

}

</style>

</head>

<body>

    <div class="outer">

        <div class="inner"></div>

    </div>

</body>

</html>

 

这个经典的方法最大的不足之处是inner的宽度必须是固定值,否则margin-top和margin-left的值将无法设置

思路2:绝对定位居中(改进版之一)

我们的目的是让inner在top和left方向发生50%偏移之后,再往回偏移一定距离,而css里关于位置偏移的属性还有什么呢?当我们查阅最新版的css3属性之后,发现这样一个属性:selector{transform:translate();},translate代表着水平、垂直方向上的转换(位移),其中当括号内的值设为百分比时,将以元素自身宽度为基准,移位相应的宽度,这样一来,我们的问题就得到了解决:

<style type="text/css">

*{margin: 0;padding:0;}

.outer{

width: 80%;

height: 400px;

background: #ccc;

margin: 0 auto;

position: relative;

}

.inner{

width: 70%;

height: 300px;

background: green;

position: absolute;

top: 50%;left: 50%;

transform: translate(-50%,-50%);/*在水平和垂直方向上各偏移-50%*/

}

</style>

 

<body>

    <div class="outer">

        <div class="inner"></div>

    </div>

</body>

这个方法妥善解决了内层div宽度不确定的问题,但由于使用了css3的新属性,在低版本ie浏览器下是不兼容的。

思路3:绝对定位居中(改进版之二)

<style type="text/css">

*{margin: 0;padding:0;}

.outer{

width: 80%;

height: 400px;

background: #ccc;

margin: 0 auto;

position: relative;

}

.inner{

width:70%;

height: 300px;

background: green;

position: absolute;

top: 0;left:0;right:0;bottom:0;/*让四个定位属性都为0*/

margin:auto;/*很关键的一步*/

}

</style>

这个方法,不仅能在inner宽度不确定时发挥作用,还能兼容各种主流浏览器,看上去似乎很完美,但事实上,当我们的需求改为:宽度随内部文字自适应 ,即宽度未设置时,这种方法就无法满足需求了,原因是left、right设为0后,inner在宽度未设置时将占满父元素的宽度。

思路4:flex布局居中

flex布局是移动端一种很新潮的布局方法,利用flex布局使元素垂直水平居中,缺点依然是令人头疼的兼容性问题(在ie11-中不起作用),优点是代码量比前几种方法相比略少,方便使用。

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

<style type="text/css">

*{margin: 0;padding:0;}

.outer{width: 80%;height: 400px;background: #ccc;margin:0 auto;

display: flex;/*设置外层盒子display为flex*/

justify-content:center;/*设置内层盒子的水平居中*/

align-items:center;/*设置内层盒子的垂直居中*/

}

.inner{display: inline-block;height: 300px;background: yellow;}

</style>

</head>

<body>

    <div class="outer">

        <div class="inner">这是一段文字这是一段文字这是一段文字</div>

    </div>

</body>

</html>

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苏宁退货不成功怎么办 任性付冻结了怎么办 任性贷风险提示怎么办 保修发票没了怎么办 家电发票丢了怎么办 天猫苏宁发票丢了怎么办 本子密码忘记了怎么办 直属领导抢客户怎么办 老板油烟机坏了怎么办 闲鱼上买洗衣机自提怎么办 水龙头水流太小怎么办 水龙头压力太小怎么办 浴室水龙头水小怎么办 冰箱出水口堵了怎么办 水龙头出水太小怎么办 买东西让骗了怎么办 医疗保险中断5年怎么办 医保断交5年怎么办 医保社保断了怎么办 医保没交够25年怎么办 医保卡外借 保险怎么办 安装系统时断电怎么办 电视不带wifi怎么办 苹果手机呼叫失败怎么办 苹果8呼叫失败怎么办 微信被朋友拉黑怎么办 手机骚扰电话太多怎么办 骚扰电话太多了怎么办 总是接到骚扰电话怎么办 老有骚扰电话怎么办 一直被电话轰炸怎么办 有线电视突然出来雪花怎么办 电视出雪花了怎么办 长虹电视有雪花怎么办 网络电视雪花了怎么办 夏普电视雪花屏怎么办 有线电视显示无信号怎么办 门铃对讲机坏了怎么办 蝴蝶兰叶子晒伤怎么办 杜鹃花浇水多了怎么办 杜鹃花施肥多了怎么办