元素彻底居中的方法

如何简单方便地让元素居中呢?在不一样状况下写法或许还得不同,下面咱们直入主题,说几个居中的方法:web

方法一:(我的以为最好用的一种)浏览器

.parent{
  position: relative;
}
.child {
  position: absolute;
  margin: auto;
  top: 0; left: 0; bottom: 0; right: 0;
  height:20px;/*元素高度是必须的*/
}

注意:浏览器支持:Chrome、Firefox、Safari、Mobile Safari、IE8-10,这种方法在Windows Phone上不起做用布局

方法2、负margin值字体

这或许是最经常使用的方法。若是知道了各个元素的大小,设置等于宽高一半大小的负margin值(若是没有使用box-sizing: border-box样式,还须要加上padding值),再配合top: 50%; left: 50%;样式就会使块元素居中。flex

.child {
        width: 300px;
        height: 200px;
        padding: 20px;
        position: absolute;
        top: 50%; left: 50%;
        margin-left: -170px; /* (width + padding)/2 */
        margin-top: -120px; /* (height + padding)/2 */
}
/*这是按照预想状况也能在工做在IE6-7下的惟一方法。*/

方法3、transform法flexbox

.child { 
  width: 50%;
  margin: auto;
  position: absolute;
  top: 50%; left: 50%;
  -webkit-transform: translate(-50%,-50%);
      -ms-transform: translate(-50%,-50%);
          transform: translate(-50%,-50%);
}

注意:不支持IE8;须要写厂商前缀;会和其余transform样式有冲突;某些状况下的边缘和字体渲染会有问题;spa

方法4、table-cell法设计

.Center-Container.is-Table { display: table; }
.is-Table .Table-Cell {
  display: table-cell;
  vertical-align: middle;
}
.is-Table .Center-Block {
  width: 50%;
  margin: 0 auto;
}
<div class="Center-Container is-Table">
  <div class="Table-Cell">
    <div class="Center-Block">
    <!-- CONTENT -->
    </div>
  </div>
</div>
 
 

方法5、inline-block法居中code

基本方法是使用 display: inline-blockvertical-align: middle样式和伪元素让内容块在容器中居中。个人实现用到了几个在其余地方见不到的新技巧解决了一些问题。orm

内容区声明的宽度不能大于容器的100% 减去0.25em的宽度。就像一段带有长文本的区域。否则,内容区域会被推到顶端,这就是使用:after伪类的缘由。使用:before伪类则会让元素有100%的大小!
 
  
.Center-Container.is-Inline { 
  text-align: center;
  overflow: auto;
}
 
.Center-Container.is-Inline:after,
.is-Inline .Center-Block {
  display: inline-block;
  vertical-align: middle;
}
 
.Center-Container.is-Inline:after {
  content: '';
  height: 100%;
  margin-left: -0.25em; /* To offset spacing. May vary by font */
}
 
.is-Inline .Center-Block {
  max-width: 99%; /* Prevents issues with long content causes the content block to be pushed to the top */
  /* max-width: calc(100% - 0.25em) /* Only for IE9+ */ 
}
 
  

 


<
div class="Center-Container is-Inline"> <div class="Center-Block"> <!-- CONTENT --> </div> </div>
注意:
  • 须要额外容器
  • 依赖于margin-left: -0.25em的样式,作到水平居中,须要为不一样的字体大小做调整
  • 内容区声明的宽度不能大于容器的100% 减去0.25em的宽度
方法6、Flexbox法
CSS将来发展的方向就是采用Flexbox这种设计,解决像垂直居中这种共同的问题。请注意,Flexbox有不止一种办法居中,他也能够用来分栏,并解决奇奇怪怪的布局问题。
.Center-Container.is-Flexbox {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-align: center;
     -moz-box-align: center;
     -ms-flex-align: center;
  -webkit-align-items: center;
          align-items: center;
  -webkit-box-pack: center;
     -moz-box-pack: center;
     -ms-flex-pack: center;
  -webkit-justify-content: center;
          justify-content: center;
}
/*不支持IE8-9*/
 
 

对照表

所用样式

支持的浏览器

是否 响应式

内容溢出后的样式

resize:both

高度可变

主要缺陷

Absolute

现代浏览器&IE8+

会致使容器溢出

是*

‘可变高度’的特性不能跨浏览器

负margin值

全部

带滚动条

大小改变后再也不居中

不具备响应式特性,margin值必须通过手工计算

Transform

现代浏览器&IE9+

会致使容器溢出

妨碍渲染

Table-Cell

现代浏览器&IE8+

撑开容器

会加上多余的标记

Inline-Block

现代浏览器&IE8+&IE7*

撑开容器

须要使用容器包裹和hack式的样式

Flexbox

现代浏览器&IE10+

会致使容器溢出

须要使用容器包裹和厂商前缀(vendor prefix)
相关文章
相关标签/搜索