css 除非必要,否则避免换行,同时允许在换行元素的最后一行之后立即进行文本流

nzkunb0c  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(131)

这基本上是对Avoiding line wrapping unless necessary with CSS的更严格的后续。
我有一个与上一个问题非常相似的目标:
1.将<span>中的单词放在一起-更喜欢在<span>之前断开。
1.如果<span>的长度超过了它的容器的宽度,则允许在<span>内部使用换行符。
1.如果<span>足够短,它在开始的同一行上结束,则保留<span>之前的单词以及span,以及它之后的单词。
不过,我还有一个额外的要求:
1.如果<span>很长,必须在里面换行, 后面的 * 文本内容必须紧跟在<span>的最后一个字符之后。*
上一个问题的答案使用display: inline-block来确保span的单词保持在一起,除非它们必须中断。它足够远以满足上述三点,但在最后一点上失败了,因为-根据inline-block的性质-span现在占据了其最右边的全部空间.即使最右边的边缘只在前一行上被击中!
请看下面的演示:

p {
  max-width: 180px;
  background: #fee;
  border: 3px solid red;
  padding: 8px;
}

span:nth-of-type(1) {
  display: inline-block;
  background: yellow;
}

span:nth-of-type(2) {
  display: inline-block;
  background: cyan;
}

个字符
请注意,(第二个,青色)<span>后面的句点是如何被向下推到span * 下面的行的,因为即使span的最后一行在 Package 点之前结束,* <span>本身 * 也和整行一样宽。这两个span都使用display: inline-block样式,但只有较短的一个与下面的文本完全匹配。
我不知道有什么属性组合可以让文本在插入一个span中的wrap后很好地流动,而span中的单词是保持在一起的。看起来inline-block行就是不起作用,但我不知道还能在哪里查找。

w7t8yxp5

w7t8yxp51#

这里有一个相当粗略的解决方案,它将内联块元素越嵌套越深,这样“following”内容就真正包含在它的父span中。(样式或行为用<u>或其他标记来区分。)

p {
  max-width: 180px;
  background: #fee;
  border: 3px solid red;
  padding: 8px;
}

span {
  background: #4444;
  display: inline-block;
}

p > span > u {
  background: yellow;
}

p > span > span > u {
  background: cyan;
}

个字符
上面的<span>是透明的灰色,所以“较暗”的一个表示它嵌套得更深。HTML基本上有这样的结构:

<p>
  Blah blah blah...
  <span style="display: inline-block">
    <u>Some styled text which should stick together, unless a break is necessary</u>
    More content, la dee da
    <span style="display: inline-block">
      <u>More styled text sticking together</u>
      More content.
    </span>
  </span>
</p>


这个工作(!),但从作者身份 * 或 * HTML生成的Angular 来看(例如从Markdown或其他源文本转换),它几乎站不住脚。
我很想找到一个替代的解决方案,它不那么严重地依赖于将标记篡改成一个不自然的嵌套形式。

相关问题