You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为元素组实现类似text-overflow:ellipsis的CSS溢出省略效果?

实现自适应进度标题栏(带省略号与展开按钮)

HTML 结构

<div class="progress-titles-wrapper">
    <div class="titles-container">
        <a href="#" class="progress-title">Earned</a>
        <a href="#" class="progress-title">Sick</a>
        <a href="#" class="progress-title">Annual</a>
        <a href="#" class="progress-title">Earned</a>
        <a href="#" class="progress-title">Sick</a>
        <a href="#" class="progress-title">Annual</a>
        <a href="#" class="progress-title">Earned</a>
        <a href="#" class="progress-title">Sick</a>
        <a href="#" class="progress-title">Annual</a>
        <a href="#" class="progress-title">Earned</a>
        <a href="#" class="progress-title">Sick</a>
        <a href="#" class="progress-title">Annual</a>
    </div>
    <div class="seeMore d-flex align-items-center">
        <a href="#">See More</a>
    </div>
</div>

需求说明

需要实现以下效果:

  • 根据屏幕宽度自动显示部分.progress-title元素,超出容器宽度的元素隐藏,并在末尾显示省略号(...)
  • 始终保留最后的「See More」按钮,点击该按钮可展开显示全部标题元素

当前使用的 CSS 无法实现预期效果,以下是完整解决方案:

解决方案

1. CSS 布局与截断样式

.progress-titles-wrapper {
    display: flex;
    align-items: center;
    width: calc(100% - 200px);
    gap: 10px; /* 标题与按钮的间距 */
}

.titles-container {
    display: flex;
    flex-wrap: nowrap;
    overflow: hidden;
    position: relative;
    flex: 1;
    min-width: 0; /* 确保容器能随父元素收缩 */
}

/* 省略号样式 */
.titles-container.truncate::after {
    content: "...";
    position: absolute;
    right: 0;
    top: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    padding-left: 10px;
    background-color: #fff; /* 用背景色覆盖后方被截断的标题 */
}

.progress-title {
    white-space: nowrap;
    margin-right: 10px;
    text-decoration: none;
    color: #333;
}

.seeMore {
    white-space: nowrap;
    cursor: pointer;
}

/* 展开状态样式 */
.progress-titles-wrapper.expanded .titles-container {
    overflow: visible;
    flex-wrap: wrap;
}

.progress-titles-wrapper.expanded .titles-container::after {
    display: none;
}

2. JavaScript 交互逻辑

const wrapper = document.querySelector('.progress-titles-wrapper');
const seeMoreBtn = wrapper.querySelector('.seeMore a');
const titlesContainer = wrapper.querySelector('.titles-container');

// 判断是否需要显示省略号
function checkTruncate() {
    const isOverflow = titlesContainer.scrollWidth > titlesContainer.clientWidth;
    titlesContainer.classList.toggle('truncate', isOverflow);
    seeMoreBtn.textContent = isOverflow ? 'See More' : 'See Less';
}

// 切换展开/收起状态
seeMoreBtn.addEventListener('click', (e) => {
    e.preventDefault();
    wrapper.classList.toggle('expanded');
    seeMoreBtn.textContent = wrapper.classList.contains('expanded') ? 'See Less' : 'See More';
});

// 窗口 resize 时重新判断截断状态
window.addEventListener('resize', checkTruncate);

// 初始化检查
checkTruncate();

效果说明

  • 页面加载和窗口尺寸变化时,自动检测标题容器是否溢出,溢出则显示省略号
  • 点击「See More」按钮,标题容器会展开并换行显示所有元素,按钮文字变为「See Less」
  • 点击「See Less」按钮,容器恢复截断状态,重新显示省略号

内容的提问来源于stack exchange,提问作者Yousef Salama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:36:00