如何在具有视口单位的 div 中居中文本?

Posted

技术标签:

【中文标题】如何在具有视口单位的 div 中居中文本?【英文标题】:How can I center text in a div with viewport units? 【发布时间】:2017-02-08 12:17:09 【问题描述】:

当使用像素单位时,我可以毫无问题地对齐文本。但是对于视口单元,我无法到达任何地方。这是我的代码。

#aboutMeTitle 
  height: 10vh;
  background-color: #BEA69B;
  display: block;

#aboutMeTitle p 
  display: inline-block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif, "FontAwesome Regular";
  text-transform: uppercase;
  letter-spacing: 0.2em;
  vertical-align: middle;
  text-align: center;
<div class="row" id="aboutMeTitle">
  <p>About Me</p>
</div>

【问题讨论】:

display: inline-block; 在段落中可能不是是你想要的。 【参考方案1】:

使用 CSS flexbox 非常简单:

#aboutMeTitle 
  display: flex;
  justify-content: center;  /* center p horizontally */
  align-items: center;      /* center p vertically */
  height: 10vh;
  background-color: #BEA69B;

#aboutMeTitle p 
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.2em;
<div class="row" id="aboutMeTitle">
  <p>About Me</p>
 </div>

浏览器支持: 所有主流浏览器都支持 Flexbox,except IE < 10。一些最新的浏览器版本,例如 Safari 8 和 IE10,需要vendor prefixes。要快速添加所需的所有前缀,请使用Autoprefixer。更多细节在this answer。

【讨论】:

这也有效。我应用了一个'line-height:10vh',这成功了,但弹性盒子也做了同样的事情。我只是想知道哪种技术得到更广泛的支持? 您已经在使用视口百分比单位。所以你可以安全地使用 flexbox。两者都是尖端的 CSS3 技术。就哪个得到更广泛的支持而言,那就是 flexbox(参见 caniuse.com)。【参考方案2】:

要使 vertical-align:middle 工作,必须将父级设置为 display:table-cell html

<div class="row" id="aboutMeTitle"><p>About Me</p></div>

CSS

#aboutMeTitle 
height: 10vh;
background-color: #BEA69B;
display:block;
display:table-cell;


#aboutMeTitle p 
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif, "FontAwesome Regular";
text-transform: uppercase;
letter-spacing: 0.2em;
vertical-align:middle;
text-align:center;

【讨论】:

修复了 text-align 属性恢复正常,使其水平居中。但是我不能让它垂直居中。通常我只是将行高设置为与 div 相同的值,但您不能将行高设置为视口单位;或者如果可以的话,我不知道这样做的技巧。有什么见解吗? 对不起,我的标题用错了。我的主要问题是垂直对齐,而不是文本的水平对齐。【参考方案3】:

您刚刚删除了#aboutMeTitle p 中的display: inline-block,并添加了line-height: 10vh; 以使文本居中垂直。

HTML 代码:

<div class="row" id="aboutMeTitle"><p>About Me</p></div>

CSS 代码:

#aboutMeTitle 
    height: 10vh;
    background-color: #BEA69B;
    display: block;

#aboutMeTitle p 
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif, "FontAwesome Regular";
    text-transform: uppercase;
    letter-spacing: 0.2em;
    vertical-align:middle;
    line-height: 10vh;
    text-align:center;

JSFIDDLE DEMO

【讨论】:

【参考方案4】:

我觉得自己真的很愚蠢,我很抱歉打扰到任何人。希望这个答案可以帮助其他人。我在 4 小时的睡眠中加倍工作,现在我正在做一个个人项目。无论如何,您可以使用视口单位应用 line-height 属性,我只需要对其进行硬编码,因为它不是 DW CSS 面板中的选项。

这是固定的 CSS

#aboutMeTitle 
    height: 10vh;
    background-color: #BEA69B;
    display: block;

#aboutMeTitle p 
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif, "FontAwesome Regular";
    text-transform: uppercase;
    letter-spacing: 0.2em;
    vertical-align: middle;
    text-align: center;
    line-height: 10vh;

【讨论】:

以上是关于如何在具有视口单位的 div 中居中文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在固定宽度的 div 中居中动态宽度按钮?

HTML / CSS如何在绝对DIV中居中DIV [重复]

如何使页脚粘在页面底部并在 Bootstrap 中居中?

在 Div 中居中超大图像

使用引导程序在 div 中居中文本 [重复]

如何在 div 中居中输入 [重复]