这个问题在这里已经有了答案:如何将元素水平和垂直居中(26 个答案)如何垂直对齐 div 中的文本? (33 个回答) 3 年前关闭。
我有一个包含文本的
这是我的
#box { 高度:170px;宽度:270px;背景:#000;字体大小:48px;颜色:#FFF;文本对齐:居中; } Lorem ipsum dolor sit
实现这一目标的最佳方法是什么?
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
您可以尝试这种基本方法:
div {高度:100px;行高:100px;文本对齐:居中;边框:2px 虚线 #f69c55; } 你好,世界!
但是它只适用于单行文本,因为我们将行的高度设置为与包含框元素相同的高度。
更通用的方法
这是垂直对齐文本的另一种方法。此解决方案适用于单行和多行文本,但仍需要固定高度的容器:
div {高度:100px;行高:100px;文本对齐:居中;边框:2px 虚线 #f69c55; } 跨度 { 显示:内联块;垂直对齐:中间;行高:正常; } Hello World!
CSS 仅调整
模拟表格显示
这是另一个选项,它可能不适用于较旧的 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”
但我想将文本仅垂直居中而不是水平居中,那么解决方案是什么?
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%;
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;。谢谢
在铬上不起作用..?
与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。
这将是从现在开始制作网站的方式。
学习吧!
在别人不工作的时候工作
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。
即使对于文本和图像组合,这也对我有用
与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 这与编辑建议没有任何关系;这里的问题是您的更改不会对内容产生任何影响/改进;所做的编辑只是为了“碰撞”帖子。另外,我不确定您在谈论关于否决票的内容。
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提供了这个机会
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而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.
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
我看到了以前的答案,它们仅适用于该屏幕宽度(无响应)。对于响应式,您必须使用 flex。
例子:
div { display:flex; align-items:center; }
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
被接受为答案的解决方案非常适合使用与 div 的高度相同的 line-height,但是当文本被换行或在两行中时,此解决方案无法完美运行。
如果文本被换行或在 div 内的多行上,请尝试这个。
#box
{
display: table-cell;
vertical-align: middle;
}
如需更多参考,请参阅:
垂直居中多行文本
6种使用CSS垂直居中的方法
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洞察每一个产品背后的需求与收益,从而捕获灵感