html - 使网格元素自动填充空白

标签 html css autocomplete css-grid

我有以下 CSS 网格系统,它有 4 种不同的单元格大小: 小,宽,高,大。 在桌面版本中,我将它们制作成拼图形状,看起来不错,但为了使其适合移动设备,我需要类为 small 的单元格自动填充出现的空白区域。

这是CSS:

.portfolio-holder {
    margin: 66px auto;
    display: flex;
    flex-wrap: wrap;
}

.portfolio {
    margin: auto;
    display: grid;
    height: 100%;
    grid-template-rows: repeat(13, 200px);
    grid-template-columns: repeat(4, 200px);
    grid-gap: 10px;
    padding: 24px;
    grid-auto-rows: minmax(100px, auto);
}

.portfolio_hat {
    background: #fd3a1e;
    overflow: hidden;
    color: black;
    font-weight: 14px;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 1.5em;
    background-size: cover;
    background-position: top left;
    position: relative;
}

.portfolio_hat.tall {
    grid-row: span 2;
    grid-column: span 1;
}

.portfolio_hat.wide {
    grid-row: span 1;
    grid-column: span 2;
}

.portfolio_hat.small {
    grid-row: span 1;
    grid-column: span 1;
}

.portfolio_hat.tall {
    grid-row: span 2;
    grid-column: span 2;
}

@media (max-width:860px) {
    .portfolio {
        grid-template-rows: repeat(26, 40vw);
        grid-template-columns: repeat(2, 40vw);
    }
}

HTML 看起来像这样:

<section class="portfolio-holder">
    <div id="port" class="portfolio">
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <!-- divs like the four above are generated from MYSQL DATABASE and there's a lot of them in a chaotic order -->
    </div>
</section>

我想要一种方法来确保无论网格中的列数如何,我都不会得到任何空白。

谢谢

最佳答案

看看https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow

The grid-auto-flow CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.

.portfolio-holder {
    margin: 66px auto;
    display: flex;
    flex-wrap: wrap;
}

.portfolio {
    margin: auto;
    display: grid;
    height: 100%;
    grid-template-rows: repeat(13, 200px);
    grid-template-columns: repeat(4, 200px);
    grid-gap: 10px;
    padding: 24px;
    grid-auto-rows: minmax(100px, auto);
grid-auto-flow: row dense;/*  here your CSS update */
}
.portfolio_hat {
  background: #fd3a1e;
  overflow: hidden;
  color: black;
  font-weight: 14px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 1.5em;
  background-size: cover;
  background-position: top left;
  position: relative;
}

.portfolio_hat.tall {
  grid-row: span 2;
  grid-column: span 1;
}

.portfolio_hat.wide {
  grid-row: span 1;
  grid-column: span 2;
}

.portfolio_hat.small {
  grid-row: span 1;
  grid-column: span 1;
}

.portfolio_hat.tall {
  grid-row: span 2;
  grid-column: span 2;
}

@media (max-width:860px) {
.portfolio {
    grid-template-rows: repeat(26, 40vw);
    grid-template-columns: repeat(2, 40vw);
   }
}
div {/* see them for demo */
  border: solid 1px;
  padding: 1em;
  margin: 2px;
}
<section class="portfolio-holder">
    <div id="port" class="portfolio">
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <div href="#" class="portfolio_hat tall"></div>
        <div href="#" class="portfolio_hat small"></div>
        <div href="#" class="portfolio_hat wide"></div>
        <div href="#" class="portfolio_hat large"></div>
        <!-- divs like the four above are generated from MYSQL DATABASE and there's a lot of them in a chaotic order -->
    </div>
</section>

关于html - 使网格元素自动填充空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399648/

相关文章:

javascript - 使用 Javascript 循环将 PHP 数据发送到 Modal

javascript - 为什么在 IE 中加载图像不显示在页面的中心底部?

html - 断点之间的 Bootstrap 中不显示下拉菜单

eclipse - 使用 eclipse 从 Windows 机器在 UNIX 机器上进行远程 C 开发

jquery - 增加自动完成滚动条的大小

javascript - 在自动完成javascript中使用向下箭头选择div的元素

jquery - 水平滚动条没有出现在 jquery 数据表中

html - 如何在 HTML5/CSS3 中创建一个推子并将任意元素放在前面(以引起注意)?

jquery - 链接的响应式水平轮播 - bootstrap-mvc

css - 颜色之上的透明图像