CSS 网格特定布局

CSS Grid specific layout

我正在寻找一种使用纯 CSS 网格来表示下一个布局的方法。

版面图片: https://i.stack.imgur.com/rDxv3.jpg

我的代码:

<div class=“grid-layout”>
  <div class=“item”>1</div>
  <div class=“item”>2</div>
  <div class=“item”>3</div>
  <div class=“item”>4</div>
</div>

每个 child div 都需要具有相应的 class 名称,以下 CSS 具有该名称。增加和减少间隙到需要的大小,(第一个值是行之间的间隙,第二个是列之间的间隙)

.grid-layout {
    display: grid; 
    grid-template-columns: 1fr 1fr 1fr; 
    grid-template-rows: 1fr 1fr 1fr; 
    gap: 5px 5px; 
    grid-template-areas: "item-1 item-1 item-2" "item-1 item-1 item-3" "item-1 item-1 item-4"; 
}
 
.item-1 { 
    grid-area: item-1; 
}
.item-2 { 
    grid-area: item-2; 
}
.item-3 { 
    grid-area: item-3; 
}
.item-4 { 
    grid-area: item-4; 
}

简单如下:

.grid-layout {
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:20px;
  height:500px;
}
.grid-layout > * {
  border:2px solid;
}
.grid-layout > :first-child {
  grid-area:span 3/span 3;
}
<div class="grid-layout">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>

如果你想要始终保持正方形,试试这个:

.grid-layout {
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:20px;
}
.grid-layout > * {
  border:2px solid;
  display:flex;
}
.grid-layout > *:before {
  content:"";
  padding-top:100%;
}
.grid-layout > :first-child {
  grid-area:span 3/span 3;
}
<div class="grid-layout">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>