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

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

相关推荐
灵感__idea2 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo2 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队3 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher3 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati3 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao3 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
兆子龙4 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙5 小时前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构
SuperEugene5 小时前
表单最佳实践:从 v-model 到自定义表单组件(含校验)
前端·javascript·vue.js
昨晚我输给了一辆AE865 小时前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript