如何使用 CSS 垂直居中文本? [复制]

问:

这个问题在这里已经有了答案:如何将元素水平和垂直居中(26 个答案)如何垂直对齐 div 中的文本? (33 个回答) 3 年前关闭。

我有一个包含文本的

元素,我想将此
的内容垂直居中对齐。

这是我的

样式:

#box { 高度:170px;宽度:270px;背景:#000;字体大小:48px;颜色:#FFF;文本对齐:居中; } Lorem ipsum dolor sit

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

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

您可以尝试这种基本方法:

div {高度:100px;行高:100px;文本对齐:居中;边框:2px 虚线 #f69c55; } 你好,世界!

但是它只适用于单行文本,因为我们将行的高度设置为与包含框元素相同的高度。

更通用的方法

这是垂直对齐文本的另一种方法。此解决方案适用于单行和多行文本,但仍需要固定高度的容器:

div {高度:100px;行高:100px;文本对齐:居中;边框:2px 虚线 #f69c55; } 跨度 { 显示:内联块;垂直对齐:中间;行高:正常; } Hello World!

CSS 仅调整

的大小,通过将
的 line-height 设置为等于其高度来垂直居中对齐 ,并使 成为 vertical-align: middle 的内联块。然后它将 的 line-height 设置回正常值,因此它的内容将在块内自然流动。

模拟表格显示

这是另一个选项,它可能不适用于较旧的 browsers that don’t support display: table and display: table-cell(基本上只是 Internet Explorer 7)。使用 CSS 我们模拟表格行为(因为表格支持垂直对齐),HTML 与第二个示例相同:

div {显示:表;高度:100px;宽度:100%;文本对齐:居中;边框:2px 虚线 #f69c55; } 跨度 { 显示:表格单元格;垂直对齐:中间; } Hello World!

使用绝对定位

该技术使用绝对定位的元素,将顶部、底部、左侧和右侧设置为 0。Smashing Magazine 中的一篇文章Absolute Horizontal And Vertical Centering In CSS对此进行了更详细的描述。

div {显示:弹性;证明内容:中心;对齐项目:居中;高度:100px;宽度:100%;边框:2px 虚线 #f69c55; } Hello World!

因为如果 div 或 text 更改或添加更多内容就会出错。

但这就是他所说的,如果您知道将使用多少文本,则完全可以接受……但是下面的解决方案更加灵活

第一个选项中可能还需要“填充:0”

但我想将文本仅垂直居中而不是水平居中,那么解决方案是什么?

答2:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

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

只需将以下代码添加到容器元素中:

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

弹性盒演示 1

.box { 高度:150px;宽度:400px;背景:#000;字体大小:24px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;填充:0 20px;边距:20px;显示:弯曲;证明内容:中心; /* 水平对齐 / align-items: center; / 垂直对齐 */ } Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh

或者,除了通过 容器 对齐内容,flexbox 还可以使用 auto margin 将 flex 项目 居中,当其中只有一个 flex 项目时flex 容器(如上面问题中给出的示例)。

因此,要使弹性项目水平和垂直居中,只需将其设置为 margin:auto

弹性盒演示 2

.box { 高度:150px;宽度:400px;背景:#000;字体大小:24px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;填充:0 20px;边距:20px;显示:弯曲; } .box 跨度 { 边距:自动; } margin:auto on a flex item 水平和垂直居中

注意:以上所有内容都适用于将项目置于水平行中时居中。这也是默认行为,因为默认情况下 flex-direction 的值为 row。但是,如果需要在 垂直列 中布置弹性项目,则应在容器上设置 flex-direction: column 以将主轴设置为列,另外将 justify-content 和 align-items属性现在以相反的方式工作,justify-content: center 垂直居中,align-items: center 水平居中)

flex-direction:列演示

.box { 高度:150px;宽度:400px;背景:#000;字体大小:18px;字体样式:倾斜;颜色:#FFF;显示:弯曲;弹性方向:列;证明内容:中心; /* 垂直对齐项目 / align-items: center; / 水平对齐项目 */ } p { margin: 5px; } 当 flex-direction 为 column… “justify-content: center” - 垂直对齐 “align-items: center” - 水平对齐

开始使用 Flexbox 以了解其一些功能并获得最大浏览器支持的语法的一个好地方是 flexyboxes

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

对于 display: flex 和 align-items 的跨浏览器兼容性,您可以使用以下内容:

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;

Flexbox support table

当某些文本为 1 行而其他文本为 2 行时,或者任何时候您有不同的高度元素时,这非常有效。对我来说最好的答案。

必须使用该解决方案,它也适用于内部文本。虽然必须添加 height: 100%;

答3:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

您可以通过添加以下 CSS 代码轻松地做到这一点:

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

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

#box { 高度:90px;宽度:270px;背景:#000;字体大小:48px;字体样式:倾斜;颜色:#FFF;文本对齐:居中;边距顶部:20px;左边距:5px;显示:表格单元格;垂直对齐:中间; } 一些文字

不过,看起来这会杀死边距属性。

对我有用,如果我将父 div 设置为 display: flex; justify-content: center; align-items: center;。谢谢

在铬上不起作用..?

答4:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

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

纯 CSS:

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

或者作为 SASS/SCSS Mixin:

@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 的博文Vertical align anything with just 3 lines of CSS:

由于元素被放置在“半像素”上,这种方法会导致元素模糊。解决方案是将其父元素设置为 preserve-3d。如下:

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

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

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

学习吧!

在别人不工作的时候工作

答5:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

所有功劳归此链接所有者@Sebastian Ekström Link;请通过这个。在行动 codepen 中看到它。通过阅读上述文章,我还创建了 a demo fiddle。

只需三行 CSS(不包括供应商前缀),我们就可以借助转换来做到这一点: translateY 垂直居中我们想要的任何内容,即使我们不知道它的高度。

CSS 属性变换通常用于旋转和缩放元素,但通过它的 translateY 函数,我们现在可以垂直对齐元素。通常这必须通过绝对定位或设置行高来完成,但这些需要您知道元素的高度或仅适用于单行文本等。

因此,为此,我们编写:

.element {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
} 

这就是你所需要的。这是一种类似于绝对位置方法的技术,但好处是我们不必在元素上设置任何高度或在父级上设置位置属性。它开箱即用,即使在 Internet Explorer 9 中也是如此!

为了使它更简单,我们可以将其编写为带有供应商前缀的 mixin。

即使对于文本和图像组合,这也对我有用

答6:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

CSS3 flexbox 有一个小小的魔力:

/* 重要 / section { display: flex;显示:-webkit-flex; } section p { / 关键部分 / margin: auto; } / 不重要,着色和 UI */ section { height: 200px;宽度:60%;边距:自动;边框半径:20px;边框:3px 纯橙色;背景色:金色; } 部分 p { 文本对齐:中心;字体系列:Cantarell,Calibri;字体大小:15px;背景颜色:黄色;边框半径:20px;填充:15px; } 我是一个居中的盒子! 弹性盒子很棒!

提示:如果要使文本居中,请将上面标记为“关键部分”的行替换为以下行之一:

仅垂直:margin: auto 0;仅水平:margin: 0 auto;

正如我所注意到的,这个技巧也适用于网格(即 display: grid)。

您能否解释一下为什么在这种情况下 flex 会对段落居中产生这种影响?

@elena事实上,我不知道为什么,我在尝试时发现了。但是,这将是较新版本的 CSS 的考虑因素。例如,如果您在这种情况下将显示更改为网格,它将与弹性框一样工作。我认为网格和 flexbox 带有新的特性来弥补 CSS 之前的缺陷;而这个技巧就是其中之一。

请不要进行只会影响帖子或线程的更改。对帖子的编辑,甚至是您自己的,都应该是实质性的。

@TylerH 对不起,但我不太明白你的意思。为什么要撞?!虽然这不是一个很好的理由,但我已经看到了很多微小的编辑。例如,请参阅下面帖子的最新编辑。另外,请查看 this。我不明白它会产生什么重大(甚至是次要)影响。另外,即使我们认为您是正确的,对整个答案投反对票也是对此类行动的不良反应。

@MAChitgarha 这与编辑建议没有任何关系;这里的问题是您的更改不会对内容产生任何影响/改进;所做的编辑只是为了“碰撞”帖子。另外,我不确定您在谈论关于否决票的内容。

答7:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

这是使用 flexbox 的另一个选项。

#container { 显示:弹性;高度:200px;背景:橙色; } .child { 边距:自动; } Lorem ipsum dolor sit amet consectetur adipisicing elit.鼹鼠,尼莫。

结果

https://i.stack.imgur.com/6d5Tv.png

这是一篇关于在 css 中居中的好文章。 Check it out.

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

答8:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

灵活的方法

div { 宽度:250px;最小高度:50px;行高:50px;文本对齐:居中;边框:1px 实心 #123456;边距底部:5px; } 跨度 { 显示:内联块;垂直对齐:中间;行高:正常; } Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. < /div> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet.

答9:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

我看到了以前的答案,它们仅适用于该屏幕宽度(无响应)。对于响应式,您必须使用 flex。

例子:

div { display:flex; align-items:center; }

答10:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

被接受为答案的解决方案非常适合使用与 div 的高度相同的 line-height,但是当文本被换行或在两行中时,此解决方案无法完美运行。

如果文本被换行或在 div 内的多行上,请尝试这个。

#box
{
  display: table-cell;
  vertical-align: middle;
}

如需更多参考,请参阅:

垂直居中多行文本

6种使用CSS垂直居中的方法

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

您可以使用以下代码片段作为参考。它对我来说就像一个魅力:

html, 身体 { 高度:100%;边距:0;填充:0;宽度:100%; } 身体 { 显示:表; } .centered-text { 文本对齐:居中;显示:表格单元格;垂直对齐:中间; } 是的,这是我的着陆页 正在建设中,即将推出!!!

上述代码片段的输出如下:

https://i.stack.imgur.com/q9DkN.png

原文链接:https://www.huntsbot.com/qa/bLJ9/how-do-i-vertically-center-text-with-css?lang=zh_CN&from=csdn

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

你可能感兴趣的:(css,css3,前端,xhtml,postcss)