在 Reactjs 中映射后如何并排显示列?
How to display cols next to each other after mapping in Reactjs?
我有这段代码可以映射和显示数组中我网站的 post。
import articleContent from '../data/articleContent';
const ArticlesList = () => (
<>
<ArticlesStyle>
<h1 className="article-h1">Nasze artykuły</h1>
{articleContent.map((article, key) =>
<Link className="article-link" key={key} to={`/artykul/${article.name}`}>
<Row className="align-items-center text-center">
<Col xs={4} md={5}>
<h2 style={{ color: '#14B2E6' }}>{article.title}</h2>
</Col>
</Row>
<Row className="align-items-center text-center">
<Col className="text-left" xs={8} md={5}>
<p style={{ color: 'black' }}>{article.content[0].substring(0, 150)}...</p>
</Col>
</Row>
</Link>
)}
</ArticlesStyle>
</>
)
我的目标是在 PC 显示屏上自动在一行中显示两个 post(我猜是在一行中的两列),在移动设备上自动显示一个 post。我试图做一些小的调整让它工作,但我现在毫无头绪。
这是它现在在 PC 上的样子,我无法摆脱这个 标记区域 - 我认为这是与 display: flex 有关的问题;.
您可以为此使用 CSS-grid。对于 web,设置第 2 列的编号,然后通过在 CSS 中使用媒体查询,您可以在移动宽度的情况下设置第 1 列的编号。
好的,所以我设法解决了自己的问题。
首先,我添加了外部(.map 函数的外部)Row 和 Col。我将 .map 函数内部的所有内容都包装到 Container 中。
const ArticlesList = () => (
<>
<ArticlesStyle>
<Row>
<Col className="article-list-grid">
{articleContent.map((article, key) =>
<Container className="wrapper">
<Link className="article-link" key={key} to={`/artykul/${article.name}`}>
<Row className="align-items-center text-center">
<Col xs={true} md={true}>
<h2 style={{ color: '#14B2E6' }}>{article.title}</h2>
</Col>
</Row>
<Row className="align-items-center text-center">
<Col xs={true} md={true}>
<p style={{ color: 'black' }}>{article.content[0].substring(0, 150)}...</p>
</Col>
</Row>
</Link>
</Container>
)}
</Col>
</Row>
</ArticlesStyle>
</>
)
之后一切都变成了样式,如下所示:
const ArticlesStyle = styled.div`
.article-list-grid {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.wrapper {
@media (max-width: 600px) {
flex: 100%;
}
@media (min-width: 900px) {
flex: 50%;
}
}
.article-link {
text-decoration: none;
}
`;
此处最重要的是 flex: 50% 在 PC 屏幕上,这导致连续 2 列。现在一切看起来都如我所愿:
PC
手机
我有这段代码可以映射和显示数组中我网站的 post。
import articleContent from '../data/articleContent';
const ArticlesList = () => (
<>
<ArticlesStyle>
<h1 className="article-h1">Nasze artykuły</h1>
{articleContent.map((article, key) =>
<Link className="article-link" key={key} to={`/artykul/${article.name}`}>
<Row className="align-items-center text-center">
<Col xs={4} md={5}>
<h2 style={{ color: '#14B2E6' }}>{article.title}</h2>
</Col>
</Row>
<Row className="align-items-center text-center">
<Col className="text-left" xs={8} md={5}>
<p style={{ color: 'black' }}>{article.content[0].substring(0, 150)}...</p>
</Col>
</Row>
</Link>
)}
</ArticlesStyle>
</>
)
我的目标是在 PC 显示屏上自动在一行中显示两个 post(我猜是在一行中的两列),在移动设备上自动显示一个 post。我试图做一些小的调整让它工作,但我现在毫无头绪。
这是它现在在 PC 上的样子,我无法摆脱这个 标记区域 - 我认为这是与 display: flex 有关的问题;.
您可以为此使用 CSS-grid。对于 web,设置第 2 列的编号,然后通过在 CSS 中使用媒体查询,您可以在移动宽度的情况下设置第 1 列的编号。
好的,所以我设法解决了自己的问题。
首先,我添加了外部(.map 函数的外部)Row 和 Col。我将 .map 函数内部的所有内容都包装到 Container 中。
const ArticlesList = () => (
<>
<ArticlesStyle>
<Row>
<Col className="article-list-grid">
{articleContent.map((article, key) =>
<Container className="wrapper">
<Link className="article-link" key={key} to={`/artykul/${article.name}`}>
<Row className="align-items-center text-center">
<Col xs={true} md={true}>
<h2 style={{ color: '#14B2E6' }}>{article.title}</h2>
</Col>
</Row>
<Row className="align-items-center text-center">
<Col xs={true} md={true}>
<p style={{ color: 'black' }}>{article.content[0].substring(0, 150)}...</p>
</Col>
</Row>
</Link>
</Container>
)}
</Col>
</Row>
</ArticlesStyle>
</>
)
之后一切都变成了样式,如下所示:
const ArticlesStyle = styled.div`
.article-list-grid {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.wrapper {
@media (max-width: 600px) {
flex: 100%;
}
@media (min-width: 900px) {
flex: 50%;
}
}
.article-link {
text-decoration: none;
}
`;
此处最重要的是 flex: 50% 在 PC 屏幕上,这导致连续 2 列。现在一切看起来都如我所愿:
PC
手机