【问题标题】:How can I centre left aligned text even when it wraps?即使换行,如何将左对齐文本居中?
【发布时间】:2012-01-31 22:24:58
【问题描述】:

我需要在 div 中将左对齐文本块居中,但我需要将文本块的视觉宽度而不是块本身居中。

在许多情况下,这可能是同一件事,但考虑一下 div 相当窄(想想移动设备宽度)并且文本太长而无法放在一行中的情况,因此需要溢出。

在下面的示例中,我将文本块显示为浅蓝色以进行说明,但实际上它们将与父 div 的颜色相同(白色)。在使用的任何文本中也没有换行符。

1a中,文本只有一行,小于文本块的最大宽度,所以我可以将文本块设置为文本的宽度,没有'没问题。

然而,在2a 中,文本比最大宽度长,因此换行到下一行。这样做的效果是可见文本块不再居中显示。

如何仅使用 HTML 和 CSS 将这两种情况显示为 1b 和 2b

编辑1:似乎每个人都在告诉我如何实现1a和2a中的情况,但我已经有了。我想实现1b和2b的情况。

编辑 2:我使用的代码与 David 在他的链接 (http://jsfiddle.net/davidThomas/28aef/) 中给出的代码基本相同。文本区域使用颜色只是为了说明这一点。如果将其更改为白色 (http://jsfiddle.net/28aef/2/),您可以看到文本块不再居中(即左右边距不相等)

【问题讨论】:

  • 所以...居中容器内的左对齐文本?这对于 just html 和 css 可能很困难,因为您似乎也希望文本垂直居中。
  • @DavidThomas:如果您知道在 JS 中执行此操作的简单方法,我会认为它是一种备份选项,但如果可能的话,我想避免它。
  • 您使用的是什么 html?
  • @johnwait 但你能让它与具有width: auto 的容器一起工作吗?
  • 这是一个演示问题的小提琴,我们仍然没有解决方案:jsfiddle.net/brettdonald/fm0zxpuv/1

标签: html css alignment text-alignment


【解决方案1】:
<div style="text-align:center;">
    <div style="display:inline; text-align:left; margin:20px;"> <!-- or whatever width you want that block to be at -->
          Content here
     </div>
</div>

基本上,第一个 div 是您的包含元素。您需要文本居中对齐。

然后,在您的块 div(蓝色区域)中,您需要显示内联和文本左对齐,然后设置边距(文本换行时要在其周围保留的空白)。

【讨论】:

  • 这将给出我在 1a 和 2a 中的确切情况,这就是问题所在。
  • 不,只要你把这个宽度设置成你不希望div超过的宽度,就可以了。 div 看起来像 2b。
  • 文本换行时不起作用。视觉上文本区域(不是 div 区域)的宽度太靠左了。
  • 你的意思是文本超出了div吗?还是您的意思是您需要在 div 内部进行填充,以使其不会正好靠在边缘?
  • 你能链接到你正在测试的页面,这样我就可以看到你在做什么?
【解决方案2】:

我知道这很旧,但我也遇到了同样的问题,我同意这些都不能解决它。这个可能不是 100% 跨浏览器(尚未完成测试),但它可以工作!

现在的限制是你必须自己输入换行符,但似乎无论在这种情况下都需要这样做。

http://jsfiddle.net/28aef/2/

div.textContainer {
    text-align: center;
    border: 1px solid #000;
    height: 100px;
    padding: 10px 0;
}

div.textContainer p {
    display: inline-block;
    text-align: left;
}

【讨论】:

  • 这是在 Chrome 上显示带有边框的左对齐文本。
  • 当文本换行时,它仍然 不居中 - 这是这里的主要问题。
【解决方案3】:

我猜这早已成为原始海报的非问题,但我有同样的问题并且正在谷歌搜索寻找答案。以下是我发现的结果。

免责声明:我不是这方面的专家,其他人可能有更优雅的方式来处理这种情况,但它适用于我的应用程序,也可能适用于其他应用程序,所以我想我会发布它。

<div style = "text-align: center; margin-left: 10%; margin-right: 10%">
    <div style = "display: inline-block; text-align: left;">
        Desired text goes here.
    </div>
</div>

请注意,在上面的第一个 div 中可能不需要,并且可以将边距移动到第二个 div 几乎没有变化。根据需要定制百分比或指定像素宽度,您应该已准备就绪。希望这可以在某些时候为某人节省一些时间,并且不会产生任何新问题。祝大家好运。

【讨论】:

  • 你能举个例子,因为它似乎没有回答最初的问题。
【解决方案4】:

我知道这是旧的,但尚未得到答复。至少可以使用calc() vh 和 vw(视口单位)以及一些数学来完成。 诀窍似乎是手动将左侧和顶部设置为居中。我使用视口单位是因为它们的准确性和不断变化的效果。

    .clr	{ clear:both; }
    .bg666	{ background:#666;}  
    .bgf4	{ background: #f4f4f4; }
    .hv60	{ height: 60vh; }
    .hv50	{ height: 50vh; }
    .wv60	{ width: 60vw; }
    .wv50	{ width: 50vw; }
    .tlset	{ position:relative; left: 30px; top: 30px; }
    .true_cntr_inner { position:relative; left: calc(60vw - 50vw - 5vw);  top: calc(60vh - 50vh - 5vh); } /* left = (60% - 50% of inner block / 2);*/
    <div class = 'clr wv60 hv60 bg666 tlset'>
        <div class = 'clr wv50 hv50 true_cntr_inner bgf4'>
            this is some text that spans acrossed 50% of the viewport. 
            I state the obvious because I believe people can see the obvious and I 
            was wrong a lot. Now it has become somewhat of a habit like bad spelling 
            so forgive me. 
        </div>
    </div>

我正在寻找一种解决方案,以在调整窗口大小时将包含 DIV 的文本居中并调整其大小。在意识到使用常规 CENTER 方法存在问题后,我遇到了这篇文章并找到了解决方法。希望对你有帮助。

【讨论】:

    【解决方案5】:

    Flexbox 可能不错:

      .d-flex {
          display: -ms-flexbox;
          display: flex;
      }
      .flex-column {
          -ms-flex-direction: column;
          flex-direction: column;
      }
      .ml-auto, .mx-auto {
          margin-left: auto;
      }
      mr-auto, .mx-auto {
          margin-right: auto;
      }
      .w-50 {
          width: 50%;
      }
    <div class="d-flex flex-column mx-auto w-50">
      <p>Left aligned text</p>
      <p><em>Aenean sed lectus massa, quis fringilla magna. Morbiporta sapien quis ligula viverra condimentum non vel nunc. Ut ac pulvinar nibh. Sed vitae eros et purus ullamcorper fermentum eu a libero. Curabitur vitae dolor ligula, varius tincidunt arcu. Quisque lectus magna, semper sed tincidunt nec, mattis vel justo.</em></p>
      <p>Using <a href="https://getbootstrap.com/docs/4.1/utilities/flex/">Bootstrap 4</a> classes.</p>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2016-01-15
      • 2013-04-17
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多