如何修复尺寸敏感的砌体

时间:2019-04-20 15:36:40

标签: html css css3 css-grid

我有一个简单的CSS砌体,当我减小屏幕尺寸时,第二个块(item2)的尺寸太小。如何在不使用媒体查询的情况下将块的大小更改为全宽?

enter image description here

body {
  font-family: sans-serif;
  background-color: #1b1b1b;
}

.grid-layout {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  grid-gap: 10px;
  grid-auto-rows: minmax(180px, auto);
  grid-auto-flow: dense;
  padding: 10px;
}

.grid-item {
  padding: 1rem;
  font-size: 14px;
  font-weight: bold;
  text-transform: uppercase;
  color: #929796;
  background-color: #333;
  border-radius: 5px;
}
.grid-item:nth-child(odd) {
  background-color: #424242;
}

.big {
  grid-column-end: span 2;
  grid-row-end: span 2;
}
<div class="grid-layout">
    <div class="grid-item">item 1</div>
    <div class="grid-item">item 2</div>
    <div class="grid-item big">item 3</div>
    <div class="grid-item">item 4</div>
    <div class="grid-item">item 5</div>
    <div class="grid-item">item 6</div>
    <div class="grid-item">item 7</div>
    <div class="grid-item">item 8</div>
    <div class="grid-item big">item 9</div>
    <div class="grid-item">item 10</div>
    <div class="grid-item">item 11</div>
    <div class="grid-item">item 12</div>
    <div class="grid-item">item 13</div>
    <div class="grid-item">item 14</div>
    <div class="grid-item">item 15</div>
    <div class="grid-item">item 16</div>
    <div class="grid-item">item 17</div>
    <div class="grid-item">item 18</div>
    <div class="grid-item">item 19</div>
    <div class="grid-item">item 20</div>
    <div class="grid-item">item 21</div>
    <div class="grid-item">item 22</div>
    <div class="grid-item">item 23</div>
</div>

1 个答案:

答案 0 :(得分:2)

问题在于,根据我上面的评论,网格布局受到过度约束:

  • 一方面,可用宽度小于容纳两列每行180px的宽度(因为您将列设置为grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)))-第二个item要放到下一行;

  • 另一方面,
  • 第二行中的第三列.item.big 两列,这迫使布局保留第二列。

您会遇到〜425px及其以下的问题-如果您希望定位此屏幕,则可以尝试媒体查询来调整big元素仅以较小的屏幕宽度 span 的第一列-参见下面的演示

body {
  font-family: sans-serif;
  background-color: #1b1b1b;
}

.grid-layout {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  grid-gap: 10px;
  grid-auto-rows: minmax(180px, auto);
  grid-auto-flow: dense;
  padding: 10px;
}

.grid-item {
  padding: 1rem;
  font-size: 14px;
  font-weight: bold;
  text-transform: uppercase;
  color: #929796;
  background-color: #333;
  border-radius: 5px;
}
.grid-item:nth-child(odd) {
  background-color: #424242;
}

.big {
  grid-column-end: span 2;
  grid-row-end: span 2;
}

@media only screen and (max-width: 450px) { /* added */
  .big {
    grid-column: 1;
  }
}
<div class="grid-layout">
    <div class="grid-item">item 1</div>
    <div class="grid-item">item 2</div>
    <div class="grid-item big">item 3</div>
    <div class="grid-item">item 4</div>
    <div class="grid-item">item 5</div>
    <div class="grid-item">item 6</div>
    <div class="grid-item">item 7</div>
    <div class="grid-item">item 8</div>
    <div class="grid-item big">item 9</div>
    <div class="grid-item">item 10</div>
    <div class="grid-item">item 11</div>
    <div class="grid-item">item 12</div>
    <div class="grid-item">item 13</div>
    <div class="grid-item">item 14</div>
    <div class="grid-item">item 15</div>
    <div class="grid-item">item 16</div>
    <div class="grid-item">item 17</div>
    <div class="grid-item">item 18</div>
    <div class="grid-item">item 19</div>
    <div class="grid-item">item 20</div>
    <div class="grid-item">item 21</div>
    <div class="grid-item">item 22</div>
    <div class="grid-item">item 23</div>
</div>