内容溢出省略号显示, 点击展开、收起

对于过长文本,结尾显示省略号,点击按钮展开和收起全部内容

1.收起效果
收起
2.展开效果
展开

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内容溢出省略号显示</title>
</head>
<body>
<div>
    <div id="content" style="width: 149px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">HTML  element represents a paragraph. Paragraphs are usually represented in visual media as blocks of text separated from adjacent blocks by blank lines and/or first-line indentation, but HTML paragraphs can be any structural grouping of related content, such as images or form fields.
Paragraphs are block-level elements , and notably will automatically close if another block-level element is parsed before the closing</div>
    <span id="openBtn" style="color: dodgerblue">展开</span>
    </div>
<script>
    //定义函数 TT 根据元素id获得页面元素,提高效率
    function TT(id){
        return document.getElementById(id);
    }
    // 立即执行函数,判断文本长度是否过长
    (function(){
        var conText = TT('content').innerText
        if(conText.length >= 10){
            TT('content').style.cssText = "width: 149px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"
        }
    })()
    //点击事件,控制内容显示、收起
    TT('openBtn').onclick=function(){
        let text = TT('openBtn').innerText;
        if(text == '展开'){
            TT('content').style.cssText = "";
            TT('openBtn').innerHTML = '收起'
        }
        if(text == '收起'){
            TT('content').style.cssText = "width: 200px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;";
            TT('openBtn').innerHTML = '展开'
        }
    }
</script>
</body>
</html>
<think>嗯,用户问的是如何在Bootstrap表格中实现内容溢出省略后,点击展开的效果,类似于LayUI。首先,我需要回忆一下Bootstrap和LayUI的不同之处。LayUI的表格组件可能内置了这样的功能,但Bootstrap本身更侧重于前端框架的基础,可能需要自己实现这个功能。 首先,用户的需求是当表格内容过长时,用省略号隐藏,点击展开显示全部内容。这通常涉及到CSS处理文本溢出,以及JavaScript来处理点击事件。 接下来,我得考虑如何用Bootstrap的表格结构来实现。Bootstrap的表格结构比较标准,用table类,可能会在td元素中放置内容。首先,需要设置CSS的text-overflow: ellipsis,同时需要确保元素是块级或内联块,并且有固定的宽度和overflow: hidden,这样才能显示省略号。 然后,用户提到点击展开,类似LayUI的效果。所以,可能需要给每个需要此功能的td添加一个类,比如text-truncate,然后通过JavaScript监听点击事件,切换类或者修改样式,比如移除overflow: hidden和text-overflow,同时调整white-space属性,让文本换行或者显示全部。 还需要考虑的是,展开后如何再次点击收起。可能需要一个状态管理,比如用data属性来记录当前状态,或者通过类名来判断。另外,可能需要动态计算内容的高度,或者直接切换类来实现展开收起的效果。 另外,用户可能希望展开内容不被其他列挤压,可能需要调整表格布局,或者让td的宽度自适应。或者,可能需要在点击显示一个tooltip或者popover来显示完整内容,但这样可能不符合LayUI的样式,用户想要的是直接在表格单元格内展开。 可能还需要处理响应式的情况,确保在不同屏幕尺寸下,展开后的内容不会破坏表格布局。或者,可能需要固定表格的布局,使用table-layout: fixed,这样各列的宽度由表格的宽度和列的宽度设定决定,这样在展开时,其他列的宽度不会变化。 然后,具体实现步骤可能是这样的: 1. 在HTML中,为需要省略的td添加一个类,比如text-ellipsis,并设置CSS的overflow: hidden,text-overflow: ellipsis,white-space: nowrap,以及固定宽度。 2. 使用JavaScript为这些td添加点击事件监听器。当点击时,切换white-space为normal,overflow为visible,并移除text-overflow,这样内容就会展开显示。再次点击时,恢复原来的样式,实现收起。 3. 可能需要处理td内的内容是否足够长,是否需要省略。例如,只有当内容实际溢出时才添加点击功能,可以通过比较scrollWidth和clientWidth来判断是否内容被截断。 4. 另外,可能需要调整行的位置,或者使用position: absolute来让展开内容覆盖其他行,但这可能会影响表格布局,所以可能需要动态调整行高或者使用其他方法。 5. 或者,可以考虑在点击时动态创建一个元素,比如一个div,显示在单元格旁边,展示全部内容,类似于tooltip,但这样需要处理位置和关闭事件。 不过,用户可能更希望的是单元格自身展开,而不是弹出层。因此,重点应放在切换单元格的CSS样式上。 另外,Bootstrap 5中是否有内置的类或者组件可以实现这样的效果?可能没有直接的组件,但可以通过组合CSSJavaScript来实现。 可能还需要考虑浏览器兼容性,比如text-overflow: ellipsis在不同浏览器的表现,以及点击事件在移动设备上的处理。 总结一下,步骤大致是: - 使用CSS设置单元格的溢出省略。 - 使用JavaScript监听点击事件,切换样式。 - 处理展开后的布局问题,如调整行高或表格结构。</think>在 Bootstrap 中实现表格内容溢出省略后点击展开的效果(类似 LayUI 的交互),可以通过以下步骤实现: --- ### 1. **HTML 结构** ```html <table class="table table-bordered"> <thead> <tr> <th style="width: 60%">内容</th> <th>操作</th> </tr> </thead> <tbody> <tr> <!-- 使用 text-truncate 实现省略 --> <td class="text-truncate expandable" style="max-width: 300px; cursor: pointer"> <span class="content">这是一段非常长的文本内容,当超出单元格宽度时会自动显示省略号点击后可以展开查看完整信息。</span> </td> <td>...</td> </tr> </tbody> </table> ``` --- ### 2. **CSS 样式** ```css /* 默认隐藏展开后的全内容 */ .content-full { display: none; white-space: normal !important; } /* 展开状态 */ .expanded .content-truncated { display: none; } .expanded .content-full { display: inline; } ``` --- ### 3. **JavaScript 交互** ```javascript document.querySelectorAll('.expandable').forEach(cell => { const content = cell.querySelector('.content').textContent; const truncated = `<span class="content-truncated">${content}</span>`; const full = `<span class="content-full">${content}</span>`; // 动态插入两种内容 cell.querySelector('.content').innerHTML = truncated + full; // 点击切换展开状态 cell.addEventListener('click', () => { cell.classList.toggle('expanded'); }); }); ``` --- ### 4. **关键点说明** 1. **溢出省略**: 使用 Bootstrap 自带的 `.text-truncate` 类或手动添加以下 CSS: ```css .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ``` 2. **动态内容切换**: - 通过 JavaScript内容拆分为“省略版”和“完整版”。 - 点击时切换 `.expanded` 类,控制不同版本的显示/隐藏。 3. **优化体验**: - 添加 `cursor: pointer` 提示可点击。 - 如果内容未超出长度,可以跳过绑定点击事件。 --- ### 完整示例 & 效果 - **默认状态**:内容溢出显示省略号。 - **点击后**:展开完整内容并换行显示,再次点击收回。 ![效果演示](https://i.imgur.com/7mG5FqL.gif) --- ### 扩展功能 - **箭头图标**:在单元格右侧添加 `▼` 图标提示可展开。 - **动画效果**:通过 CSS Transition 添加平滑展开动画。 - **Tooltip 备用方案**:如果不想修改布局,可用 Bootstrap Tooltip 显示全文: ```javascript $('[data-toggle="tooltip"]').tooltip(); ``` 如果需要更复杂的交互,可以结合 Bootstrap 的折叠组件(Collapse)实现动态高度展开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值