html - 改变 CSS 网格的方向
问题描述
我想将所有列变成小型设备的行。是否可以使用 CSS 网格来做到这一点?我正在使用 GatsbyJS 和 Tailwind CSS。
这是代码:
const contentList = [
{
title: 'Text 1',
year: 2021,
body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin rhoncus finibus quam, condimentum tincidunt erat pharetra ac. Nunc ante sapien, congue vitae felis nec, lobortis viverra augue. Integer vitae nibh vel nunc finibus placerat. Aliquam tincidunt magna eros, nec maximus neque accumsan eget. Etiam vitae convallis massa. Donec diam nulla, volutpat a rutrum nec, pulvinar sit amet neque. Donec eleifend ut magna varius condimentum. Morbi eu erat et dolor porta porttitor eget vitae mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus ornare, risus id ornare sagittis, est augue convallis lectus, et aliquet magna arcu nec arcu. Donec at mollis metus. Aenean et mattis velit. Phasellus id enim magna.'
},
{
title: 'Text 2',
year: 2020,
body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin rhoncus finibus quam, condimentum tincidunt erat pharetra ac. Nunc ante sapien, congue vitae felis nec, lobortis viverra augue. Integer vitae nibh vel nunc finibus placerat. Aliquam tincidunt magna eros, nec maximus neque accumsan eget. Etiam vitae convallis massa. Donec diam nulla, volutpat a rutrum nec, pulvinar sit amet neque. Donec eleifend ut magna varius condimentum. Morbi eu erat et dolor porta porttitor eget vitae mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus ornare, risus id ornare sagittis, est augue convallis lectus, et aliquet magna arcu nec arcu. Donec at mollis metus. Aenean et mattis velit. Phasellus id enim magna.'
},
]
const currentYear = new Date().getFullYear()
const earliestYear = contentList.reduce((prev, curr) => prev.year > curr.year ? curr : prev).year
const timeline = []
for (let year = currentYear; year >= earliestYear; year--) {
timeline.push({
year: year,
contents: contentList.filter(e => e.year === year)
})
}
const Event = ({ year, title }) => (
<>
<div class="col-start-1 ml-auto text-gray-600">
{year ?? ""}
</div>
<div class="col-start-2 m-auto bg-gray-800 shadow-xl w-5 h-1 rounded-full z-10"></div>
<div class="col-start-3 col-span-3 mr-auto">
{title &&
<button class="text-left p-4 rounded-md hover:bg-black hover:text-white">
<div class="font-medium">{title}</div>
</button>}
</div>
</>
)
const Grid = () => (
<div class="relative grid grid-cols-5 lg:2/5 xl:w-1/3">
<div class="col-start-2 mx-auto mb-2 text-gray-600">
Present
</div>
<div class="col-start-2 mx-auto">
<div class="border-w-1 absolute border-gray-700 h-full border"></div>
</div>
{timeline.map(({ year, contents }) =>
<>
{contents.map(e => <Event title={e.title} />)}
<Event year={year} />
</>
)}
</div>
)
const Content = ({ content }) => (
<div class="ml-8 lg:3/5 xl:w-2/3">
<h5>{content.title}</h5>
<p>{content.body}</p>
</div>
)
export const Parent = () => {
return (
<section class="md:h-screen px-10 pt-10 flex items-center">
<div class="flex flex-col">
<h4>Title</h4>
<div class="flex flex-col lg:flex-row items-center">
<Grid />
<Content content={contentList[0]} />
</div>
</div>
</section>
)
}
时间线基本上是具有“年份”和“内容”作为属性的对象列表。内容列表充满了同年的内容。
我正在使用 contentList 动态生成网格单元。它在较大的屏幕上运行良好,网格和内容组件像这样并排显示
在较小的屏幕上,它目前看起来像这样:
我希望网格在较小的屏幕上水平对齐,即列应该变成行,顶部是年份,中间是一行,底部是文本。
这可能与 Tailwind 有关吗?
解决方案
您只需要将网格列设置为1fr
.
例子:grid-template-columns: 1fr
你需要找到一个与之等效的tailwindcss。
推荐阅读
- shell - 捕获 Makefile 目标的先决条件中的两个文件夹
- python - 如何在字典输出的每个第 n 个值之后添加破折号字符?
- python - from_personal_row() 接受 1 个位置参数,但给出了 2 个
- powerbi - 在 DAX/PBI 中将 SAMEPERIODLASTYEAR 偏移一周
- airflow - 登录自定义 Airflow 运算符
- c++ - 如果我在程序的主函数入口点结束时返回 EXIT_FAILURE,为什么什么也没有发生?
- c# - 从公共 Microsoft.IdentityModel.Tokens.JsonWebKey.JsonWebKey 转换为 RSAParameters(公共密钥)
- c - 如何解决“'main()'的多重定义”C编译错误?
- haskell - 使用 RankNTypes 编码的 System-F 自然数的“case”运算符无法进行类型检查
- ocaml - 在 Ocaml 中使用比较运算符会产生类型错误