【问题标题】:How do I vertically align text in a paragraph?如何垂直对齐段落中的文本?
【发布时间】:2012-06-18 14:22:38
【问题描述】:

我想知道将p 元素中的文本对齐到垂直居中。

这是我的风格:

p.event_desc {
     font: bold 12px "Helvetica Neue", Helvetica, Arial, sans-serif;
     line-height: 14px;
     height: 35px;
     margin: 0px;
}
<p class="event_desc">Lorem ipsum.</p>

【问题讨论】:

标签: html css


【解决方案1】:

精确地垂直对齐段落中的文本。

HTML

<main>
    <p><span>TEXT to be centered in P tag</span></p>
</main>

CSS

main {
        height: 400px;
        position: relative;
}

main>p {
        min-height: 128px;
        line-height: 128px;

        font-size: 48px;

        position: relative;

        top: 50%;
        transform: translateY(-50%);
        -webkit-transform: translateY(-50%);
        -moz-transform: translateY(-50%);
        -ms-transform: translateY(-50%);
}

main>p>span {
        position: absolute;

        left: 0;
        right: 0;
        top: 64px;
        transform: translateY(-68px);
        -webkit-transform: translateY(-68px);
        -moz-transform: translateY(-68px);
        -ms-transform: translateY(-68px);

        text-align: center;
}

【讨论】:

    【解决方案2】:

    所以我个人不确定最佳方法,但我发现垂直对齐效果很好的一件事是使用 Flex,因为你可以证明它的内容!

    假设您有以下 HTML 和 CSS:

    .paragraph { 
          font-weight: light;
          color: gray;
          min-height: 6rem;
          background: lightblue;
      }
    <h1 class="heading"> Nice to meet you! </h1>
    <p class="paragraph"> This is a paragraph </p>

    我们最终得到一个不垂直居中的段落,现在如果我们使用 Flex Column 并应用最小高度 + BG,我们会得到以下结果:

    .myflexbox {
        min-height: 6rem;
        display: flex;
        flex-direction: column;
        justify-content: center;
        background: lightblue;
    }
    
    .paragraph { 
          font-weight: light;
          color: gray;
      }
    <h1 class="heading"> Nice to meet you! </h1>
    <div class="myflexbox">
        <p class="paragraph"> This is a paragraph </p>
    </div>

    但是,在某些情况下,您不能轻易地将 P 标签包装在 div 中,在 P 标签上使用 Flexbox 是非常好的,即使这不是最好的做法。

    .myflexparagraph {
        min-height: 6rem;
        display: flex;
        flex-direction: column;
        justify-content: center;
        background: lightblue;
    }
    
    .paragraph { 
          font-weight: light;
          color: gray;
      }
    <h1 class="heading"> Nice to meet you! </h1>
    <p class="paragraph myflexparagraph"> This is a paragraph </p>

    我不知道这是好是坏,但如果这仅对某个地方的一个人有所帮助,那还是一无是处!

    【讨论】:

      【解决方案3】:

      用户 vertical-align: middle; 以及 text-align: center 属性

      <!DOCTYPE html>
      <html>
      <head>
      <style>
      .center {
        border: 3px solid green;
        text-align: center;
      }
      
      .center p {
        display: inline-block;
        vertical-align: middle;
      }
      </style>
      </head>
      <body>
      
      <h2>Centering</h2>
      <p>In this example, we use the line-height property with a value that is equal to the height property to center the div element:</p>
      
      <div class="center">
        <p>I am vertically and horizontally centered.</p>
      </div>
      
      </body>
      </html>
      

      【讨论】:

        【解决方案4】:

        在我的情况下,边距自动工作正常。

        p {
            font: 22px/24px Ubuntu;
            margin:auto 0px;
        }
        

        【讨论】:

          【解决方案5】:

          以下样式将为您垂直居中。

          p.event_desc {
           font: bold 12px "Helvetica Neue", Helvetica, Arial, sans-serif;
           line-height: 14px;
           height: 35px;
           display: table-cell;
           vertical-align: middle;
           margin: 0px;
          }
          

          【讨论】:

            【解决方案6】:

            适用于多行文本的替代解决方案:

            设置垂直和水平填充为(height - line-height) / 2

            p.event_desc {
                font: bold 12px "Helvetica Neue", Helvetica, Arial, sans-serif;
                line-height: 14px;
                padding: 10.5px 0;
                margin: 0px;
            }
            

            【讨论】:

              【解决方案7】:

              如果涉及表格或设置行高的答案对您不起作用,您可以尝试将 p 元素包装在 div 中,并设置其相对于父 div 高度的定位样式。

              .parent-div{
                width: 100px;
                height: 100px;
                background-color: blue;
              }
              
              .text-div{
                position: relative;
                top: 50%;
                transform: translateY(-50%);
              }
              
              p.event_desc{
                font: bold 12px "Helvetica Neue", Helvetica, Arial, sans-serif;
                color: white;
                text-align: center;
              }
              <div class="parent-div">
                <div class="text-div">
                 <p class="event_desc">
                  MY TEXT
                 </p>
                </div>
              </div>

              【讨论】:

              • 这似乎只适用于具有设定高度的父元素。
              【解决方案8】:

              如果您使用 Bootstrap,请尝试将 margin-bottom 0 分配给段落,然后将属性 align-items-center 分配给容器,例如,像这样:

              <div class="row align-items-center">
                   <p class="col-sm-1 mb-0">
                        ....
                   </p>
              </div>
              

              Bootstrap 默认分配一个计算边距底部,所以 mb-0 禁用了这个。

              希望对你有帮助

              【讨论】:

                【解决方案9】:

                试试这些样式:

                p.event_desc {
                  font: bold 12px "Helvetica Neue", Helvetica, Arial, sans-serif;
                  line-height: 14px;
                  height:75px;
                  margin: 0px;
                  display: table-cell;
                  vertical-align: middle;
                  padding: 10px;
                  border: 1px solid #f00;
                }
                &lt;p class="event_desc"&gt;lorem ipsum&lt;/p&gt;

                【讨论】:

                • 我是 HTML CSS 新手。我努力寻找不涉及表格的答案(因为显然它们很糟糕......)。这个答案太简单了,所以我正在使用它。
                • @vivekmaharajh 使用 HTML 表格标签进行布局是不好的。我不认为在display 中使用表格来处理这样的事情是不好的。
                • 如果您希望段落跨越整个宽度但只包含几个单词怎么办?
                • 除了现在我不能
                【解决方案10】:

                你可以使用

                    line-height:35px;
                

                你真的不应该在段落上设置高度,因为它不利于可访问性(如果用户增加文本大小等会发生什么)

                改为使用具有高度的 Div 和其中的 p 以及正确的行高:

                    <div style="height:35px;"><p style="line-height:35px;">text</p></div>
                

                【讨论】:

                  【解决方案11】:

                  您可以为此使用line-height。只需将其设置为您的 p 标记的确切高度即可。

                  p.event_desc {
                    line-height:35px;
                  }
                  

                  【讨论】:

                  • @Gatekeeper 在这种情况下,我们可以简单地将容器内的段落对齐,使其垂直居中。比如用这个方法:Centering in the Unknown.
                  • 哇,你真的在​​星期五下午学习了一些新东西......很酷:-D
                  • 在表格布局时代,每个人都喜欢 valign! ;)
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-09-14
                  • 1970-01-01
                  • 2013-01-04
                  • 1970-01-01
                  • 2014-11-15
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多