垂直居中的几种方法总结

1、使用CSS3的flex-box

通过将父元素的display设置为flex,并将子元素的margin设置为auto即可实现,不过这种方法有些兼容问题

如下:

.outer {
    width:400px;
    height:400px;
    border:1px solid #000;
    display:flex;
}

.inner {
    width:200px;
    height:200px;
    border:1px solid #000;
    margin:auto;
}

这种方式不需要首先知道子元素的宽高,会根据内容自适应,还是很方便的。

2、通过绝对布局的方式

设置父元素的position为relative,子元素的position为absolute,并设置其left,right,top,bottom都为0,margin为auto

.outer {
    position:relative;
    width:400px;
    height:400px;
    border:1px solid #000;
}
.inner {
    position:absolute;
    width:200px;
    height:200px;
    left:0;
    right:0;
    top:0;
    bottom:0;
    margin:auto;
    border:1px solid #000;
}

但是这种方法必须首先知道子元素的高度,否则高度会充满父容器,因为top和bottom都为0

3、top和margin相结合的方式

个人觉得这种方法比较麻烦,但是之前好像还是一种比较常用的方式,最开始学前端时网上搜到的都是这种,也是利用了margin值可以设为负值这一性质吧

.outer {
    position:relative;
    width:400px;
    height:400px;
    border:1px solid #000;
}
.inner {
    position:absolute;
    width:200px;
    height:200px;
    top:50%;
    margin-top:-100px;
    left:50%;
    margin-left:-100px;    /*margin-left:auto;      margin-right:auto;*/      border:1px solid #000;
}

当然这种方法根据子元素的宽高设置margin值,所以首先也必须要知道子元素的宽高,不是很方便。

4、通过table-cell的方式

通过设置元素的display:table-cell是其展示出表格中的单元格的显示特性,同时利用vertical-align属性设置内部元素的对齐方式。

.outer {
     display:table;
     text-align:center;
     width:400px;
     height:400px;
     border:1px solid #000;
}
.inner {
     display:table-cell;
     vertical-align:middle;
     border:1px solid #000;
}

<div class="outer">
    <div class="inner">
        我是inner
        <div>我是inner中的一个div</div>
    </div>
</div>

效果如下:

通过这种方式,inner是充满outer的,其内部的元素垂直居中,而无论内联元素还是块级元素都有效,很适合内部内容高度未知的情况。

以上是我目前所了解的几种方法,以后再慢慢总结完善~~~~

时间: 2024-08-14 04:29:13

垂直居中的几种方法总结的相关文章

让div盒子相对父盒子垂直居中的几种方法

div相对于父盒子垂直居中的几种方法,之前在网上看到很多种方法,确实说的很对,也很具体,但是我感觉对于初学者来说,一目了然是最重要的,所以,我把很高深的技巧,和很复杂的css样式都剔除掉,旨在让更多人能看懂. 具体事例方法如下:    1.   其实这里的重点是,一定要给父盒子设置相对定位 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <

垂直居中的N种方法

CSS教程:div垂直居中的N种方法[转] 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生 效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<span>这样的元素是

顽石系列:CSS实现垂直居中的五种方法

顽石系列:CSS实现垂直居中的五种方法 在开发过程中,我们可能沿用或者试探性地去使用某种方法实现元素居中,但是对各种居中方法的以及使用场景很不清晰.参考的内容链接大概如下: 行内元素:https://blog.csdn.net/bwf_erg/article/details/69844527 MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align 六种方法:https://www.jianshu.com/p/08

实现icon和文字垂直居中的两种方法-(vertical-align and line-height)

方法一:vertical-align 在w3school定义:该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐 百思不得骑姐 然后Google,反正在w3schools上面并没有找到定义 仅仅能写代码測试 而后个人理解,才作出如此解释> 该属性作用的对象:行内元素(inline,inline-block也有行内属性) 其它table-cell 经常使用属性值:top middle bottom 个人理解 个人觉得,普通情况下,这些字母自发"坐落"的这条线就是基线.然后两

垂直居中的6种方法

利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可. Line-Height Method 试用:单行文本垂直居中,demo 代码: html 1 2 3 <div id="parent"> <div id="child&quo

CSS教程:div垂直居中的N种方法[转]

在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生 效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<span>这样的元素是没有valign特性的,因此使用vertic

垂直居中的几种方法比较(纯CSS)

方法一 <div class="table"style="height: 200px;"> <divclass="table-cell"> content </div> </div> .table {display:table;} .table-cell {display:table-cell; vertical-align:middle;} 优点:content 可以动态改变高度,如果你不需要支持

[转]-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%E7%9A%84-6%E7%A7%8D%E6%96%B9%E6%B3%95/ 利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进行元素的垂直居中的方

CSS 元素垂直居中的 6种方法

利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可. Line-Height Method 试用:单行文本垂直居中,demo 代码: html 1 2 3 <div id="parent"> <div id="child&quo

垂直居中的几种方法

1.文字垂直居中,有两种情况,第一是div高度是具体数值的时候,可以用line-height. 第二是 div的高度是变化的,是百分比,不是具体的数值,第一种方法,可以用在其文字外套一个div.具体代码看图 第二种方法,可以用伪代码 after