CSS中的各类居中方法总结

CSS中的居中可分为水平居中垂直居中。水平居中分为行内元素居中块状元素居中两种状况,而块状元素又分为定宽块状元素居中不定宽块状元素居中。下面详细介绍这几种状况。spa

 

1、水平居中code

一、行内元素居中blog

 顾名思义,行内元素居中是只针对行内元素的,好比文本(text)、图片(img)、按钮等行内元素,可经过给父元素设置 text-align:center 来实现。另外,若是块状元素属性display 被设置为inline时,也是可使用这种方法。但有个首要条件是子元素必须没有被float影响,不然一切都是无用功。教程

.div1{
        text-align:center;
    }
<div class="div1">Hello world</div>

 

二、块状元素居中图片

(1)、定宽块状元素居中it

 知足定宽(块状元素的宽度width为固定值)和块状两个条件的元素能够经过设置“左右margin”值为“auto”来实现居中。io

.div1{
     width:200px;
     border:1px solid red; margin:0 auto; } <div class="div1">Hello world</div>

 

(2)、不定宽块状元素居中table

在实际工做中咱们会遇到须要为“不定宽度的块状元素”设置居中,好比网页上的分页导航,由于分页的数量是不肯定的,因此咱们不能经过设置宽度来限制它的弹性。(不定宽块状元素:块状元素的宽度width不固定。)class

有三种方法能够对不定宽块状元素进行居中:兼容性

方法1:

将要显示的元素加入到 table 标签当中,而后为 table 标签设置“左右margin”值为“auto”来实现居中; 或使用 display : table;而后设该元素“左右margin”值为“auto”来实现居中。后面的display:table; 方法会更简洁。

为何加入table标签? 是利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),所以能够看作一个定宽度块元素,而后再利用定宽度块状居中的margin的方法,使其水平居中。

以下例子:

table{
    margin:0 auto;
}

<div>
<table>
  <tbody>
    <tr><td>
    <ul>
        <li>Hello world</li>
        <li>Hello world</li>
    </ul>
    </td></tr>
  </tbody>
</table>
</div>
.wrap{
    background:#ccc;
    display:table;
    margin:0 auto;
}

<div class="wrap">
  Hello world  
</div>

方法2:

改变块级元素的 display 为 inline 类型(设置为 行内元素 显示),而后使用 text-align:center 来实现居中效果。

这种方法相比第一种方法的优点是不用增长无语义标签,但也存在着一些问题:它将块状元素的 display 类型改成 inline,变成了行内元素,因此少了一些功能,好比设定长度值(变成inline-block就能够设置宽高)。

.container{
    text-align:center;
 }
.container ul{
    list-style:none;
    margin:0;
    padding:0;
    display:inline;  //怎么这一句用不用都是同样效果的?
 }

<div class="container">
    <ul>
        <li>Hello world</li>
        <li>Hello world</li>
    </ul>
</div>

方法3:

 经过给父元素设置 float,而后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left: -50% 来实现水平居中。

.wrap{
    float:left;
    position:relative;
    left:50%;
    clear:both;
}
.wrap-center{
    background:#ccc;
    position:relative;
    left:-50%;
}

<div class="wrap">
    <div class="wrap-center">Hello world</div>
</div>

 先设置父元素wrap清除浮动,而后左浮动。定位让wrap向右偏移50%。而后定义子元素相对于父元素向左偏移50%。脱离父元素。加个边框就能够明白一些了。另外用绝对定位也是能够的。

 

2、垂直居中

 垂直居中可分为父元素高度肯定的单行文本,以及父元素高度肯定的多行文本。

一、父元素高度肯定的单行文本的竖直居中的方法是经过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高,指在文本中,行与行之间的 基线间的距离 )。

.wrap h2{
    margin:0;
    height:100px;
    line-height:100px;
    background:#ccc;
}

<div class="wrap">
    <h2>Hello world</h2>
</div>

二、父元素高度肯定的多行文本

有两种方法:

方法1:

使用插入 table  (包括tbody、tr、td)标签,同时设置 vertical-align:middle。

.wrap{
    height:300px;
    background:#ccc;
    vertical-align:middle;   /* td 标签默认状况下就默认设置了 vertical-align 为 middle,能够不须要显式地设置 */
}

<table>
    <tbody>
        <tr>
            <td class="wrap">
                <div>
                    <p>Hello world</p>
                    <p>Hello world</p>
                    <p>Hello world</p>
                </div>
            </td>
        </tr>
    </tbody>
</table>
.wrap{
    background:#ccc;
    display:table;
    vertical-align:middle;
}

<div class="wrap">
    <p>Hello world</p>
    <p>Hello world</p>
    <p>Hello world</p>
</div>

方法2:

设置块级元素的 display 为 table-cell(设置为表格单元显示),激活 vertical-align 属性。但这种方法兼容性比较差, IE六、7 并不支持这个样式。

.wrap{
    height:300px;
    background:#ccc;
    
    display:table-cell;/*IE8以上及Chrome、Firefox*/
    vertical-align:middle;/*IE8以上及Chrome、Firefox*/
}

<div class="wrap">
    <p>Hello world</p>
    <p>Hello world</p>
    <p>Hello world</p>
</div>

 注:主要参考慕课网教程

相关文章
相关标签/搜索