html - CSS 网格自动填充和全 Angular 单元格 - 空列

标签 html css css-grid

我正在尝试构建一个 CSS 布局,其中包含一列或两列(取决于页面宽度),并在其上方有一个全 Angular "navbar" 。如果可能的话,我不想使用媒体查询。

* { word-wrap: break-word; }

#grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

nav {
  grid-column: 1 / -1;
}

/* only for visualisation */
#grid > * { margin: 5px; }
.col { border: 1px dashed black; }
nav { border: 1px solid blue; }
#grid { border: 1px solid red; }
<div id="grid">
  <nav>full width nav</nav>
  <div class="col">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
  <div class="col">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
</div>

窄屏幕:
narrow

正常屏幕:
enter image description here

但是,如果屏幕太宽,它会决定添加第三个甚至更多空列。我可以通过增加 minmax 中的最小值来修复它,但是当页面太窄时它会溢出。

too wide

如果我删除全 Angular 单元格,则不会发生此故障。

如何修复它?

Here is a jsfiddle demo

最佳答案

您只需增加minmax即可这里的宽度repeat(auto-fit, minmax(300px, 1fr))来自300px450px但这会导致布局提前收缩为两行,但在全屏模式下会适合它,所以如果你对收缩到提前没有任何问题,只需下面的内容

示例

* {
  word-wrap: break-word;
}

#grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(450px, 1fr));
  border: 1px solid red;
  grid-gap: 10px;
}

nav {
  grid-column: 1 / -1;
  border: 1px solid blue;
}

.col {
  border: 1px dashed black;
}
<div id="grid">
  <nav>full width nav</nav>
  <div class="col">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
  <div class="col">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
</div>
但是,如果您不喜欢早期缩小,这是通过检测您希望布局缩小为两行的屏幕尺寸来实现媒体查询的唯一最佳方法,然后将 repeat(1, minmax(300px, 1fr));要尊重一列,否则请使用 repeat(2, minmax(300px, 1fr));两列。

通过这种方式,您可以轻松设置 minmax为零,如 repeat(2, minmax(0, 1fr));当屏幕太小时,这看起来很棒

示例

* {
  word-wrap: break-word;
}

#grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(300px, 1fr));
  border: 1px solid red;
  grid-gap: 10px;
}

nav {
  grid-column: 1 / -1;
  border: 1px solid blue;
}

.col {
  border: 1px dashed black;
}

@media (max-width: 750px) {
  #grid {
    grid-template-columns: repeat(1, minmax(300px, 1fr));
  }
}
<div id="grid">
  <nav>full width nav</nav>
  <div class="col">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
  <div class="col">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
</div>

关于html - CSS 网格自动填充和全 Angular 单元格 - 空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64444793/

相关文章:

php - 通过 ACF 添加和删除悬停时的默认和悬停背景图像

html - CSS 布局 - 动态列内容定义包装器高度

html - 不使用 css 的 Ionic 2 复选框背景颜色。从注入(inject)/模拟数据中读取颜色

未应用 CSS 样式表

html - 关于Disqus的两个问题

html - 为什么 grid-auto-column 没有效果?

html - 您将如何使用 CSS 而不是 HTML 表格来实现这种基于表格的布局?

html - :target selector on dynamic generated element not affect

html - 将元素从嵌套的 "CSS Grid"移到外部

css - 将子元素对齐内部网格线