css 防止元素的最后一个单词与另一个元素之间换行

8xiog9wr  于 2023-01-18  发布在  其他
关注(0)|答案(4)|浏览(146)

给定一个包含可变长度文本的内联(或内联块)元素,以及第一个元素右侧的另一个元素,作为一种标记,是否有办法防止第一个元素和第二个元素的最后一个单词之间的换行符?两个元素占用同一行是可以的;出现在第一元素的文本中的换行符也是可以的;但是两个元素之间的换行符是不可取的。2这里有一个例子来解释我的意思。

有什么办法可以做到这一点吗?我试着把这两个元素作为跨度,并在它们之间放置一个不间断的空格,但没有效果。

网页:

<h1>
  <span class="title-text">
    This is some text
  </span><span class="badge">yo!</span>
</h1>
<h1>
  <span class="title-text">
    This is some broken text
  </span><span class="badge">yo!</span>
</h1>

CSS:

h1 {
  width: 350px;
}

.badge {
  color: #f6511d;
  display: inline-block;
  border: 1px solid #f6511d;
  border-radius: 3px;
  font-size: 0.8em;
  padding: 0.1em 0.2em;
  line-height: 0.97em;
  margin-left: 0.4em;
  vertical-align: 1px;
}
    • UPDATE2:**在我的特殊情况下,第一个元素中的文本和徽章都必须使用JavaScript动态呈现,所以下面Ricardo的解决方案(用white-space: nowrap将文本的最后一个单词和徽章 Package 在一个span中)虽然有效,但实现起来并不容易。
ars1skjm

ars1skjm1#

检查这个!这一行<h1>This is some text</h1><span class="badge">yo!</span>必须在一行中才能工作。
https://codepen.io/lemonjelly/pen/rNNvLGE

mpbci0fu

mpbci0fu2#

    • 解决方案:**

我能想到的解决方案是创建某种修复,将文本与徽章 Package 在span中,并使用css属性white-space: nowrap;

    • 一个
    • 代码片段:**
.row {
  display: flex;
  counter-reset: paragraph;
}
.col {
  width: 50%;
  padding: 1em;
}
.col--left {
  background-color: #011627;
  padding-right: 0;
}
.col--right {
  background-color: #F71735;
  border-left: 2px dotted #ddd;
}
.col p {
  color: #fff;
}
.col p::before {
  counter-increment: paragraph;
  content: counter(paragraph)". ";
}
.badge-fix {
  display: inline-block;
  white-space: nowrap;
}
.badge {
  display: inline-block;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: 700;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
.badge--royalblue {
  background-color: royalblue;
}
.badge--tomato {
  background-color: tomato;
}
.badge--crimson {
  background-color: crimson;
}
<div class="row">
  <div class="col col--left">
    <p>
      This is <span class="badge-fix">some text
      <span class="badge badge--royalblue">badge</span></span>
    </p>
    <p>
      This is some <span class="badge-fix">reasonably long
      <span class="badge badge--tomato">badge</span></span>
    </p>
    <p>
      This is some <span class="badge-fix">longish text
      <span class="badge badge--crimson">badge</span></span>
    </p>
  </div>
  <div class="col col--right">

  </div>
</div>
63lcw9qa

63lcw9qa3#

这个问题在排版中被称为“寡妇”。有三种方法可以解决这个问题。

使用widows css属性

只把最后两个字连在一起。

<h1 style="widows: 2;">
  <span>This is some broken text</span>
  <span class="badge">yo!</span>
</h1>

使用&nbsp;字符

在最后一个单词和标记之间添加一个“物理”非中断空格字符,并且仅添加该字符。

<h1 style="widows: 2;">
  This is some broken text&nbsp;<span class="badge">yo!</span>
</h1>

如果必须对多行代码执行此操作,可以使用HTML注解来避免中断空格。

<h1 style="widows: 2;">
  This is some broken text<!--
  -->&nbsp;<span class="badge">yo!</span>
</h1>
  • 警告:这太丑了 *

white-space: nowrap的跨度将最后一个单词和徽章括起来。

<h1 style="widows: 2;">
  This is some broken <span style="white-space: nowrap;">text <span class="badge">yo!</span></span>
</h1>
  • 警告:如果您处理的是动态生成的代码,则并非总是可行 *
vbopmzt1

vbopmzt14#

您可以向文本添加填充和负边距:

<h1>
  <span class="title-text" style="padding-right: 15px;">
    This is some text
  </span><span class="badge" style="margin-left: -15px;">yo!</span>
</h1>
<h1>
  <span class="title-text" style="padding-right: 15px;">
    This is some broken text
  </span><span class="badge" style="margin-left: -15px;">yo!</span>
</h1>

这甚至适用于动态生成的内容,而不必在文本和图像的最后一个单词周围做一个标记。
(根据我在这里看到的答案:https://stackoverflow.com/a/25857961/5899236

相关问题