利用css实现文字一行内展示,超出一行,内容中间显示省略号

本文介绍了如何使用CSS实现文本内容在指定宽度下一行内展示,当内容超出时自动在中间显示省略号的技术,通过父元素和两个子元素配合以及伪元素的使用来达到效果。

利用css实现文字一行内展示,超出一行,内容中间显示省略号

思路:

  1. 父元素只展示一行,溢出隐藏。
  2. 内容分为两个元素展示,当文案内容未超过一行时展示第一个元素,文案超出一行时,展示第二个元素。
  3. 第二个元素内分before和 innnerText, 伪元素使用float布局。

实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>利用css实现文字一行内展示,超出一行,内容中间显示省略号</title>
  </head>
  <body>
    <style>
      .warp {
        width: 300px;
        /* 需要固定展示高度 且行高应与展示高度一致 */
        line-height: 2em;
        height: 2em;
        /* 仅展示一行 */
        overflow: hidden;
        /* 重要 必须设置背景色 以在文字溢出换行时将原文字覆盖 */
        background-color: #fff; 
        resize: horizontal;
      }
      .content {
        max-height: 4em;
      }
      .overflow {
        display: block;
        position: relative;
        /* 重要 重新设置背景色将原文字覆盖 */
        background: inherit;
        top: -4em;
        height: 2em;
        overflow: hidden;
        text-align: justify;
      }
      .overflow::before {
        content: attr(data);
        width: 50%;
        float: right;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        direction: rtl;
      }
    </style>
    <div class="warp">
      <div class="content">
        利用css实现文字一行内展示,超出一行,内容中间显示省略号
      </div>
      <div
        class="overflow"
        data="利用css实现文字一行内展示,超出一行,内容中间显示省略号"
      >
        利用css实现文字一行内展示,超出一行,内容中间显示省略号
      </div>
    </div>
  </body>
</html>

<think>我们正在讨论CSS单行文本溢出显示省略号的问题。根据引用内容,特别是引用[1]和引用[3]提供了关键信息。 关键点: 1. 设置固定宽度(width) 2. 强制文本在一行显示(white-space: nowrap) 3. 隐藏溢出内容(overflow: hidden) 4. 使用省略号表示被修剪的文本(text-overflow: ellipsis) 引用[3]提供了一个完整的例子: ```css P { color: cornflowerblue; width:200px; height:100px; border:1px solid #349910; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } ``` 注意:在这个例子中,虽然设置了高度,但对于单行文本,我们通常不需要设置高度(或者设置行高即可),因为单行文本溢出省略号通常与行高配合使用,但高度不是必须的,因为单行文本的高度可以由行高决定。不过,如果容器高度大于行高,省略号仍然会显示在底部。所以,为了确保单行效果,我们可以不设置高度,或者设置一个合适的高度(比如等于行高)。 另外,引用[1]中提到了另一种方法(.overflow-ellipsis.first)使用了direction: rtl,这是为了从右向左的文本,通常我们不需要,除非处理特定语言。 因此,标准的单行文本溢出显示省略号CSS如下: ```css .ellipsis { width: 200px; /* 或者任意固定宽度,也可以使用max-width */ white-space: nowrap; /* 禁止换行 */ overflow: hidden; /* 隐藏溢出部分 */ text-overflow: ellipsis; /* 显示省略号 */ } ``` 注意:这个设置需要块级元素或者设置为块级显示(display: block; 或 display: inline-block;)。 如果元素是内联元素(如span),需要设置display为inline-block或block。 示例HTML: ```html <div class="ellipsis">这是一段很长很长的文本,当它超出宽度时会显示省略号</div> ``` 或者: ```html <span class="ellipsis" style="display: inline-block;">这是一段很长很长的文本,当它超出宽度时会显示省略号</span> ``` 引用[2]是关于多行文本溢出显示省略号的方法(使用-webkit-line-clamp),但用户要求的是单行,所以这里不展开。 引用[4]是关于文本阴影的,与当前问题无关。 因此,我们给出单行文本溢出显示省略号的解决方案。 相关问题: 1. 如何实现多行文本溢出显示省略号? 2. 为什么设置了text-overflow:ellipsis却没有显示省略号? 3. 如何实现从左向右的文本溢出省略号(对于从右向左的文本)?</think>### CSS单行文本溢出显示省略号实现方法 要实现单行文本溢出显示省略号效果,需要使用以下CSS属性组合: ```css .ellipsis { width: 200px; /* 设置固定宽度 */ white-space: nowrap; /* 禁止文本换行 */ overflow: hidden; /* 隐藏溢出内容 */ text-overflow: ellipsis; /* 溢出部分显示省略号 */ } ``` #### 关键属性说明: 1. **`width`** 必须设置固定宽度(或max-width),否则无法判断溢出边界 2. **`white-space: nowrap`** 强制文本保持单行显示[^1] 3. **`overflow: hidden`** 隐藏超出容器范围的内容 4. **`text-overflow: ellipsis`** 在文本溢出位置显示省略符号`...`[^3] #### 完整示例: ```html <!DOCTYPE html> <html> <head> <style> .overflow-ellipsis { width: 250px; border: 1px solid #ccc; padding: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } </style> </head> <body> <div class="overflow-ellipsis"> 这是一段非常长的单行文本内容超出容器宽度的部分将显示省略号... </div> </body> </html> ``` #### 注意事项: - 仅适用于**块级元素**(如div/p),行内元素需添加`display: block`或`display: inline-block` - 父容器不能有`padding`挤压内容空间(必要时可设置`box-sizing: border-box`) - 在表格单元格中使用时需添加`table-layout: fixed`[^2] 实际效果: ![单行文本溢出效果](https://via.placeholder.com/250x50/fff?text=这是一段非常长的单行文本...)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值