前言:

在写CSS的时候让元素在高度固定的容器中垂直居中是很简单的,譬如设置容器的padding或者元素的margin之类的都可以做到;让元素在容器中水平居中也有text-align:center、margin:0 auto;之类的属性来帮我们达到目的,但是如何让元素在不确定高度的容器中垂直居中或者行数不确定的文字在高度固定的容器垂直居中呢?下面我们来讨论几种让元素垂直居中的方法:

一、文字的垂直居中

1、单行文字

line-height与height高度相同,就可以让单行文字垂直居中

2、多行文字

我们可以把多行的文字当做图片来处理,用span将文字封装起来,并设置与图片相同的display属性(inline-block),然后用处理图片垂直居中的方式让多行文字垂直居中即可。

<div class="wrap">
<span class="content">
content<br>
content
</span>
</div>
 .wrap {
width: 200px;
height: 200px;
line-height: 200px;
background-color: #36AF77;
}
.content {
display: inline-block;
vertical-align: middle;
line-height: 15px;
font-size: 14px;
}

运行结果:

二、图片的垂直居中

1、通过vertical-align和line-height来实现垂直居中

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 .wrap {
width: 200px;
height: 200px;
line-height: 200px;
font-size:;
background-color: #36AF77;
}
img {
vertical-align: middle;
}

运行结果:

2、通过100%高度的span进行垂直居中

<div class="wrap">
<img src="E:/picture/me.jpg" alt=""><span></span>
</div
 .wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
}
img {
vertical-align: middle;
}
span {
display:inline-block;
height: 100%;
vertical-align: middle;
}

运行结果:

这里的img与一个height:100% 的span同行,使这一行的行高撑满div。

3、背景图定位的方法

<div class="wrap">
</div>
 .wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
background-image: url("E:/picture/me.jpg");
background-position: center;
background-size: 60%;
background-repeat: no-repeat;
}

运行结果:

这里将图片作为容器的背景,通过background-position属性让它居中。

4、通过table-cell来实现垂直居中

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 .wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
display: table-cell;
font-size:;
vertical-align: middle;
}

运行结果:

W3C上对vertical-align的定义:vertical-align 属性设置元素的垂直对齐方式。

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。

在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。

5、利用flex弹性布局实现垂直居中

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 img {
width: 88px;
height: 88px;
}
.wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
display: flex;
justify-content: center;
align-items: center;
}

运行结果:

可惜IE10之前的版本是不支持的,大家自行尝试

