一、单行文本垂直居中:

设置其文本的行高line-height与其父容器高度相等即可。如

<style>
.test{
background-color: grey;
line-height:90px;
}
</style>
<body>
<div class="test">文本垂直居中</div>
</body>

效果图如下

二、已定位的盒子实现垂直居中

法一:子盒子绝对定位后设置其高度,margin:auto,且top、right、left、bottom均为0.

<style>
.container{
width: 500px;
height: 500px;
position: relative;
background-color: red;
}
.absolute-center{
width: 50%;
height: 50%;
overflow: auto;
margin:auto;
position: absolute;
top:0;
left:0;
bottom:0;
right:0;
background-color: green;
}
</style> <body>
<div class="container">
<div class="absolute-center">垂直居中</div>
</div>
</body>

效果图如下:

法二:让其子盒子绝对定位后的top:50%,margin-top:-自身高度的一半px;水平居然则设其left与margin-left

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.container{
width: 500px;
height: 500px;
position: relative;
background-color: red;
}
.absolute-center{
width:100px;
height: 100px;
position: absolute;
top:50%;
margin-top:-50px;
left:50%;
margin-left:-50px;
background-color: green;
}
</style>
</head>
<body>
<div class="container">
<div class="absolute-center">垂直居中</div>
</div>
</body>
</html>

效果图如下:

如果想让其在可视区内永远居中,则需要设置其定位为position:fixed;z-index:999;

法三:当元素的高度不确定时,可配合translate来实现,不过IE9不支持,代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
position: relative;
height: 300px;
background-color: grey;
}
.child{
position: absolute;
top:50%;
transform:translateY(-50%);
background-color: green;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">adfadf</div>
</div>
</body>
</html>

三、未定位、未浮动的盒子实现垂直居中

法一:设置其父元素为table-cell布局,配合vertical-align: middle;来实现,如下代码:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
display: table-cell;
vertical-align: middle;
background-color: grey;
height: 100px; }
.child{
background-color: blue;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">table-cell实现的居中</div>
</div>
</body>
</html>

如果已经定位或浮动的元素仍然想用此方法来实现垂直居中,需要在其外面再加一个父盒子包起来便可实现。若要IE7支持,则需要改为<table>表格布局。

法二:若子元素是图片,通过设置父元素的行高来代替高度,且设置父元素的font-size为0

vertical-align:middle的解释是元素的中垂点与父元素的基线加1/2父元素中字母X的高度对齐。由于字符X在em框中并不是垂直居中的,且各个字体的字符X的高低位置不一致。所以,当字体大小较大时,这种差异就更明显。当font-size为0时,相当于把字符X的字体大小设置为0,于是可以实现完全的垂直居中。如下代码:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
line-height: 500px;
fon-size:0;
background-color: grey;
width: 500px; }
.child{
vertical-align: middle;
}
</style>
</head>
<body>
<div class="parent">
<img src="img/shop.png" alt="" class="child"/>
</div>
</body>
</html>

效果图如下:

法三:通过新增元素来实现垂直居中的效果

新增元素设置高度为父级高度,宽度为0,且同样设置垂直居中vertical-align:middle的inline-block元素。由于两个元素之间空白被解析,所以需要在父级设置font-size:0,在子级再将font-size设置为所需值;若结构要求不严格,则可以将两个元素一行显示,则不需要设置font-size:0。代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
height: 100px;
font-size:0;
background-color: grey;
width: 200px;
}
.child{
display: inline-block;
font-size:20px;
vertical-align: middle;
background-color: blue;
}
.childSbling{
display: inline-block;
height: 100%;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">adfadf</div>
<i class="childSbling"></i>
</div>
</body>
</html>

效果图如下:

法四:利用VW单位。VW是与视口宽度相关的,1VW表示视口宽度的1%

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
.main {
width: 18em;
padding: 1em 1.5em;
margin: 50vh auto 0;
transform: translateY(-50%);
box-sizing: border-box;
background: #655;
color: white;
text-align: center;
}
h1 {
margin: 0 0 .2em;
font-size: 150%;
}
p {
margin: 0;
}
body {
background: #fb3;
font: 100%/1.5 sans-serif;
}
</style>
</head> <body>
<div class="main">
<h1>I am a title</h1>
<p>asdfasdfasdf</p>
</div>
</body> </html>

效果如下:

四、使用弹性盒子来实现垂直居中,不过IE9以下不支持。

法一:在父盒子上加display:flex;align-items: center;如下代码:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
display: flex;
align-items: center;
background-color: grey;
height: 200px;
} </style>
</head>
<body>
<div class="parent">
<div class="child">adfadf</div>
</div>
</body>
</html>

