HTML中元素的排列

Bur*_*ler 2 html css css3 flexbox css-grid

是否可以使用html + css实现此结构?

但是,我不想在橙色块之间留有垂直空间,我想成为另一个块的顶部。

我使用过flex和grid但到目前为止还没有真正成功:(

jsfiddle:

.container {
  padding: 10px;
  border: 1px solid red;
  display: flex;
  flex-flow: row wrap;
  justify-content: space-between;
}

.big {
  width: calc(60% - 22px);
  padding: 10px;
  background: lime;
  height: 100px;
  margin-bottom: 10px;
}

.small {
  width: calc(40% - 22px);
  height: 100px;
  padding: 10px;
  background: orange;
  margin-bottom: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="big"> I AM BIG 1</div>
  <div class="small"> I AM SMALL 1</div>
  <div class="big"> I AM BIG 2</div>
  <div class="big"> I AM BIG 3</div>
  <div class="big"> I AM BIG 4</div>
  <div class="small"> I AM SMALL 2 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

kuk*_*kuz 5

您可以使用CSS网格布局轻松做到这一点:

  • 您可以使用,grid-template-columns: 3fr 2fr;因为bigsmall元素的比例为60%到40%,

  • 行高可以使用设置grid-auto-rows: 100px

  • 行之间的边距可以使用grid-row-gap属性设置,

  • 现在将设置为big使用总是占据第一列grid-column: 1small而总是占据第二列。

请参阅下面的演示以获取到目前为止的配置:

.container {
  padding: 10px;
  border: 1px solid red;
  display: grid;
  grid-template-columns: 3fr 2fr;
  grid-auto-rows: 100px;
  grid-row-gap: 10px;
}

.big {
  padding: 10px;
  background: lime;
  grid-column: 1;
}

.small {
  padding: 10px;
  background: orange;
  grid-column: 2;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="big"> I AM BIG 1</div>
  <div class="small"> I AM SMALL 1</div>
  <div class="big"> I AM BIG 2</div>
  <div class="big"> I AM BIG 3</div>
  <div class="big"> I AM BIG 4</div>
  <div class="small"> I AM SMALL 2 </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,只需添加grid-auto-flow: dense即可将橙色方块拉到顶部-参见下面的演示:

.container {
  padding: 10px;
  border: 1px solid red;
  display: grid;
  grid-template-columns: 3fr 2fr; /* two columns */
  grid-auto-rows: 100px; /* row height */
  grid-row-gap: 10px; /* gap between rows */
  grid-auto-flow: dense; /* added */
}

.big {
  padding: 10px;
  background: lime;
  grid-column: 1; /* in first column */
}

.small {
  padding: 10px;
  background: orange;
  grid-column: 2; /* in second column */
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="big"> I AM BIG 1</div>
  <div class="small"> I AM SMALL 1</div>
  <div class="big"> I AM BIG 2</div>
  <div class="big"> I AM BIG 3</div>
  <div class="big"> I AM BIG 4</div>
  <div class="small"> I AM SMALL 2 </div>
</div>
Run Code Online (Sandbox Code Playgroud)