css - 如何使用 grid/flex 在 CSS 中创建具有不同大小行的 UI?
问题描述
我需要像图中一样创建一个 UI,它将根据传递给其元素的类(2 个视图)来更改其布局。
第一个布局看起来像两列,在第一列中有 2 个 div(a 和 b),一个在顶部另一个没有间隙,第二列中的第三个 div(c)与顶部对齐。
第二个布局 - 所有 3 个 div 都在一列中,但第二列(c)的 div 进入它们之间(a 和 b)
我尝试在第一个布局(grid-template-columns: auto auto
)中使用网格 css 和 2 列将其转换为第二个视图(grid-template-columns: auto
)中的一列,但问题是 C 块比 A 长,因此网格行根据最长的 div 加长所以那里A 和 B 之间的差距很大。有什么想法最好使用 flex 或 grid 吗?
.a {
width: 50px;
height:30px;
background: pink;
}
.b {
width: 50px;
height:80px;
background: green;
}
.c {
width: 50px;
height:80px;
background: red;
}
.cont {
display: grid;
grid-template-columns: auto auto;
width: 120px;
}
<div class="cont">
<div class="a">A
</div>
<div class="c">C
</div>
<div class="b">B
</div>
</div>
解决方案
问题是您只处理两行。自动调整大小的行将采用最高项目的高度。这将在较短的项目和行的底部之间产生间隙。
采取不同的方法:
- 将行分解为每个网格项的公倍数(即 10 像素)。
- 让每个项目
span
跨行以达到它们的高度。
.cont {
display: grid;
grid-template-columns: 50px 50px;
grid-auto-rows: 10px;
grid-gap: 10px;
width: 120px;
}
.a {
grid-row: 1 / span 3;
grid-column: 1;
background: pink;
}
.b {
grid-row: 4 / span 8;
grid-column: 1;
background: green;
}
.c {
grid-row: 1 / span 8;
grid-column: 2;
background: red;
}
<div class="cont">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
</div>
推荐阅读
- python - 发送带有数据的 Firebase 消息时出现问题
- c - 如何将 UDP 数据包复制到两个或多个套接字
- java - Eclipse 构建覆盖 jdk 版本首选项
- javascript - 当一个函数表现得像一个类但不使用 class 关键字或“new”关键字(在 Javascript 中)时,它会调用什么?
- python-3.x - 日期线中的空间自相关
- html - 使用 C# 检索 CRM Web 资源附件
- javascript - 如何从 Javascript 中的 JSON 数组对象中读取数据
- java - 在 Java 中,为什么 1L << 67 等于 8?
- python - 如何按名称查找特定子文件夹并重命名它们?
- javascript - 将 Angular 5 应用程序动态注入 iframe 时,“选择器应用程序根不匹配任何元素”