如何在 React/CSS 或 Material UI 中按行高的倍数截断文本? [复制]

Posted

技术标签:

【中文标题】如何在 React/CSS 或 Material UI 中按行高的倍数截断文本? [复制]【英文标题】:How to truncate the text by multiples of the line height in React/CSS or Material UI? [duplicate] 【发布时间】:2021-03-15 13:46:09 【问题描述】:

我在 Material UI 中创建了一张包含文本的卡片。我想修复卡片的高度,如果超过 3 行,则将其中的文本截断。最好的方法是什么?

下面是我的代码,如您所见,我尝试使用 CSS 来执行此操作,但是 (a) 省略号不显示 (b) 溢出会在水平方向切掉文本,所以我会喜欢有办法通过线高的倍数而不是像素来做到这一点。如果显示器尺寸调整,我也希望它仍然可以工作。

import React from 'react';

// Material UI
import 
  Card,
  CardActionArea,
  CardContent,
  CardMedia,
  makeStyles,
  Typography,
 from '@material-ui/core';

const useStyles = makeStyles(theme => (
  media: 
    height: 140,
  ,
  title: 
    height: 50,
    overflow: 'hidden',
    textOverflow: 'ellipsis',
  ,  
  description: 
    height: 50,
    overflow: 'hidden',
    textOverflow: 'ellipsis',
  ,
));

const ContentThumbnail = ( image, title, description, date ) => 
  const classes = useStyles();
  return (
    <Card>
      <CardActionArea>
        <CardMedia
          image=image
          title=""
          className=classes.media
        />
        <CardContent>
          <Typography gutterBottom variant="h5" component="h2" className=classes.title>
            title
          </Typography>
          <Typography variant="body2" component="p" className=classes.description>
            description
          </Typography>
        </CardContent>
      </CardActionArea>
    </Card>
  );
;


export default ContentThumbnail;

【问题讨论】:

【参考方案1】:

很遗憾,您不能在多行上添加省略号,它适用于每条水平线。

一种解决方法是在显示省略号之前计算您可以拥有的符号总数。

在您的代码中,您可以拥有

const [description, setDescription] = useState('');
const MAX_SYMBOLS_ALLOWED = 50;

useEffect(() => 
  if(description.length >= MAX_SYMBOLS_ALLOWED) 
    // 3 is for the number of dots ( the elipsis )
    const transformed = description.substr(0, MAX_SYMBOLS_ALLOWED - 2);

    setDescription(`$transformed...`)
  

, [description])
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.1/umd/react-dom.production.min.js"></script>

【讨论】:

非常感谢 Tyhomira。如果我无法通过行高甚至 em(字符宽度)实现截断,这对我来说肯定是一个有用的选择。知道 CSS 仅适用于单行是很有用的。再次感谢你:)

以上是关于如何在 React/CSS 或 Material UI 中按行高的倍数截断文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

React、Jest 和 Material-UI:如何测试以模态或弹出框呈现的内容

如何使 React CSS 导入组件范围?

Angular 2 Material - 如何有条件地设置工具栏的颜色

如何使用material3打造自有品牌色彩风格?

如何从 Mat-tab 或 Mat-card (Angular Material) 中删除滚动条

如何在 asp.net mvc 项目中使用 Material-UI