css 文本和SVG之间没有换行符

yacmzcpb  于 2023-01-14  发布在  其他
关注(0)|答案(4)|浏览(404)

我有一个简短的文本,后面是一个SVG在一个有限宽度的容器。预期的行为是,如果文本的长度超过容器的宽度,但我不希望它在文本和SVG之间中断:

当前结果:

预期成果:

在文本中间(蓝色之前)添加<nobr><span>标记并在SVG之后关闭它不是一个选项,因为文本来自外部数据库,无法编辑。

<span class="text">
    Jack Wolfskin Jacke Colorado Flex - Midnight Blue
</span>
<span class="svg">
    <svg>
    ....
    </svg>
</span>
xlpyo6sf

xlpyo6sf1#

添加显示块到svg容器:

.svg {
  display: inline-block;
}
ocebsuys

ocebsuys2#

我找到的唯一解决方案需要对原始HTML进行一次糟糕的更改。
为了确保图标不会单独出现在新的一行中,我用white-space: no-wrap;将最后一个单词和图标 Package 在一个新元素中,另外,如果我们希望它仍然可以拆分,如果行不能容纳最后一个单词和图标,我们可以使这个新容器内联flex和flex-wrappable。

<div>
  Lorem ipsum dolor sit
  <span class="last_word">
      very_long_last_word
      <svg>...</svg>
  </span>
</div>
.last_word {
  /* Stick icon to last word */
  white-space: no-wrap;  
  
  /* Make sure last word and icon will break ultimately */
  display: inline-flex;
  flex-wrap: wrap; 
}

示例:https://jsfiddle.net/uerzo6sa/

yqyhoc1h

yqyhoc1h3#

您可以使用此标记来防止换行。它不需要包含最后一个单词,因此您甚至可以在生成的内容中使用它。

JSX
<div>
  {children}
  <span className="tail">
      {'\u00a0'}
      <svg></svg>
  </span>
</div>
HTML
<div>
  Lorem ipsum dolor sit<span class="tail">&nbsp;<svg></svg></span>
</div>
CSS
.tail {
  white-space: no-wrap;  
}

https://jsfiddle.net/radarfox/65h40jt7/

a2mppw5e

a2mppw5e4#

您可以在SVG上定义position: absolute,用auto表示topright等。
https://codepen.io/jsit/pen/xxOQoVW
唯一的副作用是这将允许SVG出现在包含框之外;这在某种意义上就是它起作用的原因。

相关问题