html - 具有 CSS 网格的等高不同纵横比框

标签 html css css-grid

我正在尝试创建这样的布局:

enter image description here

  • 右侧的橙色 block 都具有相同的纵横比和高度。
  • 蓝色 block 具有不同的纵横比。
  • 蓝色 block 的高度和橙色 block 的总和应该相等,如图所示。

有没有办法通过 CSS 网格创建这样的布局?我知道我可以将橙色元素包装在单独的列元素中,但我想避免这种情况。当每个元素的纵横比为正方形时,我也设法创建了这种布局,但这个布局并不走运......

jsfiddle 上的示例 http://jsfiddle.net/fq974gov/

 .grid {
  display: grid;
  grid-gap: 10px;
  width: 200px;
}
.item-left {
  background: lightblue;
  padding-bottom: 120%;
}
.item-right {
  background: tomato;
  padding-bottom: 60%;
}
<div class="grid">
  <div class="item-left"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
</div>

最佳答案

您可以定义模板区域并使用 grid-template-columns 控制比例

.grid {
  display: grid;
  grid-template-areas:
    "l1 r1"
    "l1 r2"
    "l1 r3";
  grid-template-columns:3fr 2fr; /*adjust this as you like*/
  grid-gap: 10px;
  width: 200px;
  animation:change 2s infinite alternate linear;
}
.item-left {
  grid-area:l1;
  background: lightblue;
  /*padding-bottom: 120%; no more needed*/
}
.item-right {
  background: tomato;
  padding-bottom: 60%;
}
.item-right:nth-child(2) {
  grid-area:r1;
}
.item-right:nth-child(3) {
  grid-area:r2;
}
.item-right:nth-child(4) {
  grid-area:r3;
}

@keyframes change{
  to{width:300px;}
}
<div class="grid">
  <div class="item-left"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
</div>

代码可以这样简化:

.grid {
  display: grid;
  grid-template-areas:
    "l r"
    "l r"
    "l r";
  grid-template-columns:3fr 2fr; /*adjust this as you like*/
  grid-gap: 10px;
  width: 200px;
  animation:change 2s infinite alternate linear;
}
.item-left {
  grid-area:l;
  background: lightblue;
}
.item-right {
  background: tomato;
  padding-bottom: 60%;
}
@keyframes change{
  to{width:300px;}
}
<div class="grid">
  <div class="item-left"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
  <div class="item-right"></div>
</div>

关于html - 具有 CSS 网格的等高不同纵横比框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51807504/

相关文章:

jquery - 如何制作在用户看到它们时立即启动的动画

javascript - css animationend 没有动画

html - 网格内的 CSS 位置粘性侧边栏

javascript - AngularJS 使用 Ng-Repeat 按属性过滤不工作

javascript - 使用 AJAX 捕获 Node JS 路由的响应并将其显示在 HTML 上

javascript - URL 查询字符串中的特殊字符

javascript - 绘制旋转 Canvas 后 Canvas 模糊

javascript - 用于查找页面上使用的所有字体的脚本

css - Firefox:flexbox 容器内的元素不保持纵横比

html - CSS固定网格侧填充在网格列上消失