uniapp 小程序 CSS 实现多行文本展开收起 组件

效果


组件

vue 复制代码
<template>
	<!-- 最外层弹性盒子 -->
	<div class="box" :style="boxStyle">
		<!-- 文本区域,动态类名控制展开/收起状态 -->
		<div ref="textRef" :class="['text-cont', btnFlag ? 'text-unfold' : 'text-collapse']">
			<!-- 展开/收起按钮 -->
			<div class="unfold-and-collapse" @click="btnFlagChange">
				{{ btnFlag ? '收起' : '展开' }}
			</div>
			<!-- 文本内容(保留首行缩进) -->
			&emsp;&emsp;{{ text }}
		</div>
	</div>
</template>

<script>
	export default {
		name: 'ExpandableText',
		props: {
			text: {
				type: String,
				default: ''
			},
			boxStyle: {
				type: String,
				default: ''
			}
		},
		data() {
			return {
				// 展开收起状态
				btnFlag: false
			}
		},
		methods: {
			// 切换展开/收起状态 
			btnFlagChange() {
				this.btnFlag = !this.btnFlag
			}
		}
	}
</script>

<style scoped>
	/* 最外层开启弹性盒子,用于伪元素的高度计算 */
	.box {
		display: flex;
	}

	/* 文本区域设置宽度,显示省略号 */
	.text-cont {
		width: 100%;
		margin: 0px auto 0;
		display: -webkit-box;
		/* 必须结合的属性,设置或检索伸缩盒对象的子元素的排列方式 */
		-webkit-box-orient: vertical;
		/* 溢出部分隐藏 */
		overflow: hidden;
		/* 文字居左 */
		text-align: left;
		
		font-family: PingFangSC, PingFang SC;
		font-weight: 500;
		font-size: 26rpx;
		color: #000000;
		line-height: 44rpx;
		font-style: normal;
	}

	/* 展开状态 - 显示所有行 */
	.text-unfold {
		-webkit-line-clamp: 9999;
	}

	/* 收起状态 - 只显示3行 */
	.text-collapse {
		-webkit-line-clamp: 3;
	}

	/* 展开/收起按钮样式 */
	.unfold-and-collapse {
		color: #19aaff;
		float: right;
		clear: both;
		margin-right: 10px;
		cursor: pointer;
		font-size: 26rpx;
		line-height: 44rpx;
		margin-top: -6rpx;
	}

	/* 伪元素用于实现文字包裹按钮 */
	.text-cont::before {
		content: "";
		float: right;
		width: 0;
		height: calc(100% - 20px);
	}
</style>
相关推荐
yqcoder3 小时前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
智慧景区与市集主理人3 小时前
五一市集分账混乱?巨有科技智慧市集小程序实现统一收款、自动分账
大数据·科技·小程序
山楂树の4 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
程序鉴定师6 小时前
深圳小程序制作哪家好?2026深度市场分析与选择指南?
大数据·小程序
河北清兮网络科技7 小时前
广告联盟全解析:从开发接入到运营优化,多视角拆解流量变现逻辑
小程序·app
计算机学姐7 小时前
基于微信小程序的校园失物招领管理系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·信息可视化·微信小程序·uni-app
张晓℡¹⁸⁰³⁷¹⁸²⁵⁵⁸7 小时前
海外盲盒APP玩法集合,海外盲盒多国语言
小程序·php
互联科技报8 小时前
订货商城选择哪个系统操作更简单?2026小白友好型选型指南
小程序
JYeontu8 小时前
照片墙太死板?做一个会随风摇摆的绳串图片交互效果
前端·javascript·css
2501_915921438 小时前
HTTPS前端劫持 新一代流量劫持解决方案
前端·网络协议·ios·小程序·https·uni-app·iphone