CSS Flexbox 3 列网格(4X4 + 1 大)
CSS Flexbox 3 columns Grid (4X4 + 1 large)
我正在尝试弄清楚如何在 Flexbox 中得到它,但我唯一能得到的是代码片段:
你有没有想法只管理这个 CSS(我不能真正触及 HTML 的结构,因为它是一个 PHP foreach
循环)?
可以使用 CSS grid
帮助吗?
.grid {
display: flex;
justify-content: start;
flex-wrap: wrap;
}
.photo {
position: relative;
flex: 0 0 calc(25% - 20px);
margin: 10px;
align-self: flex-start;
overflow: hidden;
background: black;
}
.photo:after {
content: "";
display: block;
padding-top: 100%;
}
.large {
flex: 0 0 calc(50% - 20px);
}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>
此解决方案使用 css grid
,请注意它在 Internet Explorer 中的 compatibility。
.grid {
display: grid;
grid-gap: 10px;
width:100vw;
height:100vh;
grid-template: "item1 item2 large large" "item3 item4 large large"
}
.photo {
background: black;
}
.large {
grid-area:large;
}
.photo:nth-of-type(2){ grid-area:item1;}
.photo:nth-of-type(3){ grid-area:item2;}
.photo:nth-of-type(4){ grid-area:item3;}
.photo:nth-of-type(5){ grid-area:item4;}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>
基于这是 squares 的事实,您可以简单地将 large 放在绝对右边,然后将 smaller,用他们的 padding-top 技巧,将控制 large 的 高度。
然后,通过在 grid
上设置填充,我们将左侧 保持较小 并使右侧 space 大.
此外,我们还需要将 small 更改为 space 的 50%,而不是 25%。
堆栈片段
.grid {
position: relative;
display: flex;
flex-wrap: wrap;
padding-right: 50%;
}
.photo {
position: relative;
flex: 0 0 calc(50% - 20px);
margin: 10px;
overflow: hidden;
background: black;
}
.photo:not(.large):after {
content: "";
display: block;
padding-top: 100%;
}
.large {
position: absolute;
right: 0;
width: calc(50% - 20px);
height: calc(100% - 20px);
}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>
我正在尝试弄清楚如何在 Flexbox 中得到它,但我唯一能得到的是代码片段:
你有没有想法只管理这个 CSS(我不能真正触及 HTML 的结构,因为它是一个 PHP foreach
循环)?
可以使用 CSS grid
帮助吗?
.grid {
display: flex;
justify-content: start;
flex-wrap: wrap;
}
.photo {
position: relative;
flex: 0 0 calc(25% - 20px);
margin: 10px;
align-self: flex-start;
overflow: hidden;
background: black;
}
.photo:after {
content: "";
display: block;
padding-top: 100%;
}
.large {
flex: 0 0 calc(50% - 20px);
}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>
此解决方案使用 css grid
,请注意它在 Internet Explorer 中的 compatibility。
.grid {
display: grid;
grid-gap: 10px;
width:100vw;
height:100vh;
grid-template: "item1 item2 large large" "item3 item4 large large"
}
.photo {
background: black;
}
.large {
grid-area:large;
}
.photo:nth-of-type(2){ grid-area:item1;}
.photo:nth-of-type(3){ grid-area:item2;}
.photo:nth-of-type(4){ grid-area:item3;}
.photo:nth-of-type(5){ grid-area:item4;}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>
基于这是 squares 的事实,您可以简单地将 large 放在绝对右边,然后将 smaller,用他们的 padding-top 技巧,将控制 large 的 高度。
然后,通过在 grid
上设置填充,我们将左侧 保持较小 并使右侧 space 大.
此外,我们还需要将 small 更改为 space 的 50%,而不是 25%。
堆栈片段
.grid {
position: relative;
display: flex;
flex-wrap: wrap;
padding-right: 50%;
}
.photo {
position: relative;
flex: 0 0 calc(50% - 20px);
margin: 10px;
overflow: hidden;
background: black;
}
.photo:not(.large):after {
content: "";
display: block;
padding-top: 100%;
}
.large {
position: absolute;
right: 0;
width: calc(50% - 20px);
height: calc(100% - 20px);
}
<div class="grid">
<div class="photo large"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
<div class="photo"></div>
</div>