reactjs React Material-UI中的排版

zqdjd7g9  于 2023-06-05  发布在  React
关注(0)|答案(8)|浏览(192)

我有这个文本框:

<Typography component="p" className={classes.text}>
        {this.props.post.text}
</Typography>

我希望能够包括段落,但所有的文本输入到它得到打印在一行。
文档建议paragraph默认为false,因此我必须将其设置为`true。
我尝试了以下方法:

<Typography component="p" className={classes.text} paragraph="true">

我也试过:

<Typography component="p" className={classes.text} paragraph={true}>

这两个都不工作,所以我所有的文本仍然被打印到一行。
如何让段落显示出来?

**附加信息:**据我所知,Typography中的paragraph={true}属性只有adds a bottom-margin to the whole text。例如,我的一个文本块是一个段落。如果我想要另一个段落,我必须添加另一个Typography。类似于:

<Typography component="p" className={classes.text} paragraph={true}>
        {this.props.post.text}
</Typography>
<Typography component="p" className={classes.text} paragraph={true}>
        {this.props.post.text2}
</Typography>

这不是我想要的也许我的目标应该是让输入文本中的返回字符得到识别。这是正确的吗?如果是,是如何做到的?
我试过这个:

<pre>
    <Typography component="p" className={classes.text}>
      {this.props.post.text}
    </Typography>
  </pre>

标记按原样保留标记内的空格和换行符。
但这并不合适。如果我有一个长的行,文本不会在卡片宽度上换行。相反,超出卡宽度的任何内容都将被截断。显然我想要这一切。我希望我的文字 Package 在卡,也为它支持新的行和段落。这是怎么做到的?

zmeyuzjn

zmeyuzjn1#

一个更好的方法是使用CSS的力量:

white-space: pre-line

如果你使用这个css属性,“新行”字符将被接受。
编辑:来自Ionut-Alexandru Baltariu的帮助

<Typography id="modal-description" sx={{ whiteSpace: 'pre-line'}}>
x6492ojm

x6492ojm2#

新段落

<Typography>
  {this.props.text.split("\n").map((i, key) => {
    return <p key={key}>{i}</p>;
  })}
</Typography>

只是为了新的线路

<Typography>
  {this.props.text.split("\n").map((i, key) => {
    return <div key={key}>{i}</div>;
  })}
</Typography>
jexiocij

jexiocij3#

我想到了这个

<Typography component="p" className={classes.text}>
  {this.props.post.text.split("\n").map((i, key) => {
    return <p key={key}>{i}</p>;
  })}
</Typography>

如果有更好的方法,我很想听听。

vsaztqbk

vsaztqbk4#

我试过你的答案,它完全按照需要工作。但是,控制台返回一个小错误
Warning:validateDOMNesting(...):<p>不能显示为<p>的后代。
我稍微改进了你的答案,用<Typography>替换了.map()中的<p>标签,并将其全部 Package 在<div>中,如下所示:

<div className={classes.text}>
  {this.props.post.text.split('\n').map((i, key) => {
    return <Typography key={key} paragraph variant="body1">{i}</Typography>;
  })}
</div>

(you可以用你想要的任何变体替换body1!)
这似乎摆脱了对我的警告,我希望能像你打算的那样工作。

nzk0hqpo

nzk0hqpo5#

这真的是一种奇怪的行为。据我所知,你做的一切都是正确的。p本身显示为块元素,因此默认情况下,它应该以您希望的方式显示。但是,可能是你在.text css类中覆盖了它。看看是不是你的问题。如果没有,您可以始终使用变体属性variant="headline"将它们放在新行中。

w41d8nur

w41d8nur6#

如果我理解正确,您可以简单地利用HTML的强大功能并添加<br />-元素来插入换行符。

rggaifut

rggaifut7#

从Material UI V5开始,您现在可以访问许多CSS实用程序作为 prop 。对于空白,您现在可以执行以下操作:

<Typography whiteSpace="pre-line">{this.props.post.text}</Typography>
wrrgggsh

wrrgggsh8#

这对我很有效:

<Typography component="pre">
   {this.props.post.text}
</Typography>

在CSS中:

pre {
  white-space: pre-wrap;       /* Since CSS 2.1 */
  white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
  white-space: -pre-wrap;      /* Opera 4-6 */
  white-space: -o-pre-wrap;    /* Opera 7 */
  word-wrap: break-word;       /* Internet Explorer 5.5+ */
}

相关问题