CSS元素和文本垂直居中
div居中
1、使用绝对定位和负外边距让块级元素垂直居中
要点:必须提前知道被居中块级元素的尺寸,否则无法准确实现垂直居中。
<div id="box">
<div id="child">我是测试DIV</div>
</div>
CSS代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 150px;
height: 100px;
background: orange;
position: absolute;
top: 50%;
margin: -50px 0 0 0; /*top设为50%,margin-top设置为负的容器的高度/2*/
line-height: 100px; /*单行文字,line-height值等于div的高度,使文字垂直居中*/
}
或者如下:
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 50%;
height: 30%;
background: pink;
position: absolute;
top: 50%;
margin: -15% 0 0 0; /*margin的取值也可以是百分比,这时这个值规定了该元素基于父元素尺寸的百分比,可以根据实际的使用场景来决定是用具体的数值还是用百分比*/
}
2、使用绝对定位和transform让块级元素垂直居中
要点:不必提前知道被居中元素的尺寸了,因为transform中translate偏移的百分比就是相对于元素自身的尺寸而言的。
CSS代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
background: #93BC49;
position: absolute;
top: 50%;
transform: translate(0, -50%);
}
要点:
- 把要垂直居中的元素相对于父元素绝对定位,top和bottom设为相等的值(这里设成了0,也可以设为99999px或者-99999px无论什么,只要两者相等就行)。
- 再将要居中元素的margin设为auto,这样便可以实现垂直居中了。
- 被居中元素的宽高也可以不设置,但不设置的话就必须是图片这种自身就包含尺寸的元素,否则无法实现。
css代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 200px;
height: 100px;
background: #A1CCFE;
position: absolute;
top:;
bottom:;
margin: auto;
line-height: 100px;
}
4、使用padding实现子元素的垂直居中
要点:给父元素设置相等的上下内边距,则子元素自然是垂直居中的,当然这时候父元素是不能设置高度的,要让它自动被填充起来,除非设置了一个正好等于上内边距+子元素高度+下内边距的值,否则无法精确的垂直居中。
#box {
width: 300px;
background: #ddd;
padding: 100px 0;
}
#child {
width: 200px;
height: 100px;
background: #F7A750;
line-height: 50px;
}
5、设置第三方基准
要点:首先设置一个高度等于父元素高度一半的第三方基准元素,那么此时该基准元素的底边线自然就是父元素纵向上的中分线,做完这些之后再给要垂直居中的元素设置一个margin-top,值的大小是它自身高度的一半取负,则实现垂直居中。
<div id="box">
<div id="base"></div>
<div id="child">测试测试测试!!</div>
</div>
CSS代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
}
#base {
height: 50%;
background: #AF9BD3;
}
#child {
height: 100px;
background: rgba(131, 224, 245, 0.6);
margin-top: -50px;
line-height: 50px;
}
6、flex布局使块级元素垂直居中
要点:元素可以通过将父元素设置display:flex;将其指定为flex布局的容器,指定好了容器之后再为其添加align-items属性,该属性定义项目在交叉轴(这里是纵向轴)上的对齐方式,可能的取值有五个,分别如下:
具体flex布局在此。
<div id="box">
<div id="child">我是测试DIV</div>
</div>
CSS代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
align-items: center;
}
#child {
width: 300px;
height: 100px;
background: #8194AA;
line-height: 100px;
}
7、第二种使用flex实现块级元素垂直居中
要点:首先给父元素设置display:flex,设置好之后改变主轴的方向flex-direction: column,该属性可能的取值有四个,分别如下:
#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
flex-direction: column;
justify-content: center;
}
#child {
width: 300px;
height: 100px;
background: #08BC67;
line-height: 100px;
}
8、使用 line-height 和 vertical-align 对图片进行垂直居中
<div id="box">
<img src="duncan.jpeg">
</div>
css代码:
#box{
width: 300px;
height: 300px;
background: #ddd;
line-height: 300px;
}
#box img {
vertical-align: middle;
}
9、结合表格和vertical-align属性
要点:将div转变成table-cell显示,然后通过vertical-align: middle;再设置其子元素垂直居中,子元素的高度可以动态改变,当outer里没有足够空间时,middle不会被截断。
<div id="outer">
<div id="middle">
测试测试测试!!!
</div>
</div>
CSS代码:
#outer{
background-color: #13CDF4;
width: 300px;
height: 200px;
display: table-cell;
vertical-align: middle;
}
#middle{
background-color: #E41627;
width: 100px;
height: 100px;
margin: 0 auto;
}
文本居中
1、单行文本
要点:只需要将文本行高(line-height)和所在区域高度(height)设为一致即可
<div id="div1">
这是单行文本垂直居中
</div>
CSS代码:
#div1{
width: 300px;
height: 100px;
margin: 50px auto;
border: 1px solid red;
line-height: 100px; /*设置line-height与父级元素的height相等*/
text-align: center; /*设置文本水平居中*/
overflow: hidden; /*防止内容超出容器或者产生自动换行*/
}

2、使用flex布局
<div id="box">测试测试测试!!</div>
CSS代码:
#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
align-items: center;
}
3、多行文本垂直居中
(1)父级元素高度不固定,随着内容变化
要点:父级高度不固定的时,高度只能通过内部文本来撑开。这样,我们可以通过设置内填充(padding)的值来使文本看起来垂直居中,只需设置padding-top和padding-bottom的值相等。
<div id="div1">
这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中。
</div>
CSS代码:
#div1{
width: 300px;
margin: 50px auto;
border: 1px solid red;
padding: 50px 20px; /*设置padding-top和padding-bottom的值相等*/
text-align: center; /*设置文本水平居中*/
}

