当前位置: 首页 > 知识库问答 >
问题:

如何垂直对齐FlexBox中的文本?

解晟
2023-03-14

我想使用flexbox来垂直对齐

  • 中的一些内容,但没有取得很大的成功。

    我在网上查了一下,很多教程实际上都使用了包装器div,它从父级的flex设置中获得align-items:center,但我想知道是否可以去掉这个附加元素?

    我选择在此实例中使用flexbox,因为列表项高度将是动态的%

    null

    * {
      padding: 0;
      margin: 0;
    }
    
    html,
    body {
      height: 100%;
    }
    
    ul {
      height: 100%;
    }
    
    li {
      display: flex;
      justify-content: center;
      align-self: center;
      background: silver;
      width: 100%;
      height: 20%;
    }
    <ul>
      <li>This is the text</li>
    </ul>

    null

  • 共有2个答案

    姚宪
    2023-03-14

    最好的方法是在flexbox中嵌套一个flexbox。您所要做的就是给孩子align-items:center。这将垂直对齐其父文本内部的文本。

    // Assuming a horizontally centered row of items for the parent but it doesn't have to be
    .parent {
      align-items: center;
      display: flex;
      justify-content: center;
    }
    
    .child {
      display: flex;
      align-items: center;
    }
    
    漆雕亮
    2023-03-14

    不使用align-self:center,而使用align-items:center

    不需要更改flex-direction或使用text-align

    下面是您的代码,只需做一个调整,就可以使其正常工作:

    ul {
      height: 100%;
    }
    
    li {
      display: flex;
      justify-content: center;
      /* align-self: center;    <---- REMOVE */
      align-items: center;   /* <---- NEW    */
      background: silver;
      width: 100%;
      height: 20%; 
    }
    

    align-self属性适用于flex项。但您的LI不是flex项,因为它的父项UL没有应用display:flexdisplay:inline-flex

    因此,ul不是flex容器,li不是flex项,align-self没有任何影响。

    align-items属性与align-self类似,只是它适用于flex容器

    由于li是一个flex容器,因此可以使用align-items将子元素垂直居中。

    null

    * {
      padding: 0;
      margin: 0;
    }
    html, body {
      height: 100%;
    }
    ul {
      height: 100%;
    }
    li {
      display: flex;
      justify-content: center;
      /* align-self: center; */
      align-items: center;
      background: silver;
      width: 100%;
      height: 20%;
    }
    <ul>
      <li>This is the text</li>
    </ul>
     类似资料:
    • 问题内容: 目标:纯Canvas上的Android> = 1.6。 假设我想编写一个函数,该函数将绘制一个(宽度,高度)大的红色矩形,然后在其中绘制一个黑色的 Hello World 文本。我希望文本在视觉上位于矩形的中心。因此,让我们尝试: 现在,我不知道要在drawText的参数中加上标记的内容,即我不知道如何垂直对齐文本。 就像是 ???? = topLeftY + height / 2 +

    • 问题内容: 我试图找到最有效的方法来使div对齐文本。我尝试了几件事,但似乎都没有用。 问题答案: 对于CSS 2浏览器,可以使用/ 来使内容居中。 jSFiddle提供了一个示例: 可以将旧浏览器(Internet Explorer 6/7)的hack合并为样式,并用于从较新的浏览器中隐藏样式:

    • 垂直对齐 1. grid-template-areas 属性值保持换行,并使用空格保持每列垂直对齐。 例如: .foo { grid-template-areas: "header header" "nav main" "footer ...."; } 2. grid、grid-template

    • 问题内容: 下面的代码(也可以在JSFiddle上作为演示使用没有将文本放在中间,正如我理想中的那样。即使使用属性,我也找不到任何方法可以使文本垂直居中。我怎样才能做到这一点? 问题答案: 创建一个用于文本内容的容器,也许是。 JSFiddle

    • 问题内容: 我试图在一个JPanel中垂直对齐(居中)两个JLabel。 我尝试使用setAligmentY()失败。这两个标签始终显示在JPanel的顶部。 UPD:标签应该像使用FlowLayout那样彼此相邻放置,但应位于JPanel的中间。 问题答案: 使用具有默认约束的。这是一个小的演示代码:

    • 如图所示,我有代码在屏幕上绘制文本。textalign函数仅支持水平对齐。现在,我要添加对垂直对齐的支持。有人能帮我一下吗? 代码