css文字中间截断出现省略号

本文介绍了如何使用CSS实现优惠券的设计,包括文本超出时自动显示title以及处理稍微长标题的技巧,展示了如何在编码中应用这些功能。
.con {
    font-size: 14px;
    color: #666;
    width: 600px;
    margin: 50px auto;
    border-radius: 8px;
    padding: 15px;
    overflow: hidden;
    resize: horizontal;
    box-shadow: 20px 20px 60px #bebebe,
        -20px -20px 60px #ffffff;
}

.wrap {
    position: relative;
    line-height: 2;
    height: 2em;
    padding: 0 10px;
    overflow: hidden;
    background: #fff;
    margin: 5px 0;
}

.wrap:nth-child(odd) {
    background: #f5f5f5;
}

.title {
    display: block;
    position: relative;
    background: inherit;
    text-align: justify;
    height: 2em;
    overflow: hidden;
    top: -4em;
}

.txt {
    display: block;
    max-height: 4em;
}
.title::before{
    content: attr(title);
    width: 50%;
    float: right;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    direction: rtl;
}
<ul class="con">
    <li class="wrap">
        <span class="txt">CSS 实现优惠券的技巧 - 2021-03-26</span>
        <span class="title" title="CSS 实现优惠券的技巧 - 2021-03-26">CSS 实现优惠券的技巧 - 2021-03-26</span>
    </li>
    <li class="wrap">
        <span class="txt">CSS 测试标题,这是一个稍微有点长的标题,超出一行以后才会有title提示,标题是 实现优惠券的技巧 - 2021-03-26</span>
        <span class="title" title="CSS 测试标题,这是一个稍微有点长的标题,超出一行以后才会有title提示,标题是 实现优惠券的技巧 - 2021-03-26">CSS
            测试标题,这是一个稍微有点长的标题,超出一行以后才会有title提示,标题是 实现优惠券的技巧 - 2021-03-26</span>
    </li>
    <li class="wrap">
        <span class="txt">CSS 拖拽?</span>
        <span class="title" title="CSS 拖拽?">CSS 拖拽?</span>
    </li>
    <li class="wrap">
        <span class="txt">CSS 文本超出自动显示title</span>
        <span class="title" title="CSS 文本超出自动显示title">CSS 文本超出自动显示title</span>
    </li>
</ul>

参考文档: https://codepen.io/xboxyan/pen/VwpPNbm?fileGuid=YcHxPHhHvDtpqvDw

### CSS文字溢出显示省略号中间截断实现 在CSS中,通常的文字溢出显示省略号是通过 `text-overflow: ellipsis` 实现的,但这种默认方式仅支持尾部截断。如果需要实现**中间截断**的效果,则需要借助伪元素或其他技术手段来完成[^1]。 以下是实现文字中间截断并用省略号替代的解决方案: #### 单行文本中间截断 通过使用伪元素 `::before` 和 `::after`,可以将文字分割为三部分:前缀、省略号和后缀。这种方法适用于单行文本。 ```css .middle-ellipsis { position: relative; width: 200px; /* 设置固定宽度 */ white-space: nowrap; overflow: hidden; } .middle-ellipsis::before, .middle-ellipsis::after { content: attr(data-text); /* 使用data属性动态设置内容 */ display: inline-block; max-width: 50%; /* 前后部分各占一半 */ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .middle-ellipsis::before { content: attr(data-prefix); /* 前缀内容 */ } .middle-ellipsis::after { content: attr(data-suffix); /* 后缀内容 */ } ``` HTML示例: ```html <div class="middle-ellipsis" data-text="这是一个非常长的文本" data-prefix="这是" data-suffix="文本">这是一个非常长的文本</div> ``` #### 多行文本中间截断 对于多行文本的中间截断,可以通过 JavaScript 动态计算文字的长度,并插入省略号。纯CSS无法直接实现多行中间截断效果,因为 `-webkit-line-clamp` 和其他多行截断属性仅支持尾部截断[^4]。 以下是一个简单的JavaScript实现: ```javascript function middleEllipsis(element) { const text = element.textContent; const maxLength = 30; // 最大字符数 if (text.length > maxLength) { const prefix = text.substring(0, Math.floor(maxLength / 2)); const suffix = text.substring(text.length - Math.ceil(maxLength / 2), text.length); element.textContent = `${prefix}...${suffix}`; } } document.querySelectorAll('.multi-middle-ellipsis').forEach(el => middleEllipsis(el)); ``` HTML示例: ```html <div class="multi-middle-ellipsis"> 这是一个非常长的文本,用于演示多行中间截断的效果。 </div> ``` CSS样式: ```css .multi-middle-ellipsis { width: 200px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } ``` ### 注意事项 1. 中间截断的实现复杂度较高,建议根据实际需求选择是否使用。 2. 如果需要兼容性更好的方案,推荐优先考虑尾部截断[^3]。 3. 动态内容的中间截断可能需要结合 JavaScript 实现更灵活的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值