css - 带有 text-wrap 和 flex-wrap 的 Flex 布局
问题描述
我有几个项目的垂直列表。每个项目都是使用 flexbox 制作的两列布局。左列具有固定宽度。右列包含任意文本,应占用所有可用空间。
当窗口变窄时,我仍然想要两列布局。这里第二列应该变小,里面的文本应该换行。
当窗口变得更窄时(第二列与第一列的大小大致相同),我希望第二列移动到第一列下方。
我只是给第一列一个固定的宽度并放在flex-wrap: wrap
容器上。问题是,当右列中的文本超过一行时,flex-wrap 已经启动。它“优先于”第二列中的文本换行。
如何创建上述布局?
我创建了一个代码笔来解决我的问题:https ://codepen.io/maxwell89/pen/PoWrBzJ 。
main {
border: thin solid black;
}
article {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
article header {
margin-right: 2em;
width: 5em;
background-color: red;
}
article section {
background-color: blue;
}
<body>
<main>
<article>
<header>Header1</header>
<section>iaOIsadjio jiasdj asd you asda sad iaeojrasod aosidjasdjias diojsadiojas oidjasjio dasijod asd</section>
</article>
<article>
<header>Header2</header>
<section>Something short</section>
</article>
</main>
</body>
尝试调整浏览器窗口的大小,您会发现第一项包裹得太早了。
解决方案
您需要将flex-basis
第二个元素的宽度设置为等于第一个元素的宽度。这样做,当该宽度无法容纳在容器内时,您将触发换行。
main {
border: thin solid black;
}
article {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
article header {
margin-right: 2em;
width: 5em;
background-color: red;
}
article section {
background-color: blue;
flex-basis: 5em;
flex-grow: 1;
}
<main>
<article>
<header>Header1</header>
<section>iaOIsadjio jiasdj asd you asda sad iaeojrasod aosidjasdjias diojsadiojas oidjasjio dasijod asd</section>
</article>
<article>
<header>Header2</header>
<section>Something short</section>
</article>
</main>
推荐阅读
- r - 将 R 中的粒子包应用于海洋速度
- c# - 如果 LINQ 中的条件为非收集
- kubernetes-helm - Helm - 安装父图表时如何在子图表中使用自定义值文件
- python-3.x - 你能帮我使用 Python 中的字典列表吗
- linux - 安装有冲突的 ubuntu 包
- api - http 获取 API 密钥
- python - 无法使用按钮打破循环
- python - 使用 ColorProperty 进行动画时出现“TypeError”
- python - Python 的 Shell 脚本引发 ModuleNotFoundError
- jquery - Jquery在单独的js文件中不起作用