6、利用after伪类

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 img {
width: 88px;
height: 88px;
}
.wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
}
.wrap:after {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
img {
vertical-align: middle;
}

运行结果:

这种方式和第二种类似,只是用after伪类生成的元素代替了span元素而已。

7、在已知图片高度的情况下借助额外的块级元素

<div class="wrap">
<div class="temp"></div>
<img src="E:/picture/me.jpg" alt="">
</div
  img {
width: 88px;
height: 88px;
}
.wrap {
width: 200px;
height: 200px;
background-color: #36AF77;
}
.temp {
height: 50%;
margin-bottom: -44px;
opacity:;
}

运行结果:

opacity:0  //透明不显示但是占位

8、在已知图片高度的情况下借助margin-top负边距

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 img {
width: 88px;
height: 88px;
}
.wrap {
position: relative;
width: 200px;
height: 200px;
background-color: #36AF77;
}
img {
position:absolute;
top: 50%;
left:;
right:;
margin:auto;
margin-top: -44px;
}

运行结果:

9、借助绝对定位

<div class="wrap">
<img src="E:/picture/me.jpg" alt="">
</div>
 .wrap {
position: relative;
width: 200px;
height: 200px;
background-color: #36AF77;
}
img {
position:absolute;
top:;
bottom:;
left:;
right:;
margin:auto;
}

运行结果:

10、主角最后登场----万能的居中方式(绝对定位加transform)

<div class="wrap">
<img class="center" src="E:/picture/me.jpg" alt="">
</div>
<div class="wrap">
<img class="vertical-center" src="E:/picture/me.jpg" alt="">
</div>
<div class="wrap">
<img class="horizon-center" src="E:/picture/me.jpg" alt="">
</div>
 .center {
left: 50%;
top: 50%;
position: absolute;
-webkit-transform: translate3D(-50%,-50%,0);
-ms-transform: translate3D(-50%,-50%,0);
-moz-transform: translate3D(-50%,-50%,0);
-o-transform: translate3D(-50%,-50%,0);
transform: translate3D(-50%,-50%,0);
z-index:;
}
.vertical-center {
top: 50%;
position: absolute;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
z-index:;
}
.horizon-center {
left: 50%;
position: absolute;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
-moz-transform: translateX(-50%);
-o-transform: translateX(-50%);
transform: translateX(-50%);
z-index:;
}
.wrap {
position: relative;
width: 200px;
height: 200px;
margin-bottom: 10px;
background-color: #36AF77;
}

运行结果:

通过绝对定位到50%的位置,再转换自己高度宽度50%的负距离来实现居中显示。

然而万能的方法并不万能,transform在IE9及其以下是不支持的,大家节哀。

关于水平居中文字可以用text-align:center,块级元素可以用margin: 0 auto;之类的实现,比较简单就不多说了。

简单介绍了10种图片的的居中方法,有没有觉得有所感悟,妈妈再也不用担心我不会元素居中了。

以上

Css实现元素的垂直居中的更多相关文章

  1. CSS实现元素水平垂直居中—喜欢对称美,这病没得治

    [TOC] 在CSS中对元素进行水平居中是非常简单的:如果它是一个行内元素,就对它的父元素应用text-align:center;如果它是一个块级元素,就对它自身应用margin:auto.然而要对一 ...

  2. css中元素水平垂直居中4种方法介绍

    table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对blo ...

  3. css 实现元素水平垂直居中总结5中方法

    个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 <div id="divAu ...

  4. CSS实现元素水平垂直居中

    我们知道,实现元素的水平居中比较简单,在设置了宽度后,设置左右margin为auto就可以. 但是如何设置元素垂直居中呢? 当然,对于单行的文字,可以通过设置line-height来解决, 可以对于一 ...

  5. css:元素水平垂直居中的多种方式

    CSS元素(文本.图片)水平垂直居中方法   1.text-align:center; 2.margin:0 auto; 3.display:inline-block; + text-align:ce ...

  6. CSS实现元素水平/垂直居中的方法

    首先,我们来了解水平居中,它有很多种方法,我们暂时先来了解其中的几种: 1.    在实现方案中,我们最熟悉的莫过于给元素定义一个宽度,然后使用margin: 1 2 3 4 body{     wi ...

  7. css控制元素 水平垂直居中

    控制元素居中核心代码为 position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; css: /* 容器 */ .w ...

  8. css 使元素居中

    css使元素水平居中 1.对于行内元素的水平居中 给父元素设置text-align:center <div style="text-align:center;">居中显 ...

  9. css知识笔记:垂直居中(别只看,请实操!!!)

    css实现元素的垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...

随机推荐

  1. Dubbo服务超时

    服务消费者引用服务提供者的服务时可能由于网络原因导致长时间未返回相应,此时大量的线程将会阻塞,引起性能下降等问题.可以通过引入服务超时来解决该问题 服务超时指服务在给定的时间内未返回相应将立即终止该请 ...

  2. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结

    转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MAR ...

  3. nodejs的 new String

    已知rwo4的记录中baitaiid是001// row4为jhlist开始循环结果 for(var i=0;i<row4.length;i++) { var baiTaiId=new Stri ...

  4. saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3

    saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...

  5. Day6------------复习

    文件归档:tar cvf test.tar 文件压缩:gzip 目标文件 bzip2 test,tar 文件解压:gunzip test.tar.gz bzip2 test.tar.bz2 文件打包压 ...

  6. JQ初学总结一

    Jquery是最火的JavaScript库,大部分web开发都会用到就jquery,而作为初学者看了一些jq的用法总结自己的学习以增强自己的认知. 普通的javascript的缺点是:每种控件的操作方 ...

  7. PYTHON-流程控制之if/while/for

    内容: 流程控制: 1. if 2. while 3. for ==================================流程控制之if判断 1 什么是if判断 判断一个条件如果成立则做.. ...

  8. PYTHON-匿名函数,递归与二分法,面向过程编程-练习

    # 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

  9. as无法在vivo上安装程序解决

    1. vivo手机真的很麻烦,首先要确定vivo账号密码,允许安装后还一直失败.记录下解决方案 在工程目录的gradle.properties中添加android.injected.testOnly ...

  10. oracle中REGEXP_SUBSTR方法的使用

    近期在做商旅机票平台,遇到这样一个问题: 有一张tt_ticket表,用来存机票信息.里边有一个字段叫schedule,表示的是行程,存储格式为:北京/虹桥 由于公司位于上海.而上海眼下有两个机场:浦 ...