关于div的水平垂直居中

水平垂直居中

一、未知宽高

1. table布局(display:table)

2. 转化为行内标签display:inline-block,借助另外一个标签高度来实现

3. 绝对布局(position:absolute)+translate

4. flex布局(box-flex)

方法一

思路:显示设置父元素为table,子元素为cell-table,这样就可以使用vertical-align:center,实现水平居中。

优点:父元素(parent)可以动态的改变高度(table元素的特性)

缺点:IE8以下不支持

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent1{
    display: table;
    height:300px;
    width: 300px;
    background-color: #FD0C70;
}
.parent1 .child{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
    color: #fff;
    font-size: 16px;
}
</style>
<body>
    <div class="parent1">
        <div class="child">hello world-1</div>
    </div>
</body>
</html>

方法二

思路:使用一个空标签span设置他的vertical-align基准线为中间,并且让他为inline-block,宽度为0

缺点:多了一个没用的空标签,display:inline-block IE 6、7是不支持的

(添加上:_zoom:1;*display:inline).

当然也可以使用伪元素来代替span标签,不过IE支持也不好。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent2{
    height:300px;
    width: 300px;
    text-align: center;
    background: #FD0C70;
}
.parent2 span{
    display: inline-block;;
    width: 0;
    height: 100%;
    vertical-align: middle;
    zoom: 1;/*BFC*/
    *display: inline;
}
.parent2 .child{
    display: inline-block;
    color: #fff;
    zoom: 1;/*BFC*/
    *display: inline;
}
</style>
<body>
    <div class="parent1">
        <div class="child">hello world-1</div>
    </div>
    <div class="parent2">
        <span></span>
        <div class="child">hello world-2</div>
    </div>
</body>
</html>

方法三

思路:子元素绝对定位,距离顶部50%,左边50%,然后使用css3 transform:translate(-50%,-50%)

优点:高大上,可以在webkit内核的浏览器中使用

缺点:不支持IE9以下 不支持transform属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent3{
    position: relative;
    height:300px;
    width: 300px;
    background: #FD0C70;
}
.parent3 .child{
    position: absolute;
    top: 50%;
    left: 50%;
    color: #fff;
    transform: translate(-50%, -50%);
}
</style>
<body>
<div class="parent3">
        <div class="child">hello world-3</div>
    </div>
</body>
</html>

方法四

思路:使用css3 flex布局

优点:简单 快捷

缺点:兼容性不好

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent4{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 300px;
    height:300px;
    background: #FD0C70;
}
.parent4 .child{
    color:#fff;
}
</style>
<body>
<div class="parent4">
        <div class="child">hello world-4</div>
    </div>
</body>
</html>

二、

1、假借图片法

这个方法把一些 div 的显示方式设置为inline-block,和图片一样,因此我们可以使用图片的 vertical-align 属性。

<div id="wrapper">
    <div id="likeImg">
        <div class="content">Content goes here</div>
    </div>
</div>
#wrapper {
    display: table;
}
#likeImg {
    display: inline-block;
    vertical-align: center;
}

优点:

在各种浏览器中兼容性都非常好,ie6和7中有间距问题

缺点:

很容易影响其他的布局,导致网页布局全部瘫痪

2、绝对定位法

这个方法使用绝对定位的 div,把它的 top 设置为 50%,margin-top设置为负的 content 高度。这意味着对象必须在 CSS 中指定固定的高度。

因为有固定高度,或许你想给 content 指定 overflow:auto,这样如果 content 太多的话,就会出现滚动条,以免content 溢出。

<div class="box">
    <div id="content"> Content goes here</div>
</div>
#content {
    position: absolute;
    top: 50%;
    height: 240px;
    margin-top: -120px; /* 盒子本身高度的一半 */
}

优点:

适用于所有浏览器

不需要嵌套标签

缺点:

没有足够空间时,content 会消失(类似div 在 body 内,当用户缩小浏览器窗口,滚动条不出现的情况)

3、插入空标签 浮动

这种方法,在 content 元素外插入一个 div。设置此 div height:50%; margin-bottom:-contentheight;

content 清除浮动,并显示在中间。

<div id="box">
    <div id="content">Content here</div>
    <div id="floater">
</div>
#floater {
    float: left;
    height: 50%;
    margin-bottom: -120px;
}
#content {
    clear: both;
    height: 240px;
    position: relative;
}

优点:

适用于所有浏览器

