You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MUI Accordion或可折叠卡片中部分展示文本?

在MUI中实现评论内容部分展示+展开查看完整内容

完全可行,下面给你两种常用组件的实现方案:

一、使用MUI Accordion组件

核心思路是:在AccordionSummary里展示截断后的评论内容,AccordionDetails里放完整内容,配合CSS实现文本截断效果。

示例代码:

import { Accordion, AccordionSummary, AccordionDetails, Typography } from '@mui/material';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';

const TruncatedCommentAccordion = ({ comment }) => {
  return (
    <Accordion>
      <AccordionSummary
        expandIcon={<ExpandMoreIcon />}
        sx={{
          '& .MuiTypography-root': {
            display: '-webkit-box',
            WebkitLineClamp: 3, // 显示3行后截断
            WebkitBoxOrient: 'vertical',
            overflow: 'hidden',
          }
        }}
      >
        <Typography>{comment}</Typography>
      </AccordionSummary>
      <AccordionDetails>
        <Typography>{comment}</Typography>
      </AccordionDetails>
    </Accordion>
  );
};

说明:通过sx内的CSS属性-webkit-line-clamp控制显示行数,超出部分自动截断并显示省略号,点击Accordion即可展开查看完整内容。

二、使用可折叠卡片(Card + Collapse组件)

如果偏好轻量化的卡片样式,可结合Card和Collapse组件实现:

示例代码:

import { Card, CardContent, Typography, IconButton, Collapse } from '@mui/material';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useState } from 'react';

const CollapsibleCommentCard = ({ comment }) => {
  const [expanded, setExpanded] = useState(false);

  const handleExpandClick = () => {
    setExpanded(!expanded);
  };

  return (
    <Card sx={{ maxWidth: 600 }}>
      <CardContent>
        <Typography
          variant="body1"
          sx={{
            display: '-webkit-box',
            WebkitLineClamp: expanded ? 'unset' : 3,
            WebkitBoxOrient: 'vertical',
            overflow: expanded ? 'visible' : 'hidden',
            marginBottom: expanded ? 0 : 1,
          }}
        >
          {comment}
        </Typography>
        <IconButton
          size="small"
          onClick={handleExpandClick}
          sx={{ float: 'right' }}
        >
          <ExpandMoreIcon sx={{ transform: expanded ? 'rotate(180deg)' : 'none', transition: 'transform 0.2s' }} />
          <Typography variant="caption">{expanded ? '收起' : '查看更多'}</Typography>
        </IconButton>
      </CardContent>
    </Card>
  );
};

说明:通过useState控制展开状态,动态切换文本的截断样式;也可以选择把完整内容单独放在Collapse组件中,两种方式都能满足需求。

额外优化点

  • 可自定义判断文本长度,仅当评论超过指定字数/行数时显示展开按钮,避免短评论出现多余控件
  • 调整截断后的省略号样式,或在截断内容末尾添加“查看更多”提示文本

内容的提问来源于stack exchange,提问作者Ciaran Crowley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:03:19