网格模板区 | CSS Grid Layout: Grid Template Areas (Grid Layout) - CSS 中文开发手册 - Break易站

  •   CSS 中文开发手册

    网格模板区 | CSS Grid Layout: Grid Template Areas (Grid Layout) - CSS 中文开发手册

    在前指南我们研究了网格线,以及如何在这些行中定位项目。当您使用CSSGrid布局时,您总是有行的,这可以是一种简单的将项放置在网格中的方法。但是,有一种替代方法可用于在网格上定位项目,可以单独使用,也可以与基于行的放置结合使用。此方法涉及使用命名模板区域放置项,我们将确切地了解该方法是如何工作的。您将很快看到为什么我们有时称之为网格布局%21的ascii-art方法。

    命名网格区域

    您已经遇到了grid-area。这是一个属性,它可以将用于定位网格区域的所有四条线作为值。

    .box1 {
       grid-area: 1 / 1 / 4 / 2;
    }

    在定义所有四条线时,我们要做的是通过指定包围该区域的线来定义区域。

    我们也可以定义一个区域,方法是给它一个名称,然后在grid-template-areas财产。你可以选择你想要给你的区域命名的东西。例如,如果我希望创建如下所示的布局,我可以确定四个主要区域。

    标题脚侧边栏主要内容

    带着grid-area属性可以为这些区域中的每一个指定名称。这还不会创建任何布局,但我们现在已经指定了要在布局中使用的区域。

    .header {
        grid-area: hd;
    }
    .footer {
        grid-area: ft;
    }
    .content {
        grid-area: main;
    }
    .sidebar {
        grid-area: sd;
    }

    定义了这些名称之后,我就创建了我的布局。这一次,我没有使用项目本身指定的行号来放置项目,而是在网格容器上创建整个布局。

    .wrapper {
        display: grid;
        grid-template-columns: repeat(9, 1fr);
        grid-auto-rows: minmax(100px, auto);
        grid-template-areas: 
          "hd hd hd hd   hd   hd   hd   hd   hd"
          "sd sd sd main main main main main main"
          "ft ft ft ft   ft   ft   ft   ft   ft";
    }
    <div class="wrapper">
        <div class="header">Header</div>
        <div class="sidebar">Sidebar</div>
        <div class="content">Content</div>
        <div class="footer">Footer</div>
    </div>

    使用这种方法,我们不需要在单个网格物品上指定任何东西,所有事情都发生在我们的网格物品容器上。我们可以将布局描述为grid-template-areas属性的值。

    将网格单元留空

    在这个例子中,我们已经完全填充了我们的网格,没有留下空白区域。但是,您可以使用此布局方法将网格单元留空。要将单元格留空,请使用句号“ .'。如果我只想直接在主要内容下显示页脚,则需要将侧栏下方的三个单元格留空。

    .header {
        grid-area: hd;
    }
    .footer {
        grid-area: ft;
    }
    .content {
        grid-area: main;
    }
    .sidebar {
        grid-area: sd;
    }
    .wrapper {
        display: grid;
        grid-template-columns: repeat(9, 1fr);
        grid-auto-rows: minmax(100px, auto);
        grid-template-areas: 
          "hd hd hd hd   hd   hd   hd   hd   hd"
          "sd sd sd main main main main main main"
          ".  .  .  ft   ft   ft   ft   ft   ft";
    }
    <div class="wrapper">
        <div class="header">Header</div>
        <div class="sidebar">Sidebar</div>
        <div class="content">Content</div>
        <div class="footer">Footer</div>
    </div>

    为了使布局更整洁,我可以使用多个.字符。只要之间没有空白,它就会被计为一个单元格。对于复杂的布局,将行和列整齐排列是有好处的。这意味着你可以在CSS中看到这个布局的样子。

    跨越多个单元格

    在我们的例子中,每个区域跨越多个网格单元格,我们通过多次重复该网格区域的名称来实现这一点,其间具有空白区域。您可以添加额外的空白,以保持您的列排列整齐的值grid-template-areas。你可以看到,我已经这样做了,hd并ft和main。

    通过链接区域名称创建的区域必须是矩形的,此时无法创建L形区域。规范确实注意到未来的级别可能会提供此功能。但是,您可以像列一​​样容易地跨行。例如,我们可以让我们的侧边栏通过更换跨越到页脚的末尾.用sd。

    .header {
        grid-area: hd;
    }
    .footer {
        grid-area: ft;
    }
    .content {
        grid-area: main;
    }
    .sidebar {
        grid-area: sd;
    }
    .wrapper {
        display: grid;
        grid-template-columns: repeat(9, 1fr);
        grid-auto-rows: minmax(100px, auto);
        grid-template-areas: 
          "hd hd hd hd   hd   hd   hd   hd   hd"
          "sd sd sd main main main main main main"
          "sd sd sd  ft  ft   ft   ft   ft   ft";
    }

    grid-template-areas的值必须显示一个完整的网格, 否则它是无效的 (并且该属性被忽略)。这意味着每行的单元格数必须相同, 如果为空, 则显示一个完全停止字符, 表明该单元格将留空。如果您的区域不是矩形的, 也将创建无效的网格。

    转载请保留页面地址:https://www.breakyizhan.com/css/32205.html

    posted on 2020-07-02 22:40  MrAit  阅读(389)  评论(0编辑  收藏  举报

    导航