01CSS 实现多行文本“展开收起”

最近在开发移动端的评论内容功能时,我遇到了一个需求,需要实现一个展开收起效果。主要目的是让用户能够方便地查看和隐藏评论内容,现在想将我的成果分享给大家

完成效果:

实现思路:

1.准备一个文本的外部容器( content),并将最大高度设置为65px(根据实际需求而定),超出内容设置不可见

2.文本容器的高度(text-content)不做样式设置,这个容器是为了获取内容实际高度

3.通过 js 获取文本容器的高度(text-content),判断文本高度是否超过外部容器(content)的最大高度,控制展开收起按钮是否显示

4.点击按钮时根据条件设置容器(content)的最大高度,css 对通过 transition 对 max-height 设置过渡效果

完整示例代码如下

HTML

html 复制代码
 <div class="container">
     <div class="content">
         <div class="text-content">
                1月30日上午10时,中国贸促会将召开1月例行新闻发布会,介绍第二届链博会筹备进展情况;
                2025大阪世博会中国馆筹备进展;2023年全国贸促系统商事认证数据;2023年贸法通运行情况;
                2023年11月全球经贸摩擦指数;2023年12月全球知识产权保护指数月度观察报告;助力培育外贸新动能有关工作考虑等。
         </div>
     </div>
     <button class="btn">展开</button>
 </div>

CSS

css 复制代码
 .container {
	width: 260px;
	padding: 20px;
	border: 1px solid #ccc;
	margin: 50px auto;
 }

 .content {
	max-height: 65px;
	overflow: hidden;
	transition: max-height 0.5s;
 }


 .btn {
	display: flex;
	width: 40px;
	color: cornflowerblue;
	outline: none;
	border: none;
	background-color: transparent;
 }

JS

js 复制代码
    const maxHeight=65
    const btn = document.querySelector('.btn')
    const content = document.querySelector('.content')
    const textContent=document.querySelector('.text-content')
    const textHeight=textContent.getBoundingClientRect().height // 文本高度
    const contentHeight=content.getBoundingClientRect().height  // 容器高度
    let flag = false
    if (textHeight < maxHeight) {
        btn.style.display = 'none'
    }
    btn.addEventListener('click', () => {
        if (!flag) {
            content.style.maxHeight=textHeight+'px'
            btn.innerHTML = '收起'
            flag = true
        } else {
            content.style.maxHeight=contentHeight+'px'
            btn.innerHTML = '展开'
            flag = false
        }
    })

实现一个功能的方式往往有多种,你们是怎么解决的呢?

相关推荐
朦胧之9 小时前
AI 编程-老项目改造篇
java·前端·后端
swipe11 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
爱勇宝11 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
甲维斯11 小时前
用AI还原《坦克大战》并3D化升级!
前端·人工智能·游戏开发
IT_陈寒12 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
kyriewen13 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
谷子在生长13 小时前
纯血鸿蒙自定义弹窗最佳实践:从「到处复制」到「一行调用」
前端·harmonyos
壹方秘境13 小时前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
神秘面具男13 小时前
HarmonyOS 6.0跨端远程控制
前端·后端
枫树下x13 小时前
NestJS基础框架
前端