Css实现元素的垂直居中
前言:
在写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实现元素的垂直居中的更多相关文章
- CSS实现元素水平垂直居中—喜欢对称美,这病没得治
[TOC] 在CSS中对元素进行水平居中是非常简单的:如果它是一个行内元素,就对它的父元素应用text-align:center;如果它是一个块级元素,就对它自身应用margin:auto.然而要对一 ...
- css中元素水平垂直居中4种方法介绍
table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对blo ...
- css 实现元素水平垂直居中总结5中方法
个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 <div id="divAu ...
- CSS实现元素水平垂直居中
我们知道,实现元素的水平居中比较简单,在设置了宽度后,设置左右margin为auto就可以. 但是如何设置元素垂直居中呢? 当然,对于单行的文字,可以通过设置line-height来解决, 可以对于一 ...
- css:元素水平垂直居中的多种方式
CSS元素(文本.图片)水平垂直居中方法 1.text-align:center; 2.margin:0 auto; 3.display:inline-block; + text-align:ce ...
- CSS实现元素水平/垂直居中的方法
首先,我们来了解水平居中,它有很多种方法,我们暂时先来了解其中的几种: 1. 在实现方案中,我们最熟悉的莫过于给元素定义一个宽度,然后使用margin: 1 2 3 4 body{ wi ...
- css控制元素 水平垂直居中
控制元素居中核心代码为 position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; css: /* 容器 */ .w ...
- css 使元素居中
css使元素水平居中 1.对于行内元素的水平居中 给父元素设置text-align:center <div style="text-align:center;">居中显 ...
- css知识笔记:垂直居中(别只看,请实操!!!)
css实现元素的垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...
随机推荐
- Levmar 配置
Levmar配置 原文有些错误,在我的博客里已经改好了:http://blog.sina.com.cn/s/blog_45b747f70101he1t.html 如果6或者7自由度机器人的运动学逆解无 ...
- 【自己开发】Jquery的loading插件
经过几周的时间的开发.我的loading插件终于上线了.这个插件功能为客户提供正在等待的信息,提供优良用户体验效果. 先看效果. 原理我内部实现我不讲,特别简单. 我说调用方式和api. 首先引用jq ...
- argv[1] 路径问题
在看<学习opencv>一书时遇到一个小问题:函数只是通过argv传递参数来读取图片并显示,但是却一直弹出画布,没有图像. 如下:test.c # include<stdio.h&g ...
- java多线程系列五、并发容器
一.ConcurrentHashMap 1.为什么要使用ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在 ...
- java web path
1,request.getRealPath("/");这个方法已不推荐用 2,在Servlet 里用this.getServletContext().getRealPath(&qu ...
- 001_a记录和canme的区别
1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...
- Bootstrap报错:Bootstrap's JavaScript requires jQuery
如题,经百度原来导入顺序的问题,须要先导入Jqeury库,今记之!
- LeetCode(31): 下一个排列
Medium! 题目描述: (请仔细读题) 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列) ...
- LeetCode(2):Add Two Numbers 两数相加
Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ...
- pytest十三:配置文件 pytest.ini
pytest 配置文件可以改变 pytest 的运行方式,它是一个固定的文件 pytest.ini 文件,读取配置信息,按指定的方式去运行. ini 配置文件pytest 里面有些文件是非 test ...