如何防止文本溢出和被剪裁?

Kag*_*ght 5 html css

我需要在 flex 框中使用斜体字体,但文本由于溢出而被剪裁。

我想要的文本条件:

  1. 溢出必须不可见
  2. 文字不得剪裁

这是我目前的情况(小蓝框表示文本框大小)

在此处输入图片说明

我想要这个:

在此处输入图片说明

如何做到这一点?

我从这篇 SO 帖子中得到了一个 hack,但它造成了一个严重的问题,您可以在下面的代码段中看到。

我目前的代码在这里:

body {
  font-family: sans-serif;
  font-size: 30px;
}
.ellipsiswrap {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.italic {
  font-style: italic;
}
.italicguard {
  padding-right: 0.3em;
  margin-right: -0.3em;
}
.usernamewrapper {
  font-size: 1.2em;
  overflow: hidden;
  display: flex;
  background-color: #303030;
  color: #fff;
}
.opacity5 {
  opacity: 0.5;
}
.screenname {
  margin-left: 0.3em;
  flex: 1;
}

.widthlimit150 {
  width: 300px;
}

.widthlimit70 {
  width: 140px;
}

.letterspacing {
  letter-spacing: .12em
}

.wordspacing {
  word-spacing: .12em
}
Run Code Online (Sandbox Code Playgroud)
<p>Original:</p>

<div class="usernamewrapper">
  <span class="ellipsiswrap italic">username W</span>
  <span class="screenname ellipsiswrap opacity5 italic italicguard">@username</span>
</div>

<p>Hack:</p>

<div class="usernamewrapper italic italicguard">
  <span class="ellipsiswrap italicguard">username W</span>
  <span class="screenname ellipsiswrap opacity5 italicguard">@username</span>
</div>

<p>Behavior that must be kept:</p>

<div class="usernamewrapper italic widthlimit150">
  <span class="ellipsiswrap">username W</span>
  <span class="screenname ellipsiswrap opacity5">@username</span>
</div>

<div class="usernamewrapper italic widthlimit70">
  <span class="ellipsiswrap">username W</span>
  <span class="screenname ellipsiswrap opacity5">@username</span>
</div>

<p>Problem with the hack:</p>

<div class="usernamewrapper italic italicguard widthlimit70">
  <span class="ellipsiswrap italicguard">username W</span>
  <span class="screenname ellipsiswrap opacity5 italicguard">@username</span>
</div>

<p>letter-spacing from Michael_B:</p>

<div class="usernamewrapper">
  <span class="ellipsiswrap italic letterspacing">username W</span>
  <span class="screenname ellipsiswrap opacity5 italic italicguard">@username</span>
</div>

<p>word-spacing from Michael_B:</p>

<div class="usernamewrapper">
  <span class="ellipsiswrap italic wordspacing">username W</span>
  <span class="screenname ellipsiswrap opacity5 italic italicguard">@username</span>
</div>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 2

尝试使用 CSSletter-spacing属性。

它本质上是在每个字母之前和之后添加填充。

.ellipsiswrap {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  letter-spacing: .12em; /* just enough to clear the last letter;
                            even .2em  doesn't look bad; */
}
Run Code Online (Sandbox Code Playgroud)

我经常使用它letter-spacing来提高可读性。在这种情况下,它可能有助于防止切断。

参考:


另一个可能的选择是为每个用户名添加尾随空格:

<span class="ellipsiswrap italic">username W&nbsp;</span>
Run Code Online (Sandbox Code Playgroud)

如果&nbsp;太宽,还有更窄的选项:

  • 狭小的空间:(&#8201;&thinsp;
  • 头发空间:&#8202;