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

时间:2016-08-02 14:34:27

标签: html css

我需要在弹性框内使用斜体字体,但文本因溢出而被剪切。

我想要的文字条件:

  1. 不能看到溢出
  2. 不得剪裁文字
  3. 这是我目前的情况(小蓝框表示文字框大小)

    enter image description here

    我想要这个:

    enter image description here

    如何实现这一目标?

    我从this SO post得到了一个黑客攻击,但是你在下面的代码片段中看到了一个严重的问题。

    我目前的代码:

    
    
    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
    }
    
    <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>
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:1)

尝试使用CSS letter-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; */
}

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

参考:

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

<span class="ellipsiswrap italic">username W&nbsp;</span>

如果&nbsp;过宽,则选择范围较窄:

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