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>
相关推荐
MoonMoonLee3 天前
小程序配置
小程序
码兄科技3 天前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
2501_916007473 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
JQweryuiop3 天前
中小型游戏陪练工作室数字化管理实践:基于七彩屋电竞护航小程序订单、履约与绩效系统的落地复盘
大数据·游戏·小程序·架构
Ai-_Man3 天前
您您这可以把Mistral AI的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。
人工智能·ai·小程序·电脑
2501_916008893 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
微擎应用市场3 天前
简单拼车小程序系统:实现出行与物流资源的高效精准匹配
小程序
刃神太酷啦3 天前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
2501_916008893 天前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
2601_963870203 天前
基于springboot的综合网上购物商场系统
微信小程序·小程序·课程设计