【发布时间】:2021-03-16 14:32:27
【问题描述】:
我制作了一个组件,它将我的文本的每个字母都包含在一个 span 标签中:
export default function Header({ text }) {
let header = []
for (let i = 0; i < text.length; i++) {
const colours = ["red", "green", "yellow", "blue", "pink", "orange"]
const rng = Math.floor((Math.random() * colours.length))
header.push({
color: colours[rng],
letter: text.charAt(i) == ' ' ? <span className="white-space"></span> : text.charAt(i)
})
}
return (
<h1 id="header">
{header.map((el, i) => (<span key={i} style={{ color: el.color }}>{el.letter}</span>))}
</h1>
)
}
这将产生这个结果(其中文本是“Hello World”):
<h1 id="header">
<span>H</span>
<span>e</span>
<span>l</span>
<span>l</span>
<span>o</span>
<span><span className="white-space"></span></span>
<span>W</span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
</h1>
效果很好,但是当句子的大小大于浏览器窗口的大小时,它会包裹一些字母,有时会弄乱整个文本(而不是“Hello World”,你可以得到“Hello”, “我”,“rld”)。
为了解决这个问题,我现在需要将作为单词的跨度标签组包装在额外的跨度标签中,以达到此结果:
<h1 id="header">
<span>
<span>H</span>
<span>e</span>
<span>l</span>
<span>l</span>
<span>o</span>
</span>
<span><span className="white-space"></span></span>
<span>
<span>W</span>
<span>o</span>
<span>r</span>
<span>l</span>
<span>d</span>
</span>
</h1>
我该怎么做?
【问题讨论】:
标签: javascript html reactjs