【问题标题】:How to left align the 2nd line of a text if initial text-align is center如果初始文本对齐为中心,如何左对齐文本的第二行
【发布时间】:2023-03-03 19:32:02
【问题描述】:

如果文本中只有一行,我需要居中对齐文本,但如果有,则左对齐第二行

我上网查了一下,没找到解决办法。

您可以将法线设置为:

text-align: center

我希望初始文本居中,但如果它换行到第二行,我希望文本从左侧而不是中心开始。

最终结果的图片:

但是如果它只是一行,我希望它像下面这样居中

【问题讨论】:

  • 我认为没有任何简单的方法可以单独使用 CSS 来实现。
  • @04FS 是对的。没有办法在 CSS 中实现这个逻辑。不过用 JS 没那么难
  • @TemaniAfif 但 Safari 不支持 text-align-last。如果你问我,交易破坏者。

标签: html css


【解决方案1】:

你可以使用display:table来做到这一点

.wrapper {
  max-width: 400px;
  margin: auto;
  border: 2px solid;
}

.wrapper h1 {
  text-align: center;
  margin:5px;
}

.wrapper>div {
  display: table;
  margin: auto; /* center the block of text keep the default text-align:left inside*/
}
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet</div>
</div>

<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur adipiscing</div>
</div>
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur<br> adipiscing</div>
</div>
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur adipiscing. Mauris luctus laoreet nibh,</div>
</div>

inline-block

.wrapper {
  max-width: 400px;
  margin: auto;
  border: 2px solid;
  text-align: center; /*center the text container*/
}

.wrapper h1 {
  margin:5px;
}

.wrapper>div {
  display: inline-block;
  text-align:left; /*keep the text left aligned inside*/
}
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet</div>
</div>

<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur adipiscing</div>
</div>
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur<br> adipiscing</div>
</div>
<div class="wrapper">
  <h1>Title</h1>
  <div>Lorem ipsum dolor sit amet, consectetur adipiscing. Mauris luctus laoreet nibh,</div>
</div>

【讨论】:

  • @Aaron3219 如果我们考虑相同的文本,您的代码也会发生同样的情况;) jsfiddle.net/Lu0dn1et ... 这是换行的逻辑结果,因此文本完全居中。但如果我像你一样考虑br,我会得到你期望的结果:jsfiddle.net/4km7zhb6
  • 是的,我在您发表评论之前删除了我的评论……没有考虑足够的问题。我正在对这个问题进行编辑。
  • 而且我认为所有答案都是有效的,只是一个偏好。
  • @TemaniAfif 这似乎可以通过对当前设置进行一些更改来完成我想要的操作。谢谢。
【解决方案2】:

不要这样做(或类似的事情):

.wrapper {
  text-align: center; 
  width: 100%
}
<div class="wrapper">
  <p>Title</p>
  <div class="text">
    Example-TextExample-TextExample-TextExample-Text<br> Example-Text
  </div>
</div>

只需在其周围包裹一个容器并将其居中:

.wrapper {
  width: 100%; 
  text-align: center;
}

.text {
  display: flex; 
  justify-content: center; 
  text-align: left;
}
<div class="wrapper">
  <p>Title</p>
  <div class="text">
    <p>Example-TextExample-TextExample-TextExample-Text<br>Example-Text</p>
  </div>
</div>

【讨论】:

【解决方案3】:

首先,我想说的是,如果没有 CSS,这是无法实现的,您需要对代码使用样式。接下来,有多种方法可以达到预期的效果。我将继续解释其中的每一个。

1。 text-align-last 属性:

直接从 W3Schools 引用:

text-align-last 属性指定如何对齐文本的最后一行。

请注意,text-align-last 属性设置所选元素中所有最后一行的对齐方式。因此,如果您有一个包含三个段落的文本,则 text-align-last 将应用于每个段落的最后一行。要仅在容器中的最后一段使用text-align-last,您可以使用 :last child。

注意:在 Edge/Internet Explorer 中,text-align-last 属性仅适用于具有 "text-align: justify" 的文本。

浏览器支持:

代码片段:

div.a {
  text-align: center;
  -moz-text-align-last: right; /* For Firefox prior 58.0 */
  text-align-last: left;
}
<div class="a">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam semper diam at erat pulvinar, at pulvinar felis blandit. Vestibulum volutpat tellus diam, consequat gravida libero rhoncus ut.</p>
</div>

2。使用span:

默认情况下,span 是一个内联元素,但您可以将display: block 设置为它,然后您可以以不同的方式进行文本对齐。注意这里使用!important

代码片段:

p {
  text-align: center;
}
span {
  text-align: left !important;
  display: block;
}
<p>
  This is the first line
  <span>Second Line</span>
</p>

3。使用包装器:

我不想重复已经提供的答案。 Aaron3219 已经使用包装器来回答这个问题。这个答案可以在here找到。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多