(2)父级元素高度固定
要点:css中的vertical-align属性只对拥有valign特性的元素才生效,结合display: table,可以使得div模拟table属性。因此我们可以设置父级div的display属性:display: table;然后再添加一个div包含文本内容,设置其display:table-cell和vertical-align:middle
<div id="outer">
<div id="middle">
这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中。
</div>
</div>
CSS代码:
#outer{
width: 400px;
height: 200px;
margin: 50px auto;
border: 1px solid red;
display: table;
}
#middle{
display:table-cell;
vertical-align:middle;
text-align: center; /*设置文本水平居中*/
width:100%;
}

但是在IE7中显示效果如下:

这是因为IE7及以下的版本并不能很好的支持display:table和display:table-cell属性,当然,如果你不考虑IE7以下的版本的浏览器,上述方法是可以实现垂直居中。如果把IE7及以下版本考虑进去,我们可以通过用到CSS hack的知识来设置针对不同浏览器的属性。
要点:使用position定位来解决
<div id="outer">
<div id="middle">
<div id="content">
这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7)。
</div>
</div>
</div>
CSS代码:
#outer{
width: 400px;
height: 200px;
margin: 50px auto;
border: 1px solid red;
display: table;
*position:relative; /*兼容IE7及以下版本*/
}
#middle{
display:table-cell;
vertical-align:middle;
text-align: center; /*设置文本水平居中*/
width:100%;
*position:absolute; /*兼容IE7及以下版本*/
*top:50%; /*兼容IE7及以下版本,令middle相对于outer向下50%*/
}
#content {
*position:relative; /*兼容IE7及以下版本 */
*top:-50%; /*兼容IE7及以下版本,令content相对于middle向上50%,这样content就会相对于outer居中*/
}
CSS元素和文本垂直居中的更多相关文章
- CSS元素(文本、图片)水平垂直居中方法
1.text-align:center; 2.margin:0 auto; 3.display:inline-block; + text-align:center; 4.position:relati ...
- css元素水平居中和垂直居中的方式
关于居中的问题,一直处于疑惑不解的状态,知道的几种方法好像也不是每一次都会起到作用,所以更加迷惑.主要是不清楚该 在什么情况下采用哪种解决方法,所以,整理了一些方法,梳理一下思路,做一个总结. 1. ...
- CSS元素水平居中和垂直居中的方法大全
水平居方法: 1.最熟悉的是给元素定义一个宽度,然后使用margin: body{ width:960px; margin:0 auto;}这个是当我们的定义元素的宽度时显现的,如果我们不能定义宽度时 ...
- css确定元素水平居中和垂直居中
---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当 ...
- [转]-CSS 元素垂直居中的6种方法
原文地址:http://blog.zhourunsheng.com/2012/03/css-%E5%85%83%E7%B4%A0%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD ...
- CSS 元素垂直居中的 6种方法
利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进 ...
- CSS中元素水平居中和垂直居中的方法
#CSS中水平居中和垂直居中的方法 一. 水平居中 1.行内元素(文本,图片等) 如果被设置元素为文本.图片等行内元素时,可以通过给父元素设置` text-align:center;` 来实现 2.定 ...
- CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)
本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE ...
- css元素水平垂直居中的十种方法
四月底在杭州金诚的前端面试过程中,问到了父元素中子元素水平和垂直居中的方式,因为平时疏于整理,只说上来两种.后来面试过了,所以现在回想到这个问题,所以针对各种情况集中整理一下. 首先看页面结构和元素的 ...
随机推荐
- centos8下gz,bz2,zip压缩解压缩
for gz 1.制作压缩包 [root@192 mnt]# tar czf mydir.tar.gz mydir1/ 2.解压gz 压缩包 [root@192 mnt]# tar xvf mydir ...
- CocosCreator内存与性能优化
一.内存优化 因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存.如果你的小游戏有外网用户反馈“闪退”,或者你自己测试的时候频繁出现“该小 ...
- php基础 php 全局变量
$_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和post两种方式的值 $GLOBALS ---- ...
- 学习 Python,怎能不懂点PEP 呢?
或许你是一个初入门 Python 的小白,完全不知道 PEP 是什么.又或许你是个学会了 Python 的熟手,见过几个 PEP,却不知道这玩意背后是什么.那正好,本文将系统性地介绍一下 PEP,与大 ...
- Lucene的初步了解和学习
Lucene的学习一,什么是全文检索 1.数据的分类 1.结构化数据 格式固定,长度固定,数据类型固定. 例如:数据库中的数据: 2.非结构化数据 word文档,pdf文档,邮件,html,txt 格 ...
- python中模块的制作
1.import 模块名 2.from 模块名 import 类名(或方法名或全局变量) 3.from 模块名 import * 导入模块名下的所有类名,方法,全局变量 4.from 模块名 im ...
- python 中的生成器(generator)
生成器不会吧结果保存在一个系列里,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopTteration异常结束 1.生成器语法: 生成器表达式:通列表解析语法,只不过把列表解析的[] ...
- PAT T1013 Image Segmentation
krustral算法加并查集,按题给要求维护并查集~ #include<bits/stdc++.h> using namespace std; ; const int inf=1e9; i ...
- js数组和java数组的区别
1,js数组可以自动扩容,不会出现数组越界的情况 2,js数组中可以存放任意数据类型 3,java数组一旦定义长度,不可以更改 4,java数组中的数据类型必须一致
- base64和图片的相互转换
package czc.superzig.modular.utils; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; im ...