方法一:position加margin 
方法二: diaplay:table-cell 
方法三:position加 transform 
方法四:flex;align-items: center;justify-content: center 
方法五:display:flex;margin:auto 
方法六:纯position 
方法七:兼容低版本浏览器,不固定宽高

总结

这种css布局平时用的比较多,也是面试题常出的一个题,网上一搜一大丢,不过还是想自己总结一下。

这种方法比较多,本文只总结其中的几种,以便加深印象。

效果图都为这个:

方法一:position加margin

/**html**/

<div class="wrap">

   <div class="center"></div>

</div>

/**css**/

.wrap {

   width: 200px;

   height: 200px;

   background: yellow;

   position: relative;

}

.wrap .center {

   width: 100px;

   height: 100px;

   background: green;

   margin: auto;

   position: absolute;

   left: 0;

   right: 0;

   top: 0;

   bottom: 0;

}

兼容性:主流浏览器均支持,IE6不支持

方法二: diaplay:table-cell

<!-- html -->

<div class="wrap">

    <div class="center"></div>

</div>

/*css*/

.wrap{

   width: 200px;

   height: 200px;

   background: yellow;

   display: table-cell;

   vertical-align: middle;

   text-align: center;

}

.center{

   display: inline-block;

   vertical-align: middle;

   width: 100px;

   height: 100px;

   background: green;

}

兼容性:由于display:table-cell的原因,IE6\7不兼容

方法三:position加 transform

<!-- html -->

<div class="wrap">

   <div class="center"></div>

</div>

/* css */

.wrap {

   position: relative;

   background: yellow;

   width: 200px;

   height: 200px;}

.center {

   position: absolute;

   background: green;

   top:50%;

   left:50%;

   -webkit-transform:translate(-50%,-50%);

   transform:translate(-50%,-50%);

   width: 100px;

   height: 100px;

}

兼容性:ie9以下不支持 transform,手机端表现的比较好。

方法四:flex;align-items: center;justify-content: center

<!-- html -->

<div class="wrap">

   <div class="center"></div>

</div>

/* css */

.wrap {

   background: yellow;

   width: 200px;

   height: 200px;

   display: flex;

   align-items: center;

   justify-content: center;

}

.center {

   background: green;

   width: 100px;

   height: 100px;

}

移动端首选

方法五:display:flex;margin:auto

<!-- html -->

<div class="wrap">

   <div class="center"></div>

</div>

/* css */

.wrap {

   background: yellow;

   width: 200px;

   height: 200px;

   display: flex;

}
.center { background: green; width: 100px; height: 100px; margin: auto; }

移动端首选

方法六:纯position

<!-- html -->

<div class="wrap">

   <div class="center"></div>

</div>

/* css */

.wrap {

   background: yellow;

   width: 200px;

   height: 200px;

   position: relative;

}

/**方法一**/

.center {

   background: green;

   position: absolute;

   width: 100px;

   height: 100px;

   left: 50px;

   top: 50px;

  

}

/**方法二**/

.center {

   background: green;

   position: absolute;

   width: 100px;

   height: 100px;

   left: 50%;

   top: 50%;

  margin-left:-50px;

  margin-top:-50px;

}

兼容性:适用于所有浏览器

方法六中的方法一计算公式如下:

子元素(conter)的left值计算公式:left=(父元素的宽 - 子元素的宽 ) / 2=(200-100) / 2=50px; 
子元素(conter)的top值计算公式:top=(父元素的高 - 子元素的高 ) / 2=(200-100) / 2=50px;

方法二计算公式: 
left值固定为50%; 
子元素的margin-left= -(子元素的宽/2)=-100/2= -50px; 
top值也一样,固定为50%

子元素的margin-top= -(子元素的高/2)=-100/2= -50px;

方法七:兼容低版本浏览器,不固定宽高

<!-- html -->

<div class="table">

   <div class="tableCell">

       <div class="content">不固定宽高,自适应</div>

   </div>

</div>

/*css*/

