<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ huqi - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ huqi - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 03 Jun 2026 21:24:09 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/author/hu-qi/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ CSS Flexbox 手册——附带实用示例的完整指南 ]]>
                </title>
                <description>
                    <![CDATA[ Flexbox 是一个有用的工具，用于为网页创建美观且响应式的布局。在本指南中，你将学习像专业人士一样开始使用 CSS Flexbox 所需的一切知识。我们还将学习大量练习示例。 如果你是初学者 web 开发人员，本指南对你来说是一份完美的资源。如果你是经验丰富的开发人员，想要提高响应式网页设计技能，它也会很有用。 目录  * 什么是 Flexbox  * 使用 Flexbox 有什么好处  * 主轴和交叉轴  * Flex 容器和 Flex 项  * 了解 Flex 和 Inline-flex  * display: flex  * display: inline-flex  * Flex 容器属性  * flex-direction 属性  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/the-css-flexbox-handbook/</link>
                <guid isPermaLink="false">6604e2b96f02f80413b53aa1</guid>
                
                    <category>
                        <![CDATA[ Flexbox ]]>
                    </category>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ huqi ]]>
                </dc:creator>
                <pubDate>Thu, 28 Mar 2024 04:53:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2024/03/The-CSS-Flexbox-Handbook-Cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/the-css-flexbox-handbook/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The CSS Flexbox Handbook – Complete Guide with Practical Examples</a>
      </p><!--kg-card-begin: markdown--><p>Flexbox 是一个有用的工具，用于为网页创建美观且响应式的布局。在本指南中，你将学习像专业人士一样开始使用 CSS Flexbox 所需的一切知识。我们还将学习大量练习示例。</p>
<p>如果你是初学者 web 开发人员，本指南对你来说是一份完美的资源。如果你是经验丰富的开发人员，想要提高响应式网页设计技能，它也会很有用。</p>
<h2 id="">目录</h2>
<ul>
<li><a href="#what-is-flexbox">什么是 Flexbox</a></li>
<li><a href="#what-are-the-benefits-of-using-flexbox">使用 Flexbox 有什么好处</a></li>
<li><a href="#the-main-axis-and-the-cross-axis">主轴和交叉轴</a></li>
<li><a href="#flex-containers-and-flex-items">Flex 容器和 Flex 项</a></li>
<li><a href="#understanding-flex-and-inline-flex">了解 <code>Flex</code> 和 <code>Inline-flex</code></a></li>
<li><a href="#display-flex">display: flex</a></li>
<li><a href="#display-inline-flex">display: inline-flex</a></li>
<li><a href="#the-flex-container-properties">Flex 容器属性</a></li>
<li><a href="#the-flex-direction-property"><code>flex-direction</code> 属性</a></li>
<li><a href="#the-flex-wrap-property"><code>flex-wrap</code> 属性</a></li>
<li><a href="#the-flex-flow-shorthand-property"><code>flex-flow</code> 缩写属性</a></li>
<li><a href="#the-justify-content-property"><code>justify-content</code> 属性</a></li>
<li><a href="#the-align-items-property">T<code>align-items</code> 属性</a></li>
<li><a href="#the-align-content-property"><code>align-content</code> 属性</a></li>
<li><a href="#the-place-content-property"><code>place-content</code> 属性</a></li>
<li><a href="#the-flex-items-properties">Flex 项属性</a></li>
<li><a href="#the-order-property"><code>order</code> 属性</a></li>
<li><a href="#the-align-self-property"><code>align-self</code> 属性</a></li>
<li><a href="#the-flex-grow-property"><code>flex-grow</code> 属性</a></li>
<li><a href="#the-flex-shrink-property"><code>flex-shrink</code> 属性</a></li>
<li><a href="#the-flex-basis-property"><code>flex-basis</code> 属性</a></li>
<li><a href="#the-flex-shorthand-property"><code>flex</code> 缩写属性</a></li>
<li><a href="#flexbox-gaps">Flexbox 间隙</a></li>
<li><a href="#how-to-center-an-element-with-flexbox">如何使用 Flexbox 将元素居中</a></li>
<li><a href="#practice-with-flexbox-games">通过 Flexbox 游戏练习</a></li>
<li><a href="#are-there-bugs-in-css-flexbox">CSS Flexbox 中有 Bug 吗</a></li>
<li><a href="#conclusion">总结</a></li>
</ul>
<h2 id="what-is-flexbox">什么是 Flexbox</h2>
<p>Flexbox 是“Flexible Box Layout”的缩写。它是一个 CSS 布局模型，可以简化复杂布局的创建。它提供了一种灵活的方式来对齐元素并在容器元素内分配空间。</p>
<p>Flexbox 布局模型是双向的。这意味着你可以按行、列或两者排列元素。稍后会详细介绍。</p>
<h3 id="what-are-the-benefits-of-using-flexbox">使用 Flexbox 有什么好处</h3>
<p>在 Flexbox 出现之前，创建复杂的布局和响应式网页非常艰难。你需要 CSS 浮动和位置属性的组合。这需要许多变通方法和技巧。</p>
<p>但使用 Flexbox，你现在可以面对更少的困难，使用更少的代码行数来实现以下操作：</p>
<ul>
<li>使用<code>justify-content</code> 和 <code>align-items</code> 等属性对齐和居中元素。</li>
<li>无需编写大量媒体查询即可开发响应式布局。</li>
<li>在不改变 HTML 结构的情况下重新排序元素。</li>
<li>创建相同高度的列，无需任何额外的 HTML 元素或背景图片。</li>
</ul>
<p>现在，你了解了 Flexbox 是什么，以及可以使用它做的一些事情。让我们看看你如何使用它。</p>
<h3 id="the-main-axis-and-the-cross-axis">主轴和交叉轴</h3>
<p>关于 Flexbox，你首先需要了解的是轴的概念。每个 Flex 容器（ <code>display</code> 属性设置为 <code>flex</code> 或 <code>inline-flex</code> 的元素）都有一个主轴和一个交叉轴。</p>
<p>主轴是水平的还是垂直的，具体取决于 <code>flex-direction</code> 的值。如果你不熟悉 <code>flex-direction</code> , 不用担心。你即将学会它。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/44.-main---cross-axis.png" alt="The main axis and the cross axis when the " width="600" height="400" loading="lazy"></p>
<p><em><code>flex-direction</code> 为 <code>row</code> 时的交叉轴和主轴</em></p>
<p>在这个示例中，主轴是水平的，交叉轴是垂直的。</p>
<p>以下是主轴垂直且交叉轴水平的示例。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/45.-cross---main-axis.png" alt="45.-cross---main-axis" width="600" height="400" loading="lazy"></p>
<p><em><code>flex-direction</code> 为 <code>column</code> 时的主轴和交叉轴</em></p>
<h2 id="flex-containers-and-flex-items">Flex 容器和 Flex 项</h2>
<p>要使用 Flexbox 的所有属性，你需要将元素的 <code>display</code> 属性设置为 <code>flex</code> 或 <code>inline-flex</code>。</p>
<p>这会将元素变成 flex 容器，并且该元素的子元素变成 flex 项。</p>
<p>举个例子:</p>
<pre><code class="language-HTML">&lt;section class="container"&gt;  
	&lt;div&gt;Flex Item 1&lt;/div&gt;  
    &lt;div&gt;Flex Item 2&lt;/div&gt;  
    &lt;div&gt;    
    	&lt;p&gt;This paragraph is not a flex item&lt;/p&gt;  
    &lt;/div&gt;
