reactjs - 如何根据媒体查询使列表每行显示多个项目
问题描述
我正在构建我的网站,该网站显示存储为 JSON 对象的各种列表。
最初列表显示所有项目,然后我有一个搜索框,可用于过滤掉不同的项目。
我希望我的列表每行显示多达 4 个 json 对象,一直到每行只有一个对象。取决于媒体查询。
我想通过简单地调整我的列表项 div 的大小,它会自动将额外的 div 放入每一行,直到使用容器 div 的最大宽度,然后它将在下一行呈现下一个对象等。但是这没有奏效,它继续仅在另一个对象下方显示一个对象,并且每行不会显示一个以上的对象。
列表布局:
export function Athlete(postDetail){
return(
<div className='Athletes'>
<p>Name: {postDetail.Name}</p>
<p>Town: {postDetail.Town}</p>
<p>State: {postDetail.State} </p>
<p>PostCode: {postDetail.PostCode}</p>
<img src={postDetail.Image} className='photo' alt='athlete photo'/>
</div>
)
}
列表布局css:
.Athletes{
width:15%;
height: 15%;
justify-items: center;
align-self: center;
background-color: grey;
border-style:groove;
justify-content: center;
margin-bottom: 20px;
}
列表功能:
export function AthleteList({athletes}) {
let athl = athletes.map((athlete, i) => {
return <Athlete key = {athlete.ID} {...athlete}/>
});
return <div>{athl}</div>
}
搜索框功能:
export function AthleteSearchBox({value, handleInput}) {
return (
<div>
<input onChange={handleInput} value={value} type ='text' className =
'searchBox'/>
</div>
);
}
最初我将 .Athletes{} 的高度和宽度设置为 55%,因此它每行只能渲染一个图像,因为两个将占据容器 div 的 100% 以上。但是现在我想渲染更多,我将它们减少到 15%,但结果仍然是相同的。
解决方案
div
默认情况下是一个block
元素,意味着兄弟 div 将默认堆叠。
如果您希望它们连续排列,您可以执行以下操作:
export function AthleteList({athletes}) {
let athl = athletes.map((athlete, i) => {
return <Athlete key = {athlete.ID} {...athlete}/>
});
return <div style="display: flex; flex-wrap: wrap;">{athl}</div>
}
display: flex;
将所有直接子项放在一行中,而flex-wrap: wrap;
wrap 将确保在给定行上没有足够空间时将项目放置在新行中。
推荐阅读
- r - 在GGplot中增加x轴的长度
- python - ModuleNotFoundError:没有名为“tqdm.notebook”的模块
- javascript - 从具有其他导入的文件导入时,Webpack Tree Shaking 不起作用
- kubernetes - Kubernetes 暴露一个应用程序 - AWX Operator
- python - (Django)基于类的视图中的验证表单不起作用
- arrays - 将 JSON 数组 API 响应转换为结构
- xpath - 如何在xpath的另一个表中排除一个表?
- api - Jmeter 没有显示正确的响应,而是提供服务器和连接详细信息的详细信息
- python - 在 udf 函数 pyspark 中实例化一个对象
- google-apps-script - 在为 Google App Script 设置 CI/CD 方面需要帮助?