没有足够空间时(例如:窗口缩小) content 不会被截断,滚动条出现

缺点:

唯一我能想到的就是需要额外的空元素了,可能对于某些强迫症患者来说是不愿意的(这个方法的应用应该也很广)

4、绝对定位

这个方法使用了一个 position:absolute,有固定宽度和高度的 div。这个 div 被设置为 top:0; bottom:0;。但是因为它有固定高度,其实并不能和上下都间距为 0,因此 margin:auto; 会使它居中。使用 margin:auto;使块级元素垂直居中是很简单的。

<div id="box">
    <div id="content"> Content here</div>
</div>
#content {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
    height: 240px;
    width: 70%;
}

优点:

简单粗暴,代码简单,其实设计者当初也根本没想到也能这样用,但是聪明的大家硬是凿出了一条简单的路。

缺点:

IE(IE8 beta)中无效

无足够空间时,content 被截断,但是不会有滚动条出现

时间: 2024-12-23 04:27:06

关于div的水平垂直居中的相关文章

div盒子水平垂直居中的方法推荐

父盒子是position:relative 方法一:(宽高确定) div绝对定位水平垂直居中[margin 负间距], 方法二: (宽高确定) div绝对定位水平垂直居中[margin:auto实现绝对定位元素的居中], 兼容性:,IE7及之前版本不支持 方法三:(宽高不定) div绝对定位水平垂直居中[Transforms 变形] 兼容性:IE8不支持: 方法四:(宽高不定) flex布局(对父元素display:flex) 方法五: 父盒子display: table-cell和子盒子dis

div盒子水平垂直居中的方法

这个问题比较老,方法比较多,各有优劣,着情使用. 一.盒子没有固定的宽和高 方案1.Transforms 变形 这是最简单的方法,不近能实现绝对居中同样的效果,也支持联合可变高度方式使用.内容块定义transform: translate(-50%,-50%)  必须加上 top: 50%; left: 50%; 优点: 1.      内容可变高度 2.      代码量少 缺点: 1.      IE8不支持 2.      属性需要写浏览器厂商前缀 3.      可能干扰其他transf

总结div里面水平垂直居中的实现方法

最近经常碰到要垂直居中的问题,所以想着总结一下:关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种,下面仅列举了常用的几种. 首先看一下要实现的效果图及对应的html代码: <div class="parent"> <div class="child"> </div> </div> 1.使用定位的方法 .parent { width: 300px; height: 200px; border: 1px

CSS:div/img水平垂直居中

div水平垂直居中方法一: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #test{ position: absolute; width: 100px; height: 100px; background: pink; left: 0; rig

div自适应水平垂直居中的方法

1.Flexbox布局: display:flex; justify-content:center; align-items:center; width:100%; 2.Bootstrap栅格布局 一共12格,分成3块,每块占4列.居中的内容写在中间的那一块. 3.圣杯/双飞翼(水平自适应居中的基础上) 第一步:居中的div写在最前面,width:100%撑满一整行.三个div都向左浮动float:left; <div class="main">Main</div&g

img标签在div中水平垂直居中--两种实现方式

第一种方式: text-align:center; vertical-align:middle; div{ text-align: center; vertical-align:middle;width: 400px; height: 400px; border: 1px solid #000; } img{vertical-align: middle} span{height: 100%;vertical-align: middle;display: inline-block} <div st

DIV文字水平垂直居中的方法

水平居中 text-align:center 垂直居中(vertical-align) vertical-align:middle; vertical-align时而没效果 然而真实使用的时候,我们会发现这个属性"时灵时不灵",有些情况下我们加了这个属性之后仍然不见img或者text有任何的变化.那是因为vertical-align只作用在inline-block或者inline,还有table-cell等元素内.同时这两种还有有所不同.vertical-align并不是在高度内居中,

HTML中div块水平垂直居中的三个方法

第一种方案:框内是div块的情况 div.myid{ display:flex; justify-content:center; align-items:center; height:500px; } div.myid div.mydiv{ width:200px; height:200px; border:1px solid red; } 低版本的浏览器的兼容性不够好,选择要慎重, 第二种方案:使框内div居中,使用定位的方式: div.myid{ height:500px; position

jQuery如何将div设置为水平垂直居中

jQuery如何将div设置为水平垂直居中:使用CSS也可以实现div的水平垂直居中效果,但是有时候可能需要动态的调整,下面就介绍一下如何用jQuery实现对象的水平垂直居中效果,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.c