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
        }
    })

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

相关推荐
烛阴19 分钟前
带你用TS彻底搞懂ECS架构模式
前端·javascript·typescript
卓码软件测评1 小时前
【第三方网站运行环境测试:服务器配置(如Nginx/Apache)的WEB安全测试重点】
运维·服务器·前端·网络协议·nginx·web安全·apache
龙在天1 小时前
前端不求人系列 之 一条命令自动部署项目
前端
开开心心就好1 小时前
PDF转长图工具,一键多页转图片
java·服务器·前端·数据库·人工智能·pdf·推荐算法
国家不保护废物1 小时前
10万条数据插入页面:从性能优化到虚拟列表的终极方案
前端·面试·性能优化
文心快码BaiduComate1 小时前
七夕,画个动态星空送给Ta
前端·后端·程序员
web前端1231 小时前
# 多行文本溢出实现方法
前端·javascript
文心快码BaiduComate1 小时前
早期人类奴役AI实录:用Comate Zulu 10min做一款Chrome插件
前端·后端·程序员
人间观察员2 小时前
如何在 Vue 项目的 template 中使用 JSX
前端·javascript·vue.js
布列瑟农的星空2 小时前
大话设计模式——多应用实例下的IOC隔离
前端·后端·架构