CSS Grid 布局教程
<p>CSS Grid 是二维布局方法,也就是用竖线和横线将内容划分成格子,像棋盘一样。本文只介绍常见用法,要了解全部用法请看 <a href="https://developer.mozilla.org/en-US/">MDN Web Docs</a>。推荐大家看完后做文末提到的习题。</p>
<h2 class="heading" id="概念">
概念<span class="heading__anchor"> <a href="#%e6%a6%82%e5%bf%b5">#</a></span>
</h2><h3 class="heading" id="网格容器grid-container网格项grid-item">
网格容器(Grid Container)、网格项(Grid Item)<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e5%ae%b9%e5%99%a8grid-container%e7%bd%91%e6%a0%bc%e9%a1%b9grid-item">#</a></span>
</h3><p><code>display: grid | inline-grid</code> 使元素变成网格容器,其子元素叫网格项(其他后代不算),按照网格布局排列。下面代码的 <code>.container</code> 是网格容器,<code>.item</code> 是网格项,<code>.sub-item</code> 不是网格项。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item"</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">p</span> <span class="na">class</span><span class="o">=</span><span class="s">"sub-item"</span><span class="p">></</span><span class="nt">p</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item"</span><span class="p">></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="网格线grid-line">
网格线(Grid Line)<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e7%ba%bfgrid-line">#</a></span>
</h3><p>划分网格的竖线(vertical line)或横线(horizontal line)。横线方向和书写方向一致(英文是从左到右),竖线方向是从上到下。同一条网格线可以有多个名称。</p>
<figure>
<img src="https://www.w3.org/TR/css-grid-1/images/grid-lines.png"><figcaption>虚线是网格线</figcaption></figure><h3 class="heading" id="网格单元grid-cell">
网格单元(Grid Cell)<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e5%8d%95%e5%85%83grid-cell">#</a></span>
</h3><p>网格布局的最小单位,就像电子表格的单元格和棋盘的格子,相邻的 2 个竖线之间和相邻的 2 条横线之间的区域。1 个网格项可以使用多个网格单元。</p>
<h3 class="heading" id="网格轨道grid-track">
网格轨道(Grid Track)<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e8%bd%a8%e9%81%93grid-track">#</a></span>
</h3><p>2 条相邻网格线之间的区域,也就是 1 个横排(row)或者 1 个竖排(column)。</p>
<h3 class="heading" id="网格区域grid-area">
网格区域(Grid Area)<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e5%8c%ba%e5%9f%9fgrid-area">#</a></span>
</h3><p>由 4 条网格线划分的区域,也就是长方形,比如 1 个网格单位、4 个网格单位、6 个网格单位。</p>
<p>示例(A 表示网格区域):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">A???
</span></span><span class="line"><span class="cl">????
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">AA??
</span></span><span class="line"><span class="cl">AA??
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">AAA?
</span></span><span class="line"><span class="cl">AAA?
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="显性网格explicit-grid隐性网格implicit-grid">
显性网格(Explicit Grid)、隐性网格(Implicit Grid)<span class="heading__anchor"> <a href="#%e6%98%be%e6%80%a7%e7%bd%91%e6%a0%bcexplicit-grid%e9%9a%90%e6%80%a7%e7%bd%91%e6%a0%bcimplicit-grid">#</a></span>
</h3><p>显性网格有固定数量的网格轨道,比如 3×3。如果此时加入额外的网格项,网格将自动添加 auto 尺寸的隐性网格轨道,原来的显性网格轨道加上自动添加的隐性网格轨道就是隐性轨道。只定义竖网格线也可以产生隐性网格。</p>
<h3 class="heading" id="frfraction1-份可用空间">
fr(fraction)1 份可用空间<span class="heading__anchor"> <a href="#frfraction1-%e4%bb%bd%e5%8f%af%e7%94%a8%e7%a9%ba%e9%97%b4">#</a></span>
</h3><p><code>fr</code> 表示网格容器的 1 份可用空间。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 3 个竖排,比例为 1:2:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">2</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 3 个横排,第 1 横排为 30px,剩余横排比例为 1:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="minmax-最大最小值">
minmax() 最大最小值<span class="heading__anchor"> <a href="#minmax-%e6%9c%80%e5%a4%a7%e6%9c%80%e5%b0%8f%e5%80%bc">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/minmax">minmax() - CSS: Cascading Style Sheets | MDN</a></p>
<p><code>minmax()</code> 函数设置最小值和最大值。下面代码表示第 1 横排的尺寸最小 50px,最大 <code>auto</code>(根据内容自动扩大)。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="nf">minmax</span><span class="p">(</span><span class="mi">50</span><span class="kt">px</span><span class="p">,</span> <span class="kc">auto</span><span class="p">)</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="repeat-函数">
repeat() 函数<span class="heading__anchor"> <a href="#repeat-%e5%87%bd%e6%95%b0">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/repeat">repeat() - CSS: Cascading Style Sheets | MDN</a></p>
<p><code>repeat()</code> 函数用于表示重复的网格轨道片段。</p>
<p><a href="https://jsbin.com/kudapojoci/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="nf">repeat</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="n">fr</span><span class="p">);</span> <span class="c">/* 1fr 1fr 1fr */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><a href="https://jsbin.com/jovuxukibo/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="mi">2</span><span class="n">fr</span> <span class="nf">repeat</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="n">fr</span><span class="p">);</span> <span class="c">/* 2fr 1fr 1fr */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>除了使用固定的数字,还可用 <code>auto-fit</code> 和 <code>auto-fill</code>。</p>
<h2 class="heading" id="网格容器的属性">
网格容器的属性<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e5%ae%b9%e5%99%a8%e7%9a%84%e5%b1%9e%e6%80%a7">#</a></span>
</h2><p>网格容器可以使用以下属性。</p>
<ul>
<li>display</li>
<li>grid-template-columns</li>
<li>grid-template-rows</li>
<li>grid-template-areas</li>
<li>grid-template</li>
<li>grid-column-gap</li>
<li>grid-row-gap</li>
<li>grid-gap</li>
<li>justify-items</li>
<li>align-items</li>
<li>place-items</li>
<li>justify-content</li>
<li>align-content</li>
<li>place-content</li>
<li>grid-auto-columns</li>
<li>grid-auto-rows</li>
<li>grid-auto-flow</li>
<li>grid</li>
</ul>
<h3 class="heading" id="display-设置容器">
display 设置容器<span class="heading__anchor"> <a href="#display-%e8%ae%be%e7%bd%ae%e5%ae%b9%e5%99%a8">#</a></span>
</h3><p>对元素使用,使其变成网格容器。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span> <span class="o">|</span> <span class="kc">inline</span><span class="o">-</span><span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>值:</p>
<ul>
<li>grid:生成 block 级网格容器</li>
<li>inline-grid:生成 inline 级网格容器</li>
</ul>
<h3 class="heading" id="grid-template-columnsgrid-template-rows网格线名称与网格轨道">
grid-template-columns、grid-template-rows,网格线名称与网格轨道<span class="heading__anchor"> <a href="#grid-template-columnsgrid-template-rows%e7%bd%91%e6%a0%bc%e7%ba%bf%e5%90%8d%e7%a7%b0%e4%b8%8e%e7%bd%91%e6%a0%bc%e8%bd%a8%e9%81%93">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-template-columnsgrid-template-rows">CSS Grid Layout Guide | CSS-Tricks#aa-grid-template-columnsgrid-template-rows</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns">grid-template-columns - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows">grid-template-rows - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p>示例(<a href="https://jsbin.com/kihehuxiso/6/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item1"</span><span class="p">></span>1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item2"</span><span class="p">></span>2<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item3"</span><span class="p">></span>3<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item4"</span><span class="p">></span>4<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item5"</span><span class="p">></span>5<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item6"</span><span class="p">></span>6<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item7"</span><span class="p">></span>7<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item8"</span><span class="p">></span>8<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item9"</span><span class="p">></span>9<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">400</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 3 个竖排,比例为 1:2:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">2</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 3 个横排,第 1 横排为 30px,剩余横排比例为 1:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>现在网格项排列成这样:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">1 2 3
</span></span><span class="line"><span class="cl">4 5 6
</span></span><span class="line"><span class="cl">7 8 9
</span></span></code></pre></td></tr></table>
</div>
</div><p>可以用 <code>[]</code> 定义网格线名称,用空格分隔多个名称。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="p">[</span><span class="n">column1-start</span><span class="p">]</span> <span class="mi">1</span><span class="n">fr</span> <span class="p">[</span><span class="n">column2-start</span><span class="p">]</span> <span class="mi">2</span><span class="n">fr</span> <span class="p">[</span><span class="n">column3-start</span><span class="p">]</span> <span class="mi">1</span><span class="n">fr</span> <span class="p">[</span><span class="kc">column</span><span class="o">-</span><span class="kc">end</span> <span class="n">another-name</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>grid-column-start</code> 和 <code>grid-row-start</code> 可以改变网格项的位置,<a href="https://jsbin.com/kexizufuwi/4/edit?html,css,output">在线示例</a>。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="p">[</span><span class="n">column1-start</span><span class="p">]</span> <span class="mi">1</span><span class="n">fr</span> <span class="p">[</span><span class="n">column2-start</span><span class="p">]</span> <span class="mi">2</span><span class="n">fr</span> <span class="p">[</span><span class="n">column3-start</span><span class="p">]</span> <span class="mi">1</span><span class="n">fr</span> <span class="p">[</span><span class="kc">column</span><span class="o">-</span><span class="kc">end</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item9</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column-start</span><span class="p">:</span> <span class="n">column2-start</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row-start</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span> <span class="c">/* 第 2 条横线 */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>现在 <code>.item9</code> 占据了 <code>.item5</code> 的位置。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">1 2 3
</span></span><span class="line"><span class="cl">4 9 5
</span></span><span class="line"><span class="cl">6 7 8
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-template-areas-网格区域名称">
grid-template-areas 网格区域名称<span class="heading__anchor"> <a href="#grid-template-areas-%e7%bd%91%e6%a0%bc%e5%8c%ba%e5%9f%9f%e5%90%8d%e7%a7%b0">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-areas">grid-template-areas - CSS: Cascading Style Sheets | MDN</a></p>
<p><code>grid-template-areas</code> 以网格区域名称表示网格的结构。<code>grid-template-areas</code> 的优点是放置网格项时不需要用网格线(数网格线或者命名真的太痛苦了)。相同名称可以用多次,表示占用多个网格单元。英文句号 <code>.</code> 表示不使用此网格单元。<code>grid-area</code> 定义元素对应的网格区域名称。</p>
<p><code>grid-template-areas</code> 会自动使用 <code>-start</code> 和 <code>-end</code> 命名网格线。<code>header</code> 网格区域的起始网格线(横线与竖线)都是 <code>header-start</code>,终止网格线(横线与竖线)都是 <code>header-end</code>。同一条网格线可以有多个名称。</p>
<p>示例(<a href="https://jsbin.com/xegagaviru/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">header</span><span class="p">></span>header<span class="p"></</span><span class="nt">header</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">aside</span><span class="p">></span>sidebar<span class="p"></</span><span class="nt">aside</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">main</span><span class="p">></span>main<span class="p"></</span><span class="nt">main</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">footer</span><span class="p">></span>footer<span class="p"></</span><span class="nt">footer</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="nt">header</span><span class="o">,</span><span class="nt">aside</span><span class="o">,</span><span class="nt">main</span><span class="o">,</span><span class="nt">footer</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">green</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">400</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-areas</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"header header header header"</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"main main . aside"</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"footer footer footer footer"</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">50</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="kc">auto</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nt">header</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="n">header</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nt">aside</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="n">aside</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nt">main</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="n">main</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nt">footer</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="n">footer</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-templategrid-template-rowsgrid-template-columnsgrid-template-areas-的缩写">
grid-template(grid-template-rows、grid-template-columns、grid-template-areas 的缩写)<span class="heading__anchor"> <a href="#grid-templategrid-template-rowsgrid-template-columnsgrid-template-areas-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-template">CSS Grid Layout Guide | CSS-Tricks#aa-grid-template</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template">grid-template - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>grid-template</code> 是 <code>grid-template-rows</code>、<code>grid-template-columns</code>、<code>grid-template-areas</code> 的缩写。<code>grid-template</code> 不会重置隐性网格属性。</p>
<p>只设置 <code>grid-template-rows</code> 和 <code>grid-template-columns</code> 的用法是用 <code>/</code> 隔开两者。</p>
<p>示例(<a href="https://jsbin.com/goxaroyela/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 横排比例 1:1:1,竖排比例 1:3:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="o">/</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">3</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 等价于
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-template-rows: 1fr 1fr 1fr;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-template-columns: 1fr 3fr 1fr;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>同时设置 <code>grid-template-rows</code>、<code>grid-template-columns</code>、<code>grid-template-areas</code> 的用法:</p>
<ol>
<li>先写 <code>grid-template-areas</code></li>
<li>在每横排右边写上尺寸</li>
<li>在最后的横排加上 <code>/</code> 和竖排的尺寸(<code>/</code> 从下一行开始写也行)</li>
</ol>
<p>示例(<a href="https://jsbin.com/biwemurohi/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">400</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"header header header"</span> <span class="kc">auto</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"main main aside "</span> <span class="mi">1</span><span class="n">fr</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"footer footer footer"</span> <span class="kc">auto</span> <span class="o">/</span> <span class="kc">auto</span> <span class="kc">auto</span> <span class="mi">50</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 等价于
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-template-areas:
</span></span></span><span class="line"><span class="cl"><span class="c"> "header header header"
</span></span></span><span class="line"><span class="cl"><span class="c"> "main main aside"
</span></span></span><span class="line"><span class="cl"><span class="c"> "footer footer footer";
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-template-columns: auto auto 50px;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-template-rows: auto 1fr auto;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="row-gapcolumn-gapgap-间隔">
row-gap、column-gap、gap 间隔<span class="heading__anchor"> <a href="#row-gapcolumn-gapgap-%e9%97%b4%e9%9a%94">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-column-gaprow-gapgrid-column-gapgrid-row-gap">CSS Grid Layout Guide | CSS-Tricks#aa-column-gaprow-gapgrid-column-gapgrid-row-gap</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/gap">gap - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>row-gap</code> 表示横排之间的间隔,<code>column-gap</code> 表示竖排之间的间隔。<code>gap</code> 是前面两者的缩写,使用 1 个值表示横排间隔和竖排间隔一样,使用 2 个值分别表示横排间隔是竖排间隔。</p>
<p>示例:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">row-gap</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">column-gap</span><span class="p">:</span> <span class="mi">10</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">gap</span><span class="p">:</span> <span class="mi">10</span><span class="kt">px</span><span class="p">;</span> <span class="c">/* 竖排间隔和横排间隔都是 10px */</span>
</span></span><span class="line"><span class="cl"> <span class="k">gap</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span> <span class="mi">10</span><span class="kt">px</span><span class="p">;</span> <span class="c">/* 横排间隔 30px,竖排间隔 10px */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>以前这 3 个属性前面要加上 <code>grid-</code>,比如 <code>grid-row-gap</code>。带 <code>grid-</code> 前缀的属性已被弃用,浏览器为了保持兼容,仍然支持这些属性。</p>
<h3 class="heading" id="justify-items网格项的-inline-轴横轴对齐">
justify-items,网格项的 inline 轴(横轴)对齐<span class="heading__anchor"> <a href="#justify-items%e7%bd%91%e6%a0%bc%e9%a1%b9%e7%9a%84-inline-%e8%bd%b4%e6%a8%aa%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-justify-items">CSS Grid Layout Guide | CSS-Tricks#aa-justify-items</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items">justify-items - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>justify-items</code> 设置网格项 inline 轴(横轴)对齐方式,默认值为 <code>stretch</code>(占满网格单元宽度)。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">justify-items</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="align-items网格项的-block-轴竖轴对齐">
align-items,网格项的 block 轴(竖轴)对齐<span class="heading__anchor"> <a href="#align-items%e7%bd%91%e6%a0%bc%e9%a1%b9%e7%9a%84-block-%e8%bd%b4%e7%ab%96%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-align-items">CSS Grid Layout Guide | CSS-Tricks#aa-align-items</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/align-items">align-items - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>align-items</code> 设置网格项 block 轴(竖轴)的对齐方式,默认值为 <code>stretch</code>(占满网格单元高度)。<code>baseline</code> 表示按<a href="https://zh.wikipedia.org/zh-cn/%E5%9F%BA%E7%B7%9A">基线</a>对齐。内容有多行时,<code>first baseline</code> 表示按照首行的基线对齐,<code>last baseline</code> 表示按照尾行的基线对齐。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">align-items</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span> <span class="o">|</span> <span class="kc">baseline</span> <span class="o">|</span> <span class="kc">first</span> <span class="kc">baseline</span> <span class="o">|</span> <span class="kc">last</span> <span class="kc">baseline</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="place-itemsalign-itemsjustify-items-的缩写">
place-items(align-items、justify-items 的缩写)<span class="heading__anchor"> <a href="#place-itemsalign-itemsjustify-items-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-place-items">CSS Grid Layout Guide | CSS-Tricks#aa-place-items</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/place-items">place-items - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>place-items</code> 是 <code>align-items</code>、<code>justify-items</code> 的缩写。使用 1 个值同时设置 2 个属性,使用 2 个值分别设置两个属性。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">place-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span> <span class="c">/* 正中间 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">place-items</span><span class="p">:</span> <span class="kc">start</span> <span class="kc">end</span><span class="p">;</span> <span class="c">/* 右上角 */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="justify-content网格项整体-inline-轴横轴对齐">
justify-content,网格项整体 inline 轴(横轴)对齐<span class="heading__anchor"> <a href="#justify-content%e7%bd%91%e6%a0%bc%e9%a1%b9%e6%95%b4%e4%bd%93-inline-%e8%bd%b4%e6%a8%aa%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-justify-content">CSS Grid Layout Guide | CSS-Tricks#aa-justify-content</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content">justify-content - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p>如果网格项的总尺寸小于网格容器的尺寸,网格容器会有多于的空白,此时网格项被放置于左上角(使用<a href="https://developer.mozilla.org/en-US/docs/Glossary/LTR">从左向右的语言</a>)。<code>justify-content</code> 设置 inline 轴(横轴)的对齐方式。Flex 布局也有 <code>justify-content</code>,用法类似,参看 <a href="https://cyrusyip.org/zh-cn/posts/2024/09/06/css-flexbox-layout-guide/#justify-content-%E4%B8%BB%E8%BD%B4%E5%AF%B9%E9%BD%90">CSS Flexbox 布局教程#justify-content-主轴对齐</a>(发布前看看这个链接对不对)。</p>
<p><a href="https://jsbin.com/qideyedofa/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">justify-content</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span> <span class="o">|</span> <span class="kc">space-around</span> <span class="o">|</span> <span class="kc">space-between</span> <span class="o">|</span> <span class="kc">space</span><span class="o">-</span><span class="n">evenly</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="align-content网格项整体的-block-轴竖轴对齐">
align-content,网格项整体的 block 轴(竖轴)对齐<span class="heading__anchor"> <a href="#align-content%e7%bd%91%e6%a0%bc%e9%a1%b9%e6%95%b4%e4%bd%93%e7%9a%84-block-%e8%bd%b4%e7%ab%96%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-align-content">CSS Grid Layout Guide | CSS-Tricks#aa-align-content</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/align-content">align-content - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p>如果网格项的总尺寸小于网格容器的尺寸,网格容器会有多于的空白,此时网格项被放置于左上角(使用<a href="https://developer.mozilla.org/en-US/docs/Glossary/LTR">从左向右的语言</a>)。<code>align-content</code> 设置 block 轴(竖轴)的对齐方式。Flex 布局也有 <code>align-content</code>,用法类似。</p>
<p><a href="https://jsbin.com/qecuwusabi/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">align-content</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span> <span class="o">|</span> <span class="kc">space-around</span> <span class="o">|</span> <span class="kc">space-between</span> <span class="o">|</span> <span class="kc">space</span><span class="o">-</span><span class="n">evenly</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="place-contentalign-contentjustify-content-的缩写">
place-content(align-content、justify-content 的缩写)<span class="heading__anchor"> <a href="#place-contentalign-contentjustify-content-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/place-content">place-content - CSS: Cascading Style Sheets | MDN</a></p>
<p><code>place-content</code> 是 <code>align-content</code> 和 <code>justify-content</code> 的缩写。用 1 个值同时设置两者,用 2 个值分别设置两者。</p>
<p>示例(<a href="https://jsbin.com/numarihela/1/edit?html,css,output">在线示例</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">place-content</span><span class="p">:</span> <span class="kc">start</span> <span class="kc">end</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/*
</span></span></span><span class="line"><span class="cl"><span class="c"> align-content: start;
</span></span></span><span class="line"><span class="cl"><span class="c"> justify-content: end;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">place-content</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/*
</span></span></span><span class="line"><span class="cl"><span class="c"> align-content: center;
</span></span></span><span class="line"><span class="cl"><span class="c"> justify-content: center;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-auto-columnsgrid-auto-rows-隐性网格轨道大小">
grid-auto-columns、grid-auto-rows 隐性网格轨道大小<span class="heading__anchor"> <a href="#grid-auto-columnsgrid-auto-rows-%e9%9a%90%e6%80%a7%e7%bd%91%e6%a0%bc%e8%bd%a8%e9%81%93%e5%a4%a7%e5%b0%8f">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-auto-columnsgrid-auto-rows">CSS Grid Layout Guide | CSS-Tricks#aa-grid-auto-columnsgrid-auto-rows</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-columns">grid-auto-columns - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-rows">grid-auto-rows - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p>如果网格项数量多于已定义的网格项数量,那么多出了网格项就位于隐性网格轨道。<code>grid-auto-columns</code> 设置竖向隐性网格轨道大小,<code>grid-auto-rows</code> 设置横向隐性网格轨道大小,两者默认值都是 <code>auto</code>。</p>
<p><a href="https://jsbin.com/sivaqodiyo/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-auto-rows</span><span class="p">:</span> <span class="mi">100</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-auto-flow-自动放置算法">
grid-auto-flow 自动放置算法<span class="heading__anchor"> <a href="#grid-auto-flow-%e8%87%aa%e5%8a%a8%e6%94%be%e7%bd%ae%e7%ae%97%e6%b3%95">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-auto-flow">CSS Grid Layout Guide | CSS-Tricks#aa-grid-auto-flow</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow">grid-auto-flow - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-auto-flow</span><span class="p">:</span> <span class="kc">row</span> <span class="o">|</span> <span class="kc">column</span> <span class="o">|</span> <span class="kc">row</span> <span class="n">dense</span> <span class="o">|</span> <span class="kc">column</span> <span class="n">dense</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>grid-auto-flow</code> 设置网格项的放置算法。</p>
<p><code>row</code>(默认值):横向放置网格项,必要时添加新的横排。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="nt">1</span> <span class="nt">2</span> <span class="nt">3</span>
</span></span><span class="line"><span class="cl"><span class="nt">4</span> <span class="nt">5</span> <span class="nt">6</span>
</span></span><span class="line"><span class="cl"><span class="nt">7</span> <span class="nt">8</span> <span class="nt">9</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>column</code>:竖向放置网格项,必要时添加新的竖排,<a href="https://jsbin.com/gevalocuna/1/edit?html,css,output">在线示例</a>。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">1 4 7
</span></span><span class="line"><span class="cl">2 5 8
</span></span><span class="line"><span class="cl">3 6 9
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>dense</code> 关键词表示后面的元素可以移动到前面的空位,示例(<a href="https://jsbin.com/tixesiyema/4/edit?html,css,output">在线示例</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item1"</span><span class="p">></span>1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item2"</span><span class="p">></span>2<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item3"</span><span class="p">></span>3<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item4"</span><span class="p">></span>4<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item5"</span><span class="p">></span>5<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item6"</span><span class="p">></span>6<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">green</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">200</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">width</span><span class="p">:</span> <span class="mi">200</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-auto-flow</span><span class="p">:</span> <span class="kc">row</span> <span class="n">dense</span><span class="p">;</span> <span class="c">/* .item3 提前放置于 .item1 右边 */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item1</span><span class="o">,</span> <span class="p">.</span><span class="nc">item2</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column</span><span class="p">:</span> <span class="n">span</span> <span class="mi">2</span><span class="p">;</span> <span class="c">/* 2fr */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-grid-template-rowsgrid-template-columnsgrid-template-areasgrid-auto-rowsgrid-auto-columnsgrid-auto-flow-的缩写">
grid( grid-template-rows、grid-template-columns、grid-template-areas、grid-auto-rows、grid-auto-columns、grid-auto-flow 的缩写)<span class="heading__anchor"> <a href="#grid-grid-template-rowsgrid-template-columnsgrid-template-areasgrid-auto-rowsgrid-auto-columnsgrid-auto-flow-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid">CSS Grid Layout Guide | CSS-Tricks#aa-grid</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid">grid - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>grid</code> 是 <code>grid-template-rows</code>、<code>grid-template-columns</code>、<code>grid-template-areas</code>、<code>grid-auto-rows</code>、<code>grid-auto-columns</code>、<code>grid-auto-flow</code> 的缩写。</p>
<p>创建显性网格时用法与 <code>grid-template</code> 一样。</p>
<p>创建隐性网格时有 2 种用法(左边设置横排,右边设置竖排,中间以 <code>/</code> 分隔):</p>
<ol>
<li>显性横排,隐性竖排,<code>grid-auto-flow</code> 为 <code>column</code>:<code><grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>?</code></li>
<li>隐性横排,显性竖排,<code>grid-auto-flow</code> 为 <code>row</code>:<code>[ auto-flow && dense? ] <grid-auto-rows>? / <grid-template-columns></code></li>
</ol>
<p>显性横排隐性竖排示例(<a href="https://jsbin.com/cizeyuquju/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 横排比例 1:2:1,按照竖排方向放置网格项,竖排尺寸 50px */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">2</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="o">/</span> <span class="kc">auto</span><span class="o">-</span><span class="k">flow</span> <span class="mi">50</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>隐性横排显性竖排示例(<a href="https://jsbin.com/kudedigoki/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 隐性横排,按照横排方向放置网格项,竖排比例 1:2:1 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid</span><span class="p">:</span> <span class="kc">auto</span><span class="o">-</span><span class="k">flow</span> <span class="o">/</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">2</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 class="heading" id="网格项的属性">
网格项的属性<span class="heading__anchor"> <a href="#%e7%bd%91%e6%a0%bc%e9%a1%b9%e7%9a%84%e5%b1%9e%e6%80%a7">#</a></span>
</h2><p>网格项可以使用以下属性:</p>
<ul>
<li>grid-column-start</li>
<li>grid-column-end</li>
<li>grid-row-start</li>
<li>grid-row-end</li>
<li>grid-column</li>
<li>grid-row</li>
<li>grid-area</li>
<li>justify-self</li>
<li>align-self</li>
<li>place-self</li>
<li>subgrid</li>
<li>order</li>
</ul>
<h3 class="heading" id="grid-column-startgrid-column-endgrid-row-startgrid-row-end-网格项位置">
grid-column-start、grid-column-end、grid-row-start、grid-row-end 网格项位置<span class="heading__anchor"> <a href="#grid-column-startgrid-column-endgrid-row-startgrid-row-end-%e7%bd%91%e6%a0%bc%e9%a1%b9%e4%bd%8d%e7%bd%ae">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-column-startgrid-column-endgrid-row-startgrid-row-end">CSS Grid Layout Guide | CSS-Tricks#aa-grid-column-startgrid-column-endgrid-row-startgrid-row-end</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column-start">grid-column-start - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column-end">grid-column-end - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-row-start">grid-row-start - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-row-end">grid-row-end - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p>这几个属性通过网格线的起点与终点规定 1 个网格项的位置,默认值为 <code>auto</code>(自动放置)。<code>span 数字</code> 表示占用多少个网格轨道,不加数字时为 1。</p>
<p>示例(<a href="https://jsbin.com/deluduhupo/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item1"</span><span class="p">></span>1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item2"</span><span class="p">></span>2<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item3"</span><span class="p">></span>3<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item4"</span><span class="p">></span>4<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item5"</span><span class="p">></span>5<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item-x"</span><span class="p">></span>x<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">400</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="o">/</span> <span class="mi">1</span><span class="n">fr</span> <span class="p">[</span><span class="n">col2-start</span><span class="p">]</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">green</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item-x</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 从 col2-start 竖网格线到倒数第 1 条竖网格线 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column-start</span><span class="p">:</span> <span class="n">col2-start</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column-end</span><span class="p">:</span> <span class="mi">-1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 从第 2 条横网格线开始,占用 2 个横向网格轨道 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row-start</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row-end</span><span class="p">:</span> <span class="n">span</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-columngrid-column-startgrid-column-end-的缩写grid-rowgrid-row-startgrid-row-end-的缩写">
grid-column(grid-column-start、grid-column-end 的缩写)、grid-row(grid-row-start、grid-row-end 的缩写)<span class="heading__anchor"> <a href="#grid-columngrid-column-startgrid-column-end-%e7%9a%84%e7%bc%a9%e5%86%99grid-rowgrid-row-startgrid-row-end-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-grid-columngrid-row">CSS Grid Layout Guide | CSS-Tricks#aa-grid-columngrid-row</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column">grid-column - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/grid-row">grid-row - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>grid-column</code> 是 <code>grid-column-start / grid-column-end</code> 的缩写,使用 1 个值时只设置 <code>grid-column-start</code>。</p>
<p><code>grid-row</code> 是 <code>grid-row-start / grid-row-end</code> 的缩写,使用 1 个值时值设置 <code>grid-row-start</code>。</p>
<p>示例(<a href="https://jsbin.com/lokebuyibo/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item-x</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column</span><span class="p">:</span> <span class="n">col2-start</span> <span class="o">/</span> <span class="mi">-1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row</span><span class="p">:</span> <span class="mi">2</span> <span class="o">/</span> <span class="n">span</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/*
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-column-start: col2-start;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-column-end: -1;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-row-start: 2;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-row-end: span 2;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="grid-areagrid-row-startgrid-column-startgrid-row-endgrid-column-end-的缩写">
grid-area(grid-row-start、grid-column-start、grid-row-end、grid-column-end 的缩写)<span class="heading__anchor"> <a href="#grid-areagrid-row-startgrid-column-startgrid-row-endgrid-column-end-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p><code>grid-area</code> 有两个用法。一是 <code>grid-row-start / grid-column-start / grid-row-end / grid-column-end</code> 的缩写(吐槽:这个顺序不好读,<code>-start</code> 后面应该跟 <code>-end</code>);二是搭配 <code>grid-template-area</code>,使用名称指定位置。</p>
<p>示例(<a href="https://jsbin.com/mekakujome/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item-x</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="mi">2</span> <span class="o">/</span> <span class="n">col2-start</span> <span class="o">/</span> <span class="n">span</span> <span class="mi">2</span> <span class="o">/</span> <span class="mi">-1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c">/*
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-column: col2-start / -1;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-row: 2 / span 2;
</span></span></span><span class="line"><span class="cl"><span class="c">
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-column-start: col2-start;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-column-end: -1;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-row-start: 2;
</span></span></span><span class="line"><span class="cl"><span class="c"> grid-row-end: span 2;
</span></span></span><span class="line"><span class="cl"><span class="c"> */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="justify-selfinline-轴横轴对齐">
justify-self,inline 轴(横轴)对齐<span class="heading__anchor"> <a href="#justify-selfinline-%e8%bd%b4%e6%a8%aa%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p><code>justify-self</code> 设置 1 个网格项的 inline 轴(横轴)对齐方式,默认值是 <code>stretch</code>。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">justify-self</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><a href="https://jsbin.com/fuwimofede/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item4</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">justify-self</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="align-selfblock-轴竖轴对齐">
align-self,block 轴(竖轴)对齐<span class="heading__anchor"> <a href="#align-selfblock-%e8%bd%b4%e7%ab%96%e8%bd%b4%e5%af%b9%e9%bd%90">#</a></span>
</h3><p><code>align-self</code> 设置 1 个网格项的 block 轴(竖轴)对齐方式,默认是 <code>stretch</code>。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">align-self</span><span class="p">:</span> <span class="kc">start</span> <span class="o">|</span> <span class="kc">end</span> <span class="o">|</span> <span class="kc">center</span> <span class="o">|</span> <span class="kc">stretch</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><a href="https://jsbin.com/dapecabuja/1/edit?html,css,output">在线示例</a></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item4</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">align-self</span><span class="p">:</span> <span class="kc">end</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="place-selfalign-selfjustify-self-的缩写">
place-self(align-self、justify-self 的缩写)<span class="heading__anchor"> <a href="#place-selfalign-selfjustify-self-%e7%9a%84%e7%bc%a9%e5%86%99">#</a></span>
</h3><p>参考资料:</p>
<ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/#aa-place-self">CSS Grid Layout Guide | CSS-Tricks#aa-place-self</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/place-self">place-self - CSS: Cascading Style Sheets | MDN</a></li>
</ul>
<p><code>place-self</code> 是 <code>align-self justify-self</code> 的缩写,只使用 1 个值时同时设置两者。</p>
<p>示例:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item4</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">place-self</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span> <span class="c">/* 正中间 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">place-self</span><span class="p">:</span> <span class="kc">end</span> <span class="kc">start</span><span class="p">;</span> <span class="c">/* 左下角 */</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="subgrid-继承网格容器属性">
subgrid 继承网格容器属性<span class="heading__anchor"> <a href="#subgrid-%e7%bb%a7%e6%89%bf%e7%bd%91%e6%a0%bc%e5%ae%b9%e5%99%a8%e5%b1%9e%e6%80%a7">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Subgrid">Subgrid - CSS: Cascading Style Sheets | MDN</a></p>
<p>虽然 <code>subgrid</code> 不是属性,但用于网格项,所以列举于此。</p>
<p>示例(<a href="https://jsbin.com/keqogeweki/1/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"container"</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item1"</span><span class="p">></span>Item1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item2"</span><span class="p">></span>Item2<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item3"</span><span class="p">></span>Item3<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item4"</span><span class="p">></span>Item4<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item5"</span><span class="p">></span>Item5<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item item6"</span><span class="p">></span>Item6, 4×4
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item6-1"</span><span class="p">></span>Item6.1, 1×1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">"item6-2"</span><span class="p">></span>Item6.2, 1×1<span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"> <span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span><span class="line"><span class="cl"><span class="p"></</span><span class="nt">div</span><span class="p">></span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">red</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">height</span><span class="p">:</span> <span class="mi">400</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template</span><span class="p">:</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="o">/</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span> <span class="mi">1</span><span class="n">fr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">gap</span><span class="p">:</span> <span class="mi">10</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">green</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item6</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">yellow</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-area</span><span class="p">:</span> <span class="mi">2</span> <span class="o">/</span> <span class="mi">2</span> <span class="o">/</span> <span class="n">span</span> <span class="mi">2</span> <span class="o">/</span> <span class="n">span</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/*
</span></span></span><span class="line"><span class="cl"><span class="c"> 用 subgrid 才能继承容器的 gap 属性,
</span></span></span><span class="line"><span class="cl"><span class="c"> 可以删掉下面两行代码看看差异 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-columns</span><span class="p">:</span> <span class="n">subgrid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-template-rows</span><span class="p">:</span> <span class="n">subgrid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item6-1</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">blue</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="c">/* 使用 .item6 的网格线编号,不要用 .container 的网格线编号 */</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column-start</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row-start</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item6-2</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="kc">blue</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-column-start</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"> <span class="k">grid-row-start</span><span class="p">:</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 class="heading" id="order-顺序">
order 顺序<span class="heading__anchor"> <a href="#order-%e9%a1%ba%e5%ba%8f">#</a></span>
</h3><p>参考资料:<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/order">order - CSS: Cascading Style Sheets | MDN</a></p>
<p>网格项默认按照源代码顺序出现。<code>order</code> 设置网格项的出现顺序,默认值为 <code>0</code>,可使用正数和负数。</p>
<p>示例(<a href="https://jsbin.com/kihehuxiso/6/edit?html,css,output">在线版</a>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item1</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">order</span><span class="p">:</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">item9</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">order</span><span class="p">:</span> <span class="mi">-1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 class="heading" id="待写内容">
待写内容<span class="heading__anchor"> <a href="#%e5%be%85%e5%86%99%e5%86%85%e5%ae%b9">#</a></span>
</h2><!-- 还没搞懂的知识 -->
<ul>
<li>auto-fill/auto-fit(<a href="https://css-tricks.com/auto-sizing-columns-css-grid-auto-fill-vs-auto-fit/">Auto-Sizing Columns In CSS Grid: <code>auto-fill</code> Vs <code>auto-fit</code> | CSS-Tricks</a>)</li>
<li>min-content/max-content(<a href="https://developer.mozilla.org/en-US/docs/Glossary/Intrinsic_Size">Intrinsic size - MDN Web Docs Glossary: Definitions of Web-related terms | MDN</a>)</li>
<li>masonry(<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Masonry_layout">Masonry layout - CSS: Cascading Style Sheets | MDN</a>)</li>
</ul>
<h2 class="heading" id="参考资料">
参考资料<span class="heading__anchor"> <a href="#%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99">#</a></span>
</h2><ul>
<li><a href="https://css-tricks.com/snippets/css/complete-guide-grid/">CSS Grid Layout Guide | CSS-Tricks</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Grids">Grids - Learn web development | MDN</a></li>
<li><a href="https://www.joshwcomeau.com/css/interactive-guide-to-grid/">An Interactive Guide to CSS Grid • Josh W. Comeau</a></li>
<li><a href="https://www.w3.org/TR/css-grid-1/">CSS Grid Layout Module Level 1</a></li>
<li><a href="https://www.w3.org/TR/css-grid-2/">CSS Grid Layout Module Level 2</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Subgrid">Subgrid - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Basic_concepts_of_grid_layout">Basic concepts of grid layout - CSS: Cascading Style Sheets | MDN</a></li>
<li><a href="https://css-tricks.com/auto-sizing-columns-css-grid-auto-fill-vs-auto-fit/">Auto-Sizing Columns In CSS Grid: <code>auto-fill</code> Vs <code>auto-fit</code> | CSS-Tricks</a></li>
</ul>
<h2 class="heading" id="图片出处">
图片出处<span class="heading__anchor"> <a href="#%e5%9b%be%e7%89%87%e5%87%ba%e5%a4%84">#</a></span>
</h2><p>本文使用的图片出自 <a href="https://www.w3.org/TR/css-grid-1/#grid-concepts">CSS Grid Layout Module Level 1#grid-concepts</a>。</p>
<h2 class="heading" id="练习">
练习<span class="heading__anchor"> <a href="#%e7%bb%83%e4%b9%a0">#</a></span>
</h2><ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Grid_skills">Test your skills: Grid - Learn web development | MDN</a></li>
<li><a href="https://cssgridgarden.com/">Grid Garden - A game for learning CSS grid</a></li>
</ul>