Skip to content

第4章:开启Flex布局

开启Flex布局是使用Flex布局的第一步。在本节中,我们将学习如何开启Flex布局,以及flex与inline-flex的区别。

4.1 容器开启Flex布局的语法

要开启Flex布局,只需要在容器元素上设置 display 属性为 flexinline-flex

css
/* 块级Flex容器 */
.container {
  display: flex;
}

/* 行内Flex容器 */
.inline-container {
  display: inline-flex;
}

4.2 flex与inline-flex的区别

属性值容器类型行为
flex块级Flex容器容器会占据整个父元素的宽度,类似于块级元素
inline-flex行内Flex容器容器的宽度由内容决定,类似于行内元素

示例对比

html
<!DOCTYPE html>
<html>
<head>
  <title>flex vs inline-flex</title>
  <style>
    .container {
      display: flex;
      background-color: #f0f0f0;
      padding: 10px;
      margin: 10px 0;
    }
    
    .inline-container {
      display: inline-flex;
      background-color: #e0e0e0;
      padding: 10px;
      margin: 10px;
    }
    
    .item {
      width: 60px;
      height: 60px;
      background-color: #3498db;
      color: white;
      display: flex;
      justify-content: center;
      align-items: center;
      margin: 5px;
      border-radius: 4px;
    }
    
    .text {
      margin: 10px;
    }
  </style>
</head>
<body>
  <h1>flex vs inline-flex</h1>
  
  <h2>display: flex(块级容器)</h2>
  <div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
  </div>
  <p class="text">块级Flex容器会占据整个宽度,即使内容不多</p>
  
  <h2>display: inline-flex(行内容器)</h2>
  <div class="inline-container">
    <div class="item">1</div>
    <div class="item">2</div>
  </div>
  <div class="inline-container">
    <div class="item">A</div>
    <div class="item">B</div>
    <div class="item">C</div>
  </div>
  <p class="text">行内Flex容器的宽度由内容决定,可以和其他元素在同一行显示</p>
</body>
</html>

4.3 开启Flex布局后,项目的默认行为

当容器开启Flex布局后,项目会有以下默认行为:

  1. 项目在主轴上从左到右排列flex-direction: row
  2. 项目不换行flex-wrap: nowrap
  3. 项目在主轴上顶部对齐justify-content: flex-start
  4. 项目在交叉轴上拉伸对齐align-items: stretch
  5. 项目的宽度由内容决定flex-basis: auto
  6. 项目不会放大flex-grow: 0
  7. 项目会缩小flex-shrink: 1
  8. 项目的顺序由HTML结构决定order: 0

4.4 实操案例:开启Flex布局,观察项目默认排列效果

代码示例

html
<!DOCTYPE html>
<html>
<head>
  <title>Flex布局默认行为</title>
  <style>
    .container {
      display: flex; /* 开启Flex布局 */
      height: 200px;
      background-color: #f0f0f0;
      border: 1px solid #ddd;
      padding: 10px;
    }
    
    .item {
      background-color: #3498db;
      color: white;
      padding: 20px;
      margin: 5px;
      border-radius: 4px;
    }
    
    .item1 {
      width: 100px;
    }
    
    .item2 {
      width: 150px;
    }
    
    .item3 {
      width: 80px;
    }
  </style>
</head>
<body>
  <h1>Flex布局默认行为</h1>
  <div class="container">
    <div class="item item1">项目1</div>
    <div class="item item2">项目2</div>
    <div class="item item3">项目3</div>
  </div>
  <p><strong>默认行为:</strong></p>
  <ul>
    <li>项目水平排列(flex-direction: row)</li>
    <li>项目不换行(flex-wrap: nowrap)</li>
    <li>项目从左到右对齐(justify-content: flex-start)</li>
    <li>项目拉伸至容器高度(align-items: stretch)</li>
  </ul>
</body>
</html>

效果说明

  • 三个项目水平排列
  • 项目高度自动拉伸至容器高度
  • 项目之间有默认的间距(来自margin)
  • 容器宽度由内容决定

4.5 常见错误:开启Flex布局后样式不生效的原因排查

常见原因

  1. 选择器错误:CSS选择器没有正确选中容器元素
  2. 属性拼写错误:如 display: flexs(多了一个s)
  3. 浏览器兼容性:在一些旧浏览器中需要添加前缀
  4. 样式优先级:其他样式覆盖了Flex布局相关属性
  5. HTML结构错误:项目不是容器的直接子元素

排查步骤

  1. 检查选择器:确保CSS选择器正确选中了目标元素
  2. 检查属性拼写:确保 display: flex 拼写正确
  3. 检查浏览器开发者工具:在Elements面板中查看元素的计算样式
  4. 检查HTML结构:确保项目是容器的直接子元素
  5. 简化代码:创建一个最小可复现的例子,逐步排查

浏览器兼容性

对于需要支持旧浏览器的项目,可以使用以下前缀:

css
.container {
  display: -webkit-box; /* Safari */
  display: -ms-flexbox; /* IE 10 */
  display: flex;
}

不过,现代浏览器已经广泛支持标准的Flex布局语法,通常不需要添加前缀。

实操练习

  1. 创建一个块级Flex容器,包含3个项目
  2. 创建一个行内Flex容器,包含2个项目
  3. 观察并对比两者的区别
  4. 尝试修改容器的高度,观察项目的拉伸效果

通过本节的学习,你已经掌握了如何开启Flex布局以及相关的注意事项。在接下来的章节中,我们将学习Flex布局的各种属性,进一步控制布局效果。

© 2026 编程马·菜鸟教程 版权所有