css - 如何在使用 grid 或 flex 时实现这种风格?
问题描述
我想要实现的是这样的:
起初,我试图使用它来实现这一点,flex
但后来我意识到它不可能用于红色框,因为 flex 是一维的。
现在我正试图弄清楚如何让蓝色框 自动填充剩余的空间,这似乎flex
是该工作的完美选择,但在grid
.
- 是否可以使用网格实现蓝框?如何?
- 如果没有,那有没有可能用flex实现红框?如何?(第四个瓷砖消耗两行。)
我现在在想的是使用grid
并为红色框留出一个空白空间并用单独的元素填充它。但我认为这是一个肮脏的把戏,棘手的部分是瓷砖是使用循环动态生成的。我正在使用ul li
#container{
display: grid;
grid-template-columns: auto auto auto;
grid-column-gap:2px;
grid-row-gap:2px;
width: 180px;
list-style:none;
}
.item{
height: 60px;
width: 60px;
background: grey;
}
<ul id="container">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
编辑:抱歉混淆,也许不清楚,但我想要的是最后一块瓷砖将填充剩余空间。我知道我可以专门使用它将占据的列,
grid
但我想要的是flex-grow
它将消耗剩余空间的行为。蓝色瓷砖不一定在 3-5 列位置。瓦片的数量是动态的。
解决方案
如果我们考虑红色元素将始终存在并且您将始终有 3 列的事实,那么我们可以轻松定义所有案例(它们总共只有 3 个,默认情况下为 1 个)
对于需要放置红色元素的位置也没有限制(或可能很少限制) 。
.container{
display: inline-grid;
grid-gap:2px;
grid-template-columns:auto auto auto;
grid-auto-rows:40px;
grid-auto-columns:40px;
width:130px;
grid-auto-flow:dense; /* This one will make the element fill all the empty cells */
}
.item{
background: grey;
}
.red {
grid-column:span 2;
grid-row:span 2;
background:red;
}
.item:last-child:nth-child(3n+1) {
grid-column:span 3;
background:blue;
}
.item:last-child:nth-child(3n+2) {
grid-column:span 2;
background:blue;
}
.item:last-child:nth-child(3n+3) {
background:blue;
}
/* Irrelevant styles */
.container {
list-style:none;
margin:5px;
padding:0;
border:1px solid green;
vertical-align:top;
}
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
<ul class="container">
<li class="item red"></li>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
推荐阅读
- elasticsearch - 具有 ngram 标记的分析器,具体取决于术语长度
- c++ - 如何在 C 中使用 API(不是 openssl 命令)从 OpenSSL 证书的 subject_alt_name 字段中提取 IP 地址
- java - 如何根据一个语句创建类对象
- npm - 如何使用 npm 安装 package.json 中的最新版本(无需手动编辑或升级)
- android - 无法点击图片查看
- arrays - 为什么我在 VBA 中的数组没有填充所有值?
- python - main() 函数中调用的函数没有更新全局变量的值
- ssh - 打包器:ssh 通信器忽略“ssh_port”
- javascript - 将 xml 站点地图文件添加到 react.js 站点
- java - 如何从JSoup中的无序列表中获取img元素的绝对url