.table {

   height: 200px;/*高度值不能少*/

   width: 200px;/*宽度值不能少*/

   display: table;

   position: relative;

   float:left;

   background: yellow;

}      

.tableCell {

   display: table-cell;

   vertical-align: middle;

   text-align: center;        

   *position: absolute;

   padding: 10px;

   *top: 50%;

   *left: 50%;

}

.content {

   *position:relative;

   *top: -50%;

   *left: -50%;

    background: green;

}

转自:

css实现容器垂直水平居中的七中方法的更多相关文章

  1. 使用Sass优雅并高效的实现CSS中的垂直水平居中(附带Flex布局,CSS3+SASS完美版)

    实现css水平垂直居中的方法有很多,在这里我简单的说下四种比较常用的方法: 1.使用CSS3中的Flex布局 对于flex,我们要了解的是它是一个display的属性,而且必须要给他的父元素设置fle ...

  2. 纯CSS实现元素垂直水平居中-非固定宽度

    这里不讨论行内元素的居中!! 盒子垂直居中+水平居中的需求时经常遇到的,看到的较多实现逻辑是固定content-box的宽度,通过让margin-left和margin-top等于宽或高的负一半来实现 ...

  3. 【css】图片垂直水平居中

    一.已知宽高的图片实现垂直水平居中 1.借助margin-top负边距实现垂直居中 <!DOCTYPE html> <html> <head> <meta c ...

  4. Css实现垂直水平居中的六种方法

    经常在项目中用到,今天总结了一下: 演示地址:http://codepen.io/anon/pen/xGdpOa 以下两个类为公共类,便于更好的显示效果,非核心代码 .common{ width: 6 ...

  5. 纯CSS完美实现垂直水平居中的6种方式

    前言 由于HTML语言的定位问题,在网页中实现居中也不是如word中那么简单,尤其在内容样式多变,内容宽高不定的情况下,要实现合理的居中也是颇考验工程师经验的.网上讲居中的文章很多,但是都不太完整,所 ...

  6. 移动端toast 提示,HTML css 全屏垂直水平居中

  7. CSS垂直水平居中方法总结

    在布局的时候经常能用到居中,在此总结一下 html结构: <div class="wrap"> <div class="content"> ...

  8. css实现垂直水平居中的5种方法

    css实现垂直水平居中的5种方法 给父元素设置table-cell,text-align,vertical-align #big{ width: 200px; height: 200px; borde ...

  9. css实现垂直水平居中的方法(个数不限)?

    方法一:使用绝对定位 大家都知道margin:0 auto;能够实现水平居中,但却不知道margin:0 auto;也是可以实现垂直居中的: 给居中元素添加如下样式: .Absolute-Center ...

随机推荐

  1. 【JavaWeb】SSM+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(六)

    Showings 我个人的项目,当前不断地在更新. 我希望做成一个好项目,同时,也是在锻炼自己的技术. 在项目中发现问题,学习知识,是比较可取的一条路子. 这样学习到的知识,虽然分散,但是都很实用,而 ...

  2. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  3. js 闭包

    this.color = "blue"; (function(_this) { setInterval(function() { if (_this.color !== " ...

  4. Matlab插值函数

    x=0:2*pi; y=sin(x); xx=0:0.5:2*pi; %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx) ...

  5. java 反射

    com.my.Ob; @Table(name="ob") class Ob{ @Id private Integer id; @Column(name="name1&qu ...

  6. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  7. js ES6 多行字符串 连接字符串

    1. 以前,js多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示: 旧版写法 alert("你好,\n 我叫\n Olive" ...

  8. 使用powershell批量添加Qt的文件(生成pro)

    想使用QtCreator作为编辑器编辑keil或者IAR的工程,需要生成.pro文件,于是使用powershell批量处理. 源码如下: $incPath = dir -filter "*. ...

  9. 一个简单实用的css loading图标

    摘要 在web开发中,为了提高用户体验,在加载数据的时候都会给一个loading的提示. Html <!DOCTYPE html> <html xmlns="http:// ...

  10. [译]How to Write a Git Commit Message

    原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...