&lt;/section&gt;
</code></pre>
<pre><code class="language-CSS">.container {  
  display: flex;
}
</code></pre>
<p><code>.container</code> 元素现在是一个 Flex 容器。这三个 <code>div</code> 元素是 <code>.container</code> 元素的直接子元素，这使得它们成为 Flex 项。</p>
<p>但第三个 div 内的段落元素不是 Flex 项。这是因为它不是 <code>.container</code> 元素的直接子元素。</p>
<h2 id="understanding-flex-and-inline-flex">了解 <code>Flex</code> 和 <code>Inline-flex</code></h2>
<p>你可以使用 <code>flex</code> 和 <code>inline-flex</code> 使元素成为 Flex 容器。不同之处在于它们与周围元素的交互方式。</p>
<h3 id="display-flex"><code>display: flex</code></h3>
<p>这使得 Flex 容器的行为类似块级元素。Flex 容器占据其父元素的整个可用宽度。它会在新的一行开始，并且其后的元素也会在新的一行开始。</p>
<p>例如:</p>
<pre><code class="language-HTML">&lt;button&gt;Button One&lt;/button&gt;

/* Flex Container */
&lt;section class="container"&gt;  
	&lt;div id="red"&gt;&lt;/div&gt;  
	&lt;div id="gold"&gt;&lt;/div&gt;  
	&lt;div id="green"&gt;&lt;/div&gt;
&lt;/section&gt;

