我有一个包含文本的<div>元素,我想将这个<div>的内容垂直居中对齐。

这是我的<div>风格:

#盒子{高度:170px;宽度:270px;背景:#000;字体大小:48px;颜色:#FFF;文本对齐:居中;}<div id=“box”>Lorem ipsum悲哀坐</div>

实现这一目标的最佳方式是什么?


当前回答

另一种方式(此处尚未提及)是使用Flexbox。

只需向容器元素添加以下代码:

display: flex;
justify-content: center; /* Align horizontal */
align-items: center; /* Align vertical */

Flexbox演示1

.box格式{高度:150px;宽度:400px;背景:#000;字体大小:24px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;填充:0 20px;边距:20px;显示:柔性;对齐内容:中心;/*水平对齐*/对齐项目:居中;/*垂直对齐*/}<div class=“box”>Lorem ipsum dolor坐amet,consectetuer adipiscing elit,sed diam nonmmy笔尖</div>

或者,当柔性容器中只有一个柔性项时,flexbox也可以使用自动边距将柔性项居中,而不是通过容器对齐内容(如上面问题中给出的示例)。

因此,要在水平和垂直方向上将柔性项居中,只需将其设置为margin:auto

Flexbox演示2

.box格式{高度:150px;宽度:400px;背景:#000;字体大小:24px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;填充:0 20px;边距:20px;显示:柔性;}.箱形跨度{边距:自动;}<div class=“box”><span>边距:在弹性项上自动将其水平和垂直居中</span></div>

注意:以上所有内容都适用于在水平行中排列项目时对中项目。这也是默认行为,因为默认情况下,弯曲方向的值为row。然而,如果柔性项需要在垂直列中布局,则应在容器上设置柔性方向:列,以将主轴设置为列,此外,justify-content和align-items财产现在与justify content相反:垂直居中和align-items:水平居中)

灵活方向:列演示

.box格式{高度:150px;宽度:400px;背景:#000;字体大小:18px;字体样式:倾斜;颜色:#FFF;显示:柔性;弯曲方向:柱;对齐内容:中心;/*垂直对齐项目*/对齐项目:居中;/*水平对齐项目*/}p型{边距:5px;}<div class=“box”><p>当伸缩方向为列时。。。</p><p>“对齐内容:居中”-垂直对齐</p><p>“对齐项目:居中”-水平对齐</p></div>

flexyboxes是一个很好的地方,可以从Flexbox开始了解它的一些功能并获取语法以获得最大的浏览器支持

此外,现在的浏览器支持非常好:caniuse

为了实现显示的跨浏览器兼容性:调整和对齐项目,可以使用以下选项:

display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;

其他回答

一种更好、更简单、更快速的方法是将CSS中的页边空白设置为45%左右:

margin-top: 45%;

你可能需要玩这个数字,但它将位于周围分区的中心。

供参考并添加更简单的答案:

纯CSS:

.vertical-align {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

或作为SASS/SCSS混合物:

@mixin vertical-align {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

使用人:

.class-to-center {
    @include vertical-align;
}

由Sebastian Ekström的博客文章垂直对齐任何东西,只需3行CSS:

由于元素放置在“半像素”上,此方法可能会导致元素模糊。对此的解决方案是将其父元素设置为preserve-3d。如下所示:

.parent-element {
    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    transform-style: preserve-3d;
}

我们生活在2015年+,每个主要的现代浏览器都支持Flex Box。

这将是网站从现在开始制作的方式。

学习它!

我只想扩展Michielvoo的答案,以释放对线高度和呼吸div高度的需求。它基本上只是这样一个简化版本:

第二部分{宽度:250px;/*高度:100px;线条高度:100px*/文本对齐:居中;边框:1px实心#12346;背景色:#bbbbff;填充:10px;边距:10px;}跨度{显示:内联块;垂直对齐:中间;线高度:正常;}<div><span>所有的成年人都曾经是孩子。。。但只有少数人记得</span></div><div><span>现在这是我的秘密,一个非常简单的秘密:只有用心才能看清真相;本质的东西是肉眼看不见的</span></div>

注:注释了封闭分区固定高度所需的cssis部分。

您可以通过添加以下CSS代码轻松完成此操作:

display: table-cell;
vertical-align: middle;

这意味着您的CSS最终看起来像:

#盒子{高度:90px;宽度:270px;背景:#000;字体大小:48px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;页边空白:20px;左边距:5px;显示:表格单元格;垂直对齐:中间;}<div id=“box”>一些文本</div>

您可以在CSS中使用定位方法:

检查此处的结果。。。。

HTML格式:

<div class="relativediv">
  <p>
    Make me vertical align as center
  </p>
</div>

CSS:

.relativediv {
    position: relative;
    border: 1px solid #DDD;
    height: 300px;
    width: 300px
}
.relativediv p {
    position: absolute;
    top: 50%;
    transfrom: translateY(-50%);
}