【问题标题】:CSS Grid using float items使用浮动项目的 CSS Grid
【发布时间】:2019-10-21 06:48:08
【问题描述】:

我正在尝试实现一个简单的网格,每行有 3 个方形项目,每个项目最多可以有 3 行/列。这是我目前所拥有的:

https://jsfiddle.net/dt3u6840/

HTML:

<div class="layout-grid">
 <a href="#" class="block" data-rows="2" data-cols="2"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="3"></a>
</div>

CSS:

.layout-grid { overflow: hidden; max-width: 800px; width: 100%; }
.layout-grid .block { position: relative; display: block; float: left; background-color: green; height: auto; transition: all .3s ease; }
.layout-grid .block:hover { opacity: .2; }
.layout-grid .block:nth-child(odd) { background-color: blue; }
.layout-grid .block[data-cols="1"] { width: 33.33333333333%; }
.layout-grid .block[data-cols="2"] { width: 66.66666666666%; }
.layout-grid .block[data-cols="3"] { width: 100%; }
.layout-grid .block[data-rows="1"] { padding-top: 33.33333333333%; }
.layout-grid .block[data-rows="2"] { padding-top: 66.66666666666%; }
.layout-grid .block[data-rows="3"] { padding-top: 100%; }

这很好用。但是,如果我尝试添加 > 1 行的项目,它不会:

https://jsfiddle.net/pz4vhjw6/

新的 HTML:

<div class="layout-grid">
 <a href="#" class="block" data-rows="2" data-cols="2"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="2" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
 <a href="#" class="block" data-rows="1" data-cols="1"></a>
</div>

我能做些什么来完成这项工作吗?

【问题讨论】:

    标签: html css layout css-float


    【解决方案1】:

    您可以在此处使用CSS Grid layout - 并不是说​​它仅在现代浏览器中受支持(请参阅support info)。在这里,您可以使用 3 列布局和 span 行和/或列来获得所需的布局 - 请参阅下面的两个布局的演示:

    .layout-grid {
      display: grid;
      grid-template-columns: 1fr 1fr 1fr; /* 3 columns */
      width: 100%;
      max-width: 800px;
    }
    
    .layout-grid .block {
      background-color: green;
      transition: all .3s ease;
      padding-top: 100%; /* set height of block */
    }
    
    .layout-grid .block:hover {
      opacity: .2;
    }
    
    .layout-grid .block:nth-child(odd) {
      background-color: blue;
    }
    
    .layout-grid .block[data-cols="2"] {
      grid-column: span 2; /* occupy 2 columns */
      grid-row: span 2; /* occupy 2 rows */
    }
    
    .layout-grid .block[data-cols="3"] {
      grid-column: span 3; /* occupy 3 columns */
      grid-row: span 3; /* occupy 3 rows */
    }
    
    .layout-grid .block[data-rows="2"] {
      grid-row: span 2; /* occupy 2 rows */
    }
    
    .layout-grid .block[data-rows="3"] {
      grid-row: span 3; /* occupy 3 rows */
    }
    <div class="layout-grid">
      <a href="#" class="block" data-rows="2" data-cols="2"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="3"></a>
    </div>
    
    <br/>
    
    <div class="layout-grid">
      <a href="#" class="block" data-rows="2" data-cols="2"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="2" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
      <a href="#" class="block" data-rows="1" data-cols="1"></a>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 2021-09-19
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多