&lt;button&gt;Button Two&lt;/button&gt;
</code></pre>
<pre><code class="language-CSS">.container {
	display: flex;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/46.-display-flex.png" alt="46.-display-flex" width="600" height="400" loading="lazy"></p>
<p><em>当你使用 <code>display: flex</code> 时，Flex 容器的行为类似于块元素`</em></p>
<p><code>.container</code> 元素占据了主体（其父元素）的整个可用宽度。</p>
<h3 id="display-inline-flex"><code>display: inline-flex</code></h3>
<p>这使得 Flex 容器的行为就像一个内联元素。这允许其他内联元素（如按钮）与其并排。使用前面的示例，这就是当你将 <code>display</code> 从 <code>flex</code> 更改为 <code>inline-flex</code> 时元素的排列方式。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/47.-display-inline-flex.png" alt="47.-display-inline-flex" width="600" height="400" loading="lazy"></p>
<p><em>当你使用 <code>display: inline-flex</code> 时，Flex 容器的行为类似于 <code>inline-elements</code>。</em></p>
<p>Flex 容器不占据其父容器的整个宽度。它仅使用其内容所需的水平空间。</p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-ug2zkz?file=style.css"><strong>练习使用 flex 和 inline-flex</strong></a></p>
<h2 id="the-flex-container-properties">Flex 容器属性</h2>
<p>Flex 容器属性允许你控制 Flex 容器内 Flex 项的布局和对齐方式。</p>
<p><strong>注意:</strong> 你可以将这些属性应用于 Flex 容器，而不是 Flex 项。</p>
<p>以下是 Flex 容器属性:</p>
<ul>
<li><code>flex-direction</code></li>
<li><code>flex-wrap</code></li>
<li><code>flex-flow</code></li>
<li><code>justify-content</code></li>
<li><code>align-items</code></li>
<li><code>align-content</code></li>
<li><code>place-content</code></li>
</ul>
<h3 id="the-flex-direction-property"><code>flex-direction</code> 属性</h3>
<p><code>flex-direction</code> 属性定义了 Flex 项的显示方向。它设置了 Flex 容器的主轴。该属性可以采用以下四个值中的任意一个：</p>
<ul>
<li><code>row</code> (默认值)</li>
<li><code>column</code></li>
<li><code>row-reverse</code></li>
<li><code>column-reverse</code></li>
</ul>
<p>现在，让我们看一些示例，看看它是如何工作的。</p>
<p>在下面的代码片段中，我们有一个名为 <code>names-container</code> 的容器，其中包含四个名字：</p>
<pre><code class="language-HTML">&lt;div class="names-container"&gt;  
	&lt;p id="jill"&gt;1. JILL&lt;/p&gt;  
	&lt;p id="john"&gt;2. JOHN&lt;/p&gt;  
	&lt;p id="jane"&gt;3. JANE&lt;/p&gt;  
	&lt;p id="jack"&gt;4. JACK&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>让我们看看使用 <code>flex-direction</code> 属性来排列这些名字的不同方式。</p>
<h4 id="flexdirectionrow"><code>flex-direction: row</code></h4>
<p>这会从左到右水平显示 Flex 项。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
    flex-direction: row;  
    /* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/1.-flex-direction-row.png" alt="1.-flex-direction-row" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-direction: row</code></em></p>
<h4 id="flexdirectioncolumn"><code>flex-direction: column</code></h4>
<p>这会从上到下垂直显示 Flex 项。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/2.-flex-direction-column.png" alt="2.-flex-direction-column" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-direction: column</code></em></p>
<h4 id="flexdirectionrowreverse"><code>flex-direction: row-reverse</code></h4>
<p>这与 row 值相反。它从右到左显示 Flex 项。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/3.-flex-direction-row-reverse.png" alt="3.-flex-direction-row-reverse" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-direction: row-reverse</code></em></p>
<h4 id="flexdirectioncolumnreverse"><code>flex-direction: column-reverse</code></h4>
<p>这与 column 值相反。它从下到上显示 Flex 项。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/4.-flex-direction-column-reverse.png" alt="4.-flex-direction-column-reverse" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-direction: column-reverse</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-aaerav?file=style.css"><strong>练习使用 flex-direction</strong></a></p>
<h4 id="">关于反向值和无障碍的注意事项</h4>
<p>当你使用 <code>row-reverse</code> 和 <code>column-reverse</code> 时，有些事情你需要记住。正如你已经看到的，这两个值会影响屏幕上元素的视觉顺序。</p>
<p>但是这些元素在 HTML 中的顺序保持不变，而这些元素在 HTML 中的顺序就是屏幕阅读器和键盘导航控件使用的顺序。</p>
<p>在示例中，当你使用 <code>row-reverse</code> 时，你首先在屏幕上看到 Jack 的名字，然后是 Jane、John 和 Jill。</p>
<p>但是对于使用屏幕阅读器的人来说，他们将会按照 HTML 中的出现顺序而不是屏幕上的顺序来听到这些名字。在这种情况下，他们将首先听到 Jill 的名字，然后是 John、Jane 和 Jack。</p>
<h3 id="the-flex-wrap-property"><code>flex-wrap</code> 属性</h3>
<p>有时，Flex 容器内的空间不足以容纳 Flex 项。</p>
<p>在这种情况下，你可以使用 <code>flex-wrap</code> 属性来选择是让 Flex 项溢出还是另起一行。</p>
<p><code>flex-wrap</code> 属性接受以下任何值：</p>
<ul>
<li><code>nowrap</code> (默认值)</li>
<li><code>wrap</code></li>
<li><code>wrap-reverse</code></li>
</ul>
<p>要看到 <code>flex-wrap</code> 的效果，让我们向 <code>names-container</code> 添加超过四个的名字：</p>
<pre><code class="language-HTML">&lt;div class="names-container"&gt;  
	&lt;p id="jill"&gt;1. JILL&lt;/p&gt;  
	&lt;p id="john"&gt;2. JOHN&lt;/p&gt;  
	&lt;p id="jane"&gt;3. JANE&lt;/p&gt;  
	&lt;p id="jack"&gt;4. JACK&lt;/p&gt;  
	&lt;p id="sara"&gt;5. SARA&lt;/p&gt;  
	&lt;p id="seth"&gt;6. SETH&lt;/p&gt;  
	&lt;p id="seal"&gt;7. SEAL&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<h4 id="flexwrapnowrap"><code>flex-wrap: nowrap</code></h4>
<p>这会使所有的 Flex 项都保持在单行中，无论是在行还是列中。如果在 Flex 容器中没有足够的空间，它允许 Flex 项溢出。请看下面的示例：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-direction: row;  
	flex-wrap: nowrap;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/5.-flex-wrap-nowrap.png" alt="5.-flex-wrap-nowrap" width="600" height="400" loading="lazy"></p>
<p><em>因为 <code>flex-wrap</code> 被设置为 <code>nowrap</code>，所以 Flex 项溢出</em></p>
<p>在这个例子中，由于空间不足，三个名字溢出容器。</p>
<h4 id="flexwrapwrap"><code>flex-wrap: wrap</code></h4>
<p>当空间不足时，这会将 Flex 项换行或推到下一行。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/6.-flex-wrap-wrap.png" alt="6.-flex-wrap-wrap" width="600" height="400" loading="lazy"></p>
<p><em>当 <code>flex-wrap</code> 设置为 <code>wrap</code> 时，Flex 项会换行或移动到下一行</em></p>
<h4 id="flexwrapwrapreverse"><code>flex-wrap: wrap-reverse</code></h4>
<p>这与 <code>wrap</code> 相反。它将溢出的项目移动到下一行，但方向相反。</p>
<p>例如，在名字容器上使用 <code>wrap-reverse</code> 将溢出项移动到下一个顶行，而不是下面的下一行。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/7.-flex-wrap-wrap-reverse.png" alt="7.-flex-wrap-wrap-reverse" width="600" height="400" loading="lazy"></p>
<p><em>示例： <code>flex-wrap: wrap-reverse</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-cbmfgr?file=style.css"><strong>练习使用 flex-wrap</strong></a></p>
<h3 id="the-flex-flow-shorthand-property"><code>flex-flow</code> 缩写属性</h3>
<p><code>flex-flow</code> 属性是 <code>flex-direction</code> 和 <code>flex-wrap</code> 属性的缩写。这意味着当你使用 <code>flex-flow</code> 时，只需要一行代码即可同时应用这两个属性。</p>
<p>请参阅下面使用名字容器的示例。你可以为容器指定 <code>flex-direction</code> 和 <code>flex-wrap</code> 属性。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-direction: column;  
    flex-wrap: wrap;
}
</code></pre>
<p>或者你可以使用 <code>flex-flow</code> 缩写来获得相同的结果。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-flow: column wrap;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/8.-flex-flow.png" alt="8.-flex-flow" width="600" height="400" loading="lazy"></p>
<p><em>示例： <code>flex-flow: column wrap</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-xuv4bx?file=style.css"><strong>练习使用 flex-flow</strong></a></p>
<h3 id="the-justify-content-property"><code>justify-content</code> 属性</h3>
<p><code>justify-content</code> 属性处理 Flex 容器主轴上 Flex 项的对齐方式。</p>
<p>你可以使用它来处理主轴上空间的分配方式。该属性可以取以下任何值：</p>
<ul>
<li><code>flex-start</code> (默认值)</li>
<li><code>flex-end</code></li>
<li><code>center</code></li>
<li><code>space-between</code></li>
<li><code>space-around</code></li>
<li><code>space-evenly</code></li>
</ul>
<h4 id="justifycontentflexstart"><code>justify-content: flex-start</code></h4>
<p>这将把 Flex 项放置在 <code>flex-direction</code> 的起始位置。这将把 Flex 项放置在 <code>flex-direction</code> 的起始位置。如果主轴是水平的，并且 <code>flex-direction</code> 的属性值是 <code>row</code>（就像下面的示例），它会将 Flex 项对齐到左侧。如果主轴是垂直的（<code>flex-direction</code> 的属性值是 <code>column</code>），它会将 Flex 项对齐到顶部。</p>
<p>在<code>names-container</code>的例子中，<code>justify-content: flex-start</code> 的效果如下：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	justify-content: flex-start;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/9.-justify-content-flex-start.png" alt="9.-justify-content-flex-start" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: flex-start</code></em></p>
<h4 id="justifycontentflexend"><code>justify-content: flex-end</code></h4>
<p>这会将 Flex 项放置在主轴的 flex-direction 的末尾。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/10.-justify-content-flex-end.png" alt="10.-justify-content-flex-end" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: flex-end</code></em></p>
<h4 id="justifycontentcenter"><code>justify-content: center</code></h4>
<p>这会将 Flex 项目放置在 Flex 容器主轴的中心。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/11.-justify-content-center-.png" alt="11.-justify-content-center-" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: center</code></em></p>
<h4 id="justifycontentspacebetween"><code>justify-content: space-between</code></h4>
<p>这会将第一个 Flex 项放置在主轴的起始位置，并将最后一个项放置在主轴的末尾。然后，主轴上的空间在这些元素之间均匀分布。（校对者注：<code>space-between</code>并不改变元素本身大小，它的作用只是将元素之间的间距均匀划分了）</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/12.-justify-content-space-between.png" alt="12.-justify-content-space-between" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: space-between</code></em></p>
<h4 id="justifycontentspaceevenly"><code>justify-content: space-evenly</code></h4>
<p>这会在 Flex 项之间均匀分配空间。这意味着每项前后的空间都相同。（校对者注：<code>space-between</code>模式中，首项和末项在没有其他CSS设置的前提下，与Flex容器的左外边距/右外边距为0，即在Flex容器中与最左端和最右端“顶格”。而<code>space-evenly</code>则是保证每一个Flex项左侧和右侧的边距均是相等的，即Flex项之间的间距和Flex项与Flex容器边界的间距都相等，该模式下Flex项与Flex容器的左右边界也存在间距。）</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/13.-justify-content-space-evenly.png" alt="13.-justify-content-space-evenly" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: space-evenly</code></em></p>
<h4 id="justifycontentspacearound"><code>justify-content: space-around</code></h4>
<p>这也会在 Flex 项之间均匀分配空间。这里的关键区别在于，第一个项之前和最后一个项之后的空间是 Flex 项之间空间的一半。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/14.-justify-content-space-around.png" alt="14.-justify-content-space-around" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>justify-content: space-around</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-zpcbxv?file=style.css"><strong>练习使用 justify-content</strong></a></p>
<h3 id="the-align-items-property"><code>align-items</code> 属性</h3>
<p><code>align-items</code> 属性处理 Flex 项在 Flex 容器交叉轴上的对齐方式。它可以采用以下任意值：</p>
<ul>
<li><code>stretch</code> (默认值)</li>
<li><code>flex-start</code></li>
<li><code>flex-end</code></li>
<li><code>center</code></li>
<li><code>baseline</code></li>
</ul>
<h4 id="alignitemsstretch"><code>align-items: stretch</code></h4>
<p>这会拉伸 Flex 项以填充 Flex 容器内的空间。</p>
<p>看下面的示例，使用一个新的名字容器（<code>names-container</code>），其中包含不同大小的名字卡片：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
    align-items: stretch;  
    /* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/15.-align-items-stretch.png" alt="15.-align-items-stretch" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-items: stretch</code></em></p>
<h4 id="alignitemsflexstart"><code>align-items: flex-start</code></h4>
<p>这会将 Flex 项放置在 Flex 容器的交叉轴的起始位置。如果交叉轴是垂直的，如下例所示， <code>align-items: flex-start</code> 会将项放置在顶部。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	align-items: flex-start;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/16.-align-items-flex-start.png" alt="16.-align-items-flex-start" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-items: flex-start</code></em></p>
<h4 id="alignitemsflexend"><code>align-items: flex-end</code></h4>
<p>这会将 Flex 项放置在 Flex 容器的交叉轴的末尾位置。如果交叉轴是垂直的，如下例所示， <code>align-items: flex-end</code> 会将项放置在底部。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
    align-items: flex-end;  
    /* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/17.-align-items-flex-end.png" alt="17.-align-items-flex-end" width="600" height="400" loading="lazy"></p>
<p>示例：<code>align-items: flex-end</code></p>
<h4 id="alignitemscenter"><code>align-items: center</code></h4>
<p>这会将 Flex 项在 Flex 容器的交叉轴的中心对齐。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	align-items: center;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/18.-align-items-center.png" alt="18.-align-items-center" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-items: center</code></em></p>
<h4 id="alignitemsbaseline"><code>align-items: baseline</code></h4>
<p>当你使用 <code>baseline</code> 值时，Flex 项目的排列方式是使它们的基线对齐。请参阅下面的示例：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	align-items: baseline;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/Untitled-design-1.png" alt="Untitled-design-1" width="600" height="400" loading="lazy"></p>
<p><em>基线用白色虚线表示</em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-jydywf?file=style.css"><strong>练习使用 align-items</strong></a></p>
<h3 id="the-align-content-property"><code>align-content</code> 属性</h3>
<p>当你有一个带有换行（或多个 Flex 行）的 Flex 容器时，你可能需要对这些行进行对齐以根据需要分配空间。这时你可以使用 <code>align-content</code> 。该属性可以取以下任何值：</p>
<ul>
<li><code>stretch</code> (默认值)</li>
<li><code>flex-start</code></li>
<li><code>flex-end</code></li>
<li><code>center</code></li>
<li><code>space-between</code></li>
<li><code>space-evenly</code></li>
<li><code>space-around</code></li>
</ul>
<p>在下面的示例中，<code>names-container</code>中有 11 个名字，并且<code>names-container</code>的 <code>flex-wrap</code> 值为 <code>wrap</code>。这意味着你可以应用 <code>align-content</code> 属性来改变 Flex 行的对齐方式。</p>
<h4 id="aligncontentstretch"><code>align-content: stretch</code></h4>
<p>这会拉伸 Flex 行以填充 Flex 容器交叉轴内的空间。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	align-items: stretch;  
	/* Other styles here... */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/20.-align-content-stretch.png" alt="20.-align-content-stretch" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: stretch</code></em></p>
<h4 id="aligncontentflexstart"><code>align-content: flex-start</code></h4>
<p>这将把 Flex 行放置在容器的交叉轴起始位置。例如，如果交叉轴像 <code>names-container</code> 一样是垂直的，它就会将 Flex 行放置在顶部。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/21.-align-content-flex-start.png" alt="21.-align-content-flex-start" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: flex-start</code></em></p>
<h4 id="aligncontentflexend"><code>align-content: flex-end</code></h4>
<p>这会将 Flex 行放置在容器的交叉轴末尾位置。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/22.-align-content-flex-end.png" alt="22.-align-content-flex-end" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: flex-end</code></em></p>
<h4 id="aligncontentcenter"><code>align-content: center</code></h4>
<p>这会将 Flex 行放置在容器的交叉轴中心位置。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/23.-align-content-center.png" alt="23.-align-content-center" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: center</code></em></p>
<h4 id="aligncontentspacebetween"><code>align-content: space-between</code></h4>
<p>这会将第一行放置在交叉轴的起始位置。它还会将最后一行放置在交叉轴的末尾位置。然后，交叉轴上的空间会均匀分配给这些行。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/24.-align-content-space-between.png" alt="24.-align-content-space-between" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: space-between</code></em></p>
<h4 id="aligncontentspaceevenly"><code>align-content: space-evenly</code></h4>
<p>这会在 Flex 行之间均匀分配空间。这意味着每行前后的空间都是相同的。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/25.-align-content-space-evenly.png" alt="25.-align-content-space-evenly" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: space-evenly</code></em></p>
<h4 id="aligncontentspacearound"><code>align-content: space-around</code></h4>
<p>这也会在 Flex 行之间均匀分配空间。这里的主要区别在于，第一行之前和最后一行之后的空间是 Flex 行之间空间的一半。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/26.-align-content-space-around.png" alt="26.-align-content-space-around" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-content: space-around</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-fukvgd?file=style.css"><strong>练习使用 align-content</strong></a></p>
<h3 id="the-place-content-property"><code>place-content</code> 属性</h3>
<p>如果你需要同时使用 <code>justify-content</code> 和 <code>align-content</code> 属性，你可以使用 <code>place-content</code> 缩写属性。</p>
<p>它可以接受一个或两个值。当你给它一个单一值时，浏览器会为 <code>justify-content</code> 和 <code>align-content</code> 应用相同的值。</p>
<p>当你为 <code>place-content</code> 提供两个值时，第一个值将用于 <code>align-content</code> ，第二个值将用于 <code>justify-content</code>。</p>
<p>让我们看一个示例:</p>
<p>无需这样写:</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	align-content: flex-end;  
	justify-content: flex-start;  
	/* Other content */
}
</code></pre>
<p>你可以改为写下面的代码，效果相同：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	place-content: flex-end flex-start;  
	/* Other content */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/43.-place-content.png" alt="43.-place-content" width="600" height="400" loading="lazy"></p>
<p><em>示例：使用 <code>place-content</code> 缩写</em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-ytdywl?file=style.css"><strong>练习使用 place-content</strong></a></p>
<h2 id="the-flex-items-properties">Flex 项属性</h2>
<p>Flex 容器的每个直接子元素都是 Flex 项。到目前为止，你已经学习了 Flex 容器的属性。</p>
<p>Flexbox 还有一些属性，你可以应用到单个 Flex 项上。它们包括以下内容：</p>
<ul>
<li><code>order</code></li>
<li><code>align-self</code></li>
<li><code>flex-grow</code></li>
<li><code>flex-shrink</code></li>
<li><code>flex-basis</code></li>
<li><code>flex</code></li>
</ul>
<h3 id="the-order-property"><code>order</code> 属性</h3>
<p><code>order</code> 属性确定 Flex 项的出现顺序。</p>
<p>你给这个属性的赋值必须是一个数字。一个数字较小的 Flex 项将出现在数字较大的 Flex 项之前。</p>
<p>在 HTML 代码中，四个名字的顺序如下:</p>
<ol>
<li>Jill</li>
<li>John</li>
<li>Jane</li>
<li>Jack</li>
</ol>
<pre><code class="language-CSS">&lt;div class="names-container"&gt;
	&lt;p id="jill"&gt;1. JILL&lt;/p&gt;
	&lt;p id="john"&gt;2. JOHN&lt;/p&gt;
	&lt;p id="jane"&gt;3. JANE&lt;/p&gt;
	&lt;p id="jack"&gt;4. JACK&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<p>你可以使用 <code>order</code> 属性改变屏幕上的出现顺序。请参阅下面的示例。</p>
<p>以下是没有 <code>order</code> 属性时它们的显示方式:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/27.-no-order-property.png" alt="27.-no-order-property" width="600" height="400" loading="lazy"></p>
<p><em>添加 <code>order</code> 属性之前的名字卡片</em></p>
<p>现在，当你添加以下 <code>order</code> 属性时，它们的显示方式如下所示：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;
}

#jill {  
	order: 2;  
    background-color: #fe4f46;
}

#john {  
	order: 4;  
    background-color: #fcd65c;
}

#jane {  
	order: 1;  
    background-color: 
    #00bab4;
}

#jack {  
	order: 3;  
    background-color: #003f54;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/28.-with-order-property.png" alt="28.-with-order-property" width="600" height="400" loading="lazy"></p>
<p><em><code>order</code> 属性改变了出现顺序</em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-c5mf8q?file=style.css"><strong>练习使用 order 属性</strong></a></p>
<p><strong>警告:</strong> 尽管屏幕上的出现顺序改变了，但 HTML 中的顺序保持不变。而屏幕阅读器使用的是 HTML 中的顺序。如果可能，最佳实践是在 HTML 中改变顺序，而不是使用 Flexbox 进行更改。</p>
<h3 id="the-align-self-property"><code>align-self</code> 属性</h3>
<p>你可以使用 <code>align-self</code> 属性为一个 Flex 项单独设置不同的对齐方式。</p>
<p>它的工作方式与 <code>align-items</code> 属性相同。不同之处在于， <code>align-items</code> 适用于所有 Flex 项，而 <code>align-self</code> 属性仅适用于特定项。</p>
<p>例如:</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
    align-items: center;  
    /* Other styles */    
}

#jill {
	align-self: flex-start;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/37.-align-self.png" alt="37.-align-self" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>align-self</code> 带有 <code>flex-start</code> 值</em></p>
<p>在这个示例中，<code>names-container</code> 的 <code>align-items</code> 属性设置为 <code>center</code>，这会使所有名字都居中对齐。</p>
<p>但是使用 <code>align-self</code> 属性，你可以用 <code>flex-start</code> 将 Jill 的名字卡片对齐到顶部。</p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-e9ctpu?file=style.css"><strong>练习使用 align-self 属性</strong></a></p>
<h3 id="the-flex-grow-property"><code>flex-grow</code> 属性</h3>
<p>当你将容器的 <code>display</code> 设置为 <code>flex</code> 时，通常会在排列项之后有一些额外的空间。请参阅下面的示例：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
    justify-content: 
    flex-start;  
 	/* Other styles */
 }
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/29.-flex-grow-extra-space.png" alt="29.-flex-grow-extra-space" width="600" height="400" loading="lazy"></p>
<p><em>Flex 容器有足够的空间容纳 Flex 项</em></p>
<p>浏览器会将多余的空间视为 <code>1</code> 的值。这意味着当你为其中一个 Flex 项的 <code>flex-grow</code> 设置为 <code>0.5</code> 时，浏览器会将剩余空间的一半添加到该项的大小中。</p>
<pre><code class="language-CSS">#jill {
	flex-grow: 0.5;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/30.-flex-grow-0.5.png" alt="30.-flex-grow-0.5" width="600" height="400" loading="lazy"></p>
<p><em><code>flex-grow</code> 属性使 Jill 的大小大于其初始大小</em></p>
<p>如果你给 <strong>仅一个 Flex 项</strong> 设置了 <code>flex-grow</code> 值为 <code>1</code> ，浏览器将把所有额外的空间都分配给该项。</p>
<p><strong>注意：</strong> 如果容器中只有一个项具有 <code>flex-grow</code> 值，则任何值为 1 或更大的值都会使其占据所有额外空间。</p>
<p>例如，下面两个代码片段对 Jill 的卡片具有相同的效果：</p>
<pre><code class="language-CSS">#jill {  
	flex-grow: 1;
}
</code></pre>
<pre><code class="language-CSS">#jill {  
	flex-grow: 99;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/31.-flex-grow-1-or-more.png" alt="31.-flex-grow-1-or-more" width="600" height="400" loading="lazy"></p>
<p><em>当容器中只有一个卡片的 <code>flex-grow</code> 为 <code>1</code> 或以上时</em></p>
<p>当你为多个元素添加 <code>flex-grow</code> 值会发生什么？</p>
<p>浏览器将按比例为它们共享额外的空间。</p>
<p>例如，当你给 Jane 设置 <code>flex-grow</code> 为 <code>3</code>，给 Jack 设置 <code>flex-grow</code> 为 <code>1</code> 时，浏览器将以 <code>3:1</code> 的比例分享额外的空间。</p>
<p>这意味着额外空间的总值变为 <code>4</code>（3+1）。<code>Jane</code> 将获得额外空间的 <code>3/4</code>，而 <code>Jack</code> 将获得 <code>1/4</code>。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/32.-flex-grow-jane-jack.png" alt="32.-flex-grow-jane-jack" width="600" height="400" loading="lazy"></p>
<p><em>额外的空间按比例在 <code>Jane</code> 和 <code>Jack</code> 之间共享</em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-m6h8af?file=style.css"><strong>练习使用 flex-grow 属性</strong></a></p>
<h3 id="the-flex-shrink-property"><code>flex-shrink</code> 属性</h3>
<p><code>flex-shrink</code> 属性与 <code>flex-grow</code> 相反。</p>
<p>当你希望在存在额外空间时增加 Flex 项的大小时，你可以使用 <code>flex-grow</code>。但是，当 Flex 容器中的空间不足时，你可以使用 <code>flex-shrink</code> 来减小 Flex 项的大小。</p>
<p>请参阅下面的示例:</p>
<pre><code class="language-HTML">&lt;div class="numbers-container"&gt;
	&lt;p id="one"&gt;1&lt;/p&gt;
	&lt;p id="two"&gt;2&lt;/p&gt;
	&lt;p id="three"&gt;3&lt;/p&gt;
	&lt;p id="four"&gt;4&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-CSS">.numbers-container {  
	display: flex;  
	justify-content: flex-start;  
	/* Other styles */
}

#one {  
	flex-shrink: 2;  
	background-color: #fe4f46;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/33.-flex-shrink-value-2.png" alt="33.-flex-shrink-value-2" width="600" height="400" loading="lazy"></p>
<p><em>第一张卡片缩小，为其他卡片腾出空间</em></p>
<p>在这个示例中，四个数字每个的宽度都设置为 150px（总共 600px）。但 <code>numbers-container</code> 的宽度只有 400px，这是不够的。</p>
<p>卡片必须缩小以适应可用空间。但是 flex-shrink 的值为 <code>2</code> 的数字 <code>1</code> ，元素大小缩小到了其他数字的 1/2。</p>
<h4 id="flex">如果你不希望一个 Flex 项缩小怎么办？</h4>
<p>为了防止 Flex 项收缩，给它一个 <code>flex-shrink</code> 值为 <code>0</code>。</p>
<p>例如，当你为 Number <code>1</code> 指定 <code>flex-shrink</code> 为 <code>0</code> 时，它将保持 150px 的宽度。其他 Flex 项将缩小以适应剩余空间。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/34.-flex-shrink-vallue-0.png" alt="34.-flex-shrink-vallue-0" width="600" height="400" loading="lazy"></p>
<p>第一个卡片不会缩小，因为它的 <code>flex-shrink</code> 值为 <code>0</code>。</p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-q9zndc?file=style.css"><strong>练习使用 flex-shrink 属性</strong></a></p>
<h3 id="the-flex-basis-property"><code>flex-basis</code> 属性</h3>
<p>你可以使用 <code>flex-basis</code> 属性来设置特定 Flex 项的默认长度。这取决于 <code>flex-direction</code> ，可以是宽度或高度。</p>
<p>如果 <code>flex-direction</code> 是 <code>row</code> 或 <code>row-reverse</code> ，则 <code>flex-basis</code> 的值就成为 Flex 项的初始宽度。</p>
<p>如果 <code>flex-direction</code> 是 <code>column</code> 或 <code>column-reverse</code> ，那么 <code>flex-basis</code> 的值就成为 Flex 项的初始高度。</p>
<p>例如:</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-direction: column;  
	/* Other styles */
}

div {  
	height: 20px;
}

#jane {  
	flex-basis: 60px;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/35.-flex-basis-height.png" alt="35.-flex-basis-height" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-basis</code> 设置 item 的高度</em></p>
<p>在这个示例中，div 的高度设置为 20px。但 Jane 得到的 <code>flex-basis</code> 值为 60px。这会覆盖所有 div 的 20px。</p>
<p>注意：Jane 的 <code>flex-basis</code> 值为 60px，因为 <code>flex direction</code> 是 <code>column</code>。这意味着主轴是垂直的。</p>
<p>下面是另一个示例。这次，<code>flex-direction</code> 是 <code>row</code>。这意味着 <code>flex-basis</code> 将设置 Flex 项的宽度。</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-direction: row;  
    /* Other styles */
}

div {  
	width: 70px;
}

#jane {  
	flex-basis: 140px;
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/36.-flex-basis-width.png" alt="36.-flex-basis-width" width="600" height="400" loading="lazy"></p>
<p><em>示例：<code>flex-basis</code> 设置 item 的宽度</em></p>
<p>虽然所有其他 div 的宽度均为 70px，但 Jane 的宽度由 <code>flex-basis</code> 设置为 140px。</p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-maihzd?file=style.css"><strong>练习使用 flex-basis 属性</strong></a></p>
<h3 id="the-flex-shorthand-property"><code>flex</code> 缩写属性</h3>
<p>你可以使用 <code>flex</code> 作为 <code>flex-grow</code>、<code>flex-shrink</code> 和 <code>flex-basis</code> 属性的缩写。</p>
<p>例如，无需这样写：</p>
<pre><code class="language-CSS">.flex-item {  
	flex-grow: 2;  
	flex-shrink: 0;  
	flex-basis: 50px;
}
</code></pre>
<p>你可以像这样使用缩写，它会产生相同的效果：</p>
<pre><code class="language-CSS">.flex-item {  
	flex: 2 0 50px;
}
</code></pre>
<p><code>flex</code> 属性最多可以接受三个值。值的顺序很重要。浏览器将第一个值分配给 <code>flex-grow</code>，第二个值分配给 <code>flex-shrink</code>，第三个值分配给 <code>flex-basis</code>。</p>
<p><code>flex</code> 的默认值是 <code>1 0 auto</code>。</p>
<p>这意味着如果你给 <code>flex</code> 一个值为 2，浏览器将使用 2 作为 <code>flex-grow</code>。然后它将 <code>flex-shrink</code> 设置为 0，将<code>flex-basis</code> 设置为 auto。</p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-m19hov?file=style.css"><strong>练习使用 <code>flex</code> 属性</strong></a></p>
<h2 id="how-to-center-an-element-with-flexbox">如何使用 Flexbox 将元素居中</h2>
<p>让许多前端开发人员头疼的问题之一是元素居中。 Flexbox 对此提供了一个完美的解决方案。</p>
<p>涉及两个步骤：</p>
<ol>
<li>通过将 <code>display</code> 设置为 <code>flex</code> 使父元素成为 Flex 容器。</li>
<li>将 <code>justify-content</code> 和 <code>align-items</code> 都设置为 <code>center</code>。</li>
</ol>
<p>就是这样！你的元素将完美居中！</p>
<p>例如:</p>
<pre><code class="language-HTML">&lt;div class="name-container"&gt;  
	&lt;p&gt;JOHN&lt;/p&gt;
&lt;/div&gt;
</code></pre>
<pre><code class="language-CSS">.name-container {  
	display: flex;  
	justify-content: center;  
	align-items: center;  
	/* Other Styles */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/38.-center-element-w--flexbox.png" alt="38.-center-element-w--flexbox" width="600" height="400" loading="lazy"></p>
<p><em>示例：使用 Flexbox 居中一个元素</em></p>
<p>无论你是试着居中文本、图像，还是整个导航栏，这都能完美运行。</p>
<h2 id="flexbox-gaps">Flexbox 间隙</h2>
<p>你可以使用 <code>gap</code> 属性来调整 flex 项之间的间距。</p>
<p><strong>注意：</strong> 你将 gap 属性应用于 Flex 容器，而不是 Flex 项。</p>
<p><code>gap</code> 可以取两个值：第一个值用于行之间的间距，第二个值用于列之间的间距。</p>
<p>例如:</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	gap: 50px 10px; 
	/* row-gap column-gap */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/39.-gap-two-values.png" alt="39.-gap-two-values" width="600" height="400" loading="lazy"></p>
<p><em>示例：为 gap 属性指定两个值</em></p>
<p>如果你想要的行和列之间的间距相同，你可以使用单个值。浏览器将为行和列都应用相同的值。</p>
<p>例如:</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	gap: 10px; 
	/* Other Styles */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/40.-gap-single-value.png" alt="40.-gap-single-value" width="600" height="400" loading="lazy"></p>
<p><em>示例：行距和列距仅使用一个值</em></p>
<p>如果你需要仅在行之间应用特定的间隙值，你还可以使用属性 <code>row-gap</code> 。如果你需要仅在列之间添加间隙，则使用 <code>column-gap</code> 。</p>
<p>例如：仅在行之间添加间距：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	row-gap: 20px; 
	/* Other Styles */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/41.-row-gap.png" alt="41.-row-gap" width="600" height="400" loading="lazy"></p>
<p><em>示例：使用 <code>row-gap</code></em></p>
<p>例如: 仅在列之间添加间距：</p>
<pre><code class="language-CSS">.names-container {  
	display: flex;  
	flex-wrap: wrap;  
	column-gap: 20px; 
	/* Other Styles */
}
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/42.-column-gap.png" alt="42.-column-gap" width="600" height="400" loading="lazy"></p>
<p><em>示例：使用 <code>column-gap</code></em></p>
<p><strong>在 StackBlitz 上</strong> <a href="https://stackblitz.com/edit/js-v77toh?file=style.css"><strong>练习使用 gap 属性</strong></a></p>
<h2 id="practice-with-flexbox-games">通过 Flexbox 游戏练习</h2>
<p>想要以交互方式练习 Flexbox？看看以下游戏。它们以有趣且引人入胜的方式提供亲身体验 Flexbox 的实践练习。</p>
<ul>
<li><a href="https://flexboxfroggy.com/">Flexbox Froggy</a></li>
<li><a href="http://www.flexboxdefense.com/">Flexbox Defense</a></li>
<li><a href="https://mastery.games/flexboxzombies/">Flexbox Zombies</a></li>
</ul>
<h2 id="are-there-bugs-in-css-flexbox">CSS Flexbox 中有 Bug 吗</h2>
<p>虽然 CSS Flexbox 是一个强大的布局工具，但它有一些可能会让你感到意外的 bug 。</p>
<p>一个常见的例子是 <strong>某些 HTML 元素无法充当 flex 容器</strong>。这些元素包括 <code>&lt;button&gt;</code>、<code>&lt;fieldset&gt;</code> 和 <code>&lt;summary&gt;</code> 元素。</p>
<p>解决方法是使用像 <code>div</code> 这样的元素来包裹该元素的子元素。然后在包装器 <code>div</code> 上使用 Flexbox。</p>
<p>如果你对其他 Flexbox 的 bug 和解决方法感兴趣，可以查看 GitHub 上的 <a href="https://github.com/philipwalton/flexbugs">Flexbugs 仓库</a>。</p>
<h2 id="conclusion">总结</h2>
<p>在本指南中，你学习了所有 Flexbox 属性、它们的值以及如何使用它们创建响应式布局。你还了解了一些像 Flexbox Froggy 这样的游戏，可以用来练习。</p>
<p>感谢你阅读本文，祝你编码愉快！欢迎<a href="https://www.youtube.com/@DevAfterHours">订阅我的 YouTube 频道</a>以获取更深入的教程。</p>
<p><strong>译文校对者：<a href="https://www.freecodecamp.org/chinese/news/author/tsukistar/">Tsukistar</a></strong></p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
