html - CSS Flexbox 中的分栏符
问题描述
我应该设置哪些 CSS 属性,以便列将用预先确定的分栏符和排序进行换行?
这些列将包含动态和可变高度的项目(因此不能在 CSS 中指定它们的高度)。
各种宽度的所需响应式布局
不成功的尝试
(我之前尝试使用 Grid layout 来做到这一点,但这不起作用,因为我没有严格的行高。)
我现在正在尝试使用 来执行此操作display: flex
,但它在大多数浏览器中的行为并不符合我的要求。一个例子:
header {
height: 2.0rem;
background: PeachPuff;
}
footer {
height: 2.0rem;
background: PaleGreen;
}
header,
footer,
section.app-column {
padding: 1.0rem;
}
section.app-column {
display: inline-block;
flex: none;
page-break-inside: avoid;
break-inside: avoid;
width: 150px;
margin-right: 0.5rem;
}
section#main section#app-column-primary {
background: Cyan;
}
section#main section#app-column-secondary {
background: Thistle;
}
section#main section#app-column-tertiary {
background: Coral;
}
section#main {
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
align-content: flex-start;
}
@media (max-width: 199px) {
section#main {
content: "<p>This application requires a wider graphical display.</p>";
}
section.app-column {
display: none;
}
}
@media (min-width: 200px) and (max-width: 399px) {
section#app-column-primary { order: 1; }
section#app-column-secondary { order: 2; }
section#app-column-tertiary { order: 3; }
section.app-column {
page-break-before: avoid;
break-before: avoid-column;
}
}
@media (min-width: 400px) and (max-width: 599px) {
section#app-column-primary { order: 1; }
section#app-column-secondary { order: 3; }
section#app-column-tertiary { order: 2; }
section.app-column {
page-break-before: always;
break-before: column;
}
section#app-column-tertiary {
page-break-before: avoid;
break-before: avoid-column;
}
}
@media (min-width: 600px) {
section#app-column-primary { order: 1; }
section#app-column-secondary { order: 2; }
section#app-column-tertiary { order: 3; }
section.app-column {
page-break-before: always;
break-before: column;
}
}
<header>Header ipsum, dolor sit amet.</header>
<section id="main">
<section class="app-column" id="app-column-primary">
Primary column
<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</section>
<section class="app-column" id="app-column-secondary">
Secondary column
<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Curabitur ac ornare justo. Sed vitae rhoncus nibh. Phasellus
venenatis, quam eu rutrum porta, velit dolor fermentum elit, eu
faucibus sapien ipsum in leo.
</section>
<section class="app-column" id="app-column-tertiary">
Tertiary column
<br />Lorem ipsum dolor sit amet.
</section>
</section>
<footer>Footer ipsum, dolor sit amet.</footer>
Firefox 中的正确结果
Firefox 正确解释了请求的break-before
属性。例如,在 2 列中:
Webkit 和 Chrome 无法分栏
但是 Chrome(和 Webkit 浏览器)错误地拒绝插入分栏符:
请注意,CanIUse 告诉我page-break-before
应该给出我想要的行为。然而,这个例子仍然失败,page-break-before
在正确的地方。
如何在所有支持 Flexbox 的浏览器中获得正确的结果?
解决方案
推荐阅读
- vue.js - 使用 vue 时如何为多页应用程序设置路径?
- jquery - 如何在 jquery 中使用每个 laravel 和 ajax
- java - 如果对象具有相同的 id,则遍历列表并添加属性
- sql - 在没有联合查询和联合查询之间谁更快?
- javascript - 如何使用验证码构建无垃圾邮件引导联系表
- c# - 使用 html 敏捷包获取 img src 值
- regex - 可以在 PhpStorm 或 Notepad++ 中进行 2 路替换吗?
- css - 如何为笔记本电脑创建 CSS,最大宽度是 1024 还是 1600px?
- r - 如何在 R 中省略 ggplot (geom_line) 图的特定部分?
- javascript - Ā 如何转换为两个字符 - Ä€ - 在文本文件中打开时,在 Chrome