css - 为什么我的带有 ASCII 艺术字的网格模板区域不起作用?

标签 css ascii css-grid

什么时候

grid-template-areas:
       "....... header  header"
       "sidebar content content";

更改为:

grid-template-areas:
       "....... header  header"
       "sidebar header content";

一切都崩溃了。

如何使用 CSS Grid 布局实现相同的效果?

body {
  margin: 40px;
}

.sidebar {
  grid-area: sidebar;
}

.content {
  grid-area: content;
}

.header {
  grid-area: header;
}

.wrapper {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 120px 120px 120px;
  grid-template-areas: "....... header  header" "sidebar content content";
  background-color: #fff;
  color: #444;
}

.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 20px;
  font-size: 150%;
}

.header {
  background-color: #999;
}
<div class="wrapper">
  <div class="box header">Header</div>
  <div class="box sidebar">Sidebar</div>
  <div class="box content">Content</div>
</div>

https://codepen.io/rachelandrew/pen/oXKgoQ

最佳答案

在使用带有 grid-template-areas 属性的 ASCII 艺术时,目前存在一个重要的限制:命名的网格区域必须是矩形

换句话说,不允许使用同名的俄罗斯方 block 形状的网格区域

此行为在规范的两个部分中定义。

7.3. Named Areas: the grid-template-areas property

If a named grid area spans multiple grid cells, but those cells do not form a single filled-in rectangle, the declaration is invalid.

Non-rectangular or disconnected regions may be permitted in a future version of this module.

9. Placing Grid Items

Every grid item has a grid area, a rectangular set of grid cells that the grid item occupies.

在您的第一个示例中,所有网格区域都形成矩形。所以规则是有效的。

grid-template-areas:
       "....... header  header"
       "sidebar content content";

在您的第二个示例中,header 区域形成了一个非矩形形状。所以这个规则是无效的。

grid-template-areas:
       "....... header  header"
       "sidebar header content";

(请注意,一个句点 (.) 或一系列相连的句点 (...) 形成一个未命名 网格区域,其中上面的规则不适用( spec reference )。)


幸运的是,Grid 提供了多种布局网格项的方法。

您可以使用 line-based placement 而不是 grid-template-areas

.wrapper {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 120px 120px 120px;
  grid-auto-rows: 100px;
  background-color: #fff;
  color: #444;
}

.header {
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}

.sidebar {
  grid-column: 1 / 2;
  grid-row: 2 / 3;
}

.content {
  grid-column: 3 / 4;
  grid-row: 2 / 3;
}

.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 20px;
  font-size: 150%;
}

.header {
  background-color: #999;
}

body {
  margin: 40px;
}
<div class="wrapper">
  <div class="box header">Header</div>
  <div class="box sidebar">Sidebar</div>
  <div class="box content">Content</div>
</div>


另外,请注意grid-template-areas 的所有字符串值必须具有相同的列数。有关详细信息,请参阅此帖子:

关于css - 为什么我的带有 ASCII 艺术字的网格模板区域不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659087/

相关文章:

html - 是否可以在 Bootstrap 3 网格中间有一个大单元格?

css - Internet Explorer 11 中的绝对定位错误

javascript - 如何着手创建一个在动画位置和不透明度时立即显示的工具提示?

html - 带段落 CSS 的自定义有序列表

c# - 如何将字符串转换为整数表示并将其改回

c - 在 C 中处理 ASCII 字母

html - img div 不适合 css 网格单元格

javascript - CSS AST 分析器

c++ - 从 ASCII 到 Unicode 字符代码的转换 (FreeType2)

CSS 网格 - 仅在桌面上替换元素顺序