效果如下:

法二:在子盒子上加margin:auto 0;代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.parent{
display: flex;
background-color: grey;
height: 200px;
}
.child{
margin:auto 0;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">子</div>
</div>
</body>
</html>

效果如下:

CSS垂直居中的更多相关文章

  1. CSS垂直居中指南

    大概整理下css中的垂直居中问题 主要分两大类 1 知道块元素尺寸,一般就是指知道元素高度. 方法一:最简单的,类比水平居中. 思路:子元素设置为absolute;  top bottom都设置为0 ...

  2. 最常用的css垂直居中方法

    css垂直居中一直以来都是一个被大家说烂了的话题,翻来覆去的炒.不过说实话,正是因为css没有提供标准的垂直居中方法(不过在css3中已经有了相关规范),所以大家才会对它进行专门的研究.这研究来研究去 ...

  3. css垂直居中方法

    CSS垂直居中的简便方法:{position:absolute;left:0;bottom:0;top:0;right:0;margin:auto;}.

  4. CSS垂直居中完美有用实例

    <!DOCTYPE HTML>           <html>            <head>             <meta meta chars ...

  5. Day14:CSS垂直居中

    verticle-align:middle vertical-align:middle实现css垂直居中是常用的方法,但是需要注意,vertical生效的前提是diaplay:inline-block ...

  6. CSS垂直居中的8种方法

    CSS垂直居中的8种方法 1.通过verticle-align:middle实现CSS垂直居中. 通过vertical-align:middle实现CSS垂直居中是最常使用的方法,但是有一点需要格外注 ...

  7. 完美实现CSS垂直居中的11种方法

    在做前端项目时CSS的水平居中我们经常使用,但有时还会用到CSS垂直居中,对于小白来说这个就有些难度了,下面看一下我是如何实现的 本人前端小白,正在做一个小程序开发的项目,css样式调整搞的头都大了. ...

  8. css 垂直居中技巧

    CSS垂直居中技巧,我只会23个,你会几个?自古以来(是有多?~),网页CSS的垂直居中需求始终没有停过,而其困难度也始终没有让人轻松过,经过了每位开发先烈的研究后,据说CSS的垂直居中技巧已达到近十 ...

  9. CSS垂直居中的11种实现方式

    今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...

  10. CSS垂直居中总结

    工作中遇到垂直居中问题,特此总结了一下几种方式与大家分享.本文讨论的垂直居中仅支持IE8+ 1.使用绝对定位垂直居中 <div class="container"> & ...

随机推荐

  1. Android环境变量配置

    第一步: 把这些东西全部准备好!然后jdk怎么安装我相信大家都知道.安装好jdk之后,我们来配置环境变量. 我的电脑—右键—属性—高级系统设置—环境变量 JAVA_HOME环境变量.它指向jdk的安装 ...

  2. Matlab中^2和.^2的区别

    矩阵a a^2 --  两个矩阵相乘 a.^2  --  表示 矩阵对应位置相乘 如下: a=[ 1,2,3 4,5,6 7,8,9]; disp(a); disp(a^2); disp(a.^2); ...

  3. IOS-Hybrid(混合开发)

    http://www.cnblogs.com/oc-bowen/p/5423902.html 1.1.     APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等 ...

  4. easyui datagrid 悬浮事件

    easyui的单元格提示窗体  鼠标悬浮事件 function findAllPreven() { var infoname = $('#area').val(); areadatagrid=$('# ...

  5. 给zabbix穿一件漂亮的衣服

    推荐给zabbix穿上一件漂亮的衣服,安装Grafana推荐连接:http://www.myexception.cn/software-testing/2008870.html yum install ...

  6. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  7. java enum

    小谈Java Enum的多态性 博客分类: Java JavaAppleJDKJVMIDEA  Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态 ...

  8. 数据存储_FMDB数据库队列

    一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: 1 // 2 // YYViewController.m 3 // 05- ...

  9. C语言中,while()语句中使用赋值语句

    while()语句括号中是一个逻辑表达式,用以判断while循环是否需要继续执行.可以是赋值语句. while循环的一般格式为: while(expr) { ;//body } 其中用来判断循环条件的 ...

  10. C#:泛型(Generic)

    前言:  此系列都为个人对C#的回顾,属于个人理解,新司机可参考.求老司机指点.如果有什么问题或不同见解,欢迎大家与我沟通! 目录:  泛型是什么 泛型的好处及用途 如何声明使用泛型 泛型类 泛型方法 ...