Skip to content

第10章:项目间距控制

在Flex布局中,我们可以通过 gap 属性来控制项目之间的间距,这是一个非常实用的属性,可以简化布局代码,避免使用 margin 来控制间距。

10.1 gap:设置项目之间的间距

gap 属性用于设置Flex项目之间的间距,它同时控制主轴和交叉轴上的间距。

语法

css
.container {
  gap: <row-gap> <column-gap>;
}

/* 或者简写为 */
.container {
  gap: <gap>;
}

常用用法

  1. gap:同时设置行间距和列间距
  2. row-gap:只设置行间距(交叉轴方向)
  3. column-gap:只设置列间距(主轴方向)

代码示例

html
<!DOCTYPE html>
<html>
<head>
  <title>gap 示例</title>
  <style>
    .container {
      display: flex;
      flex-wrap: wrap;
      background-color: #f0f0f0;
      padding: 10px;
      margin: 10px 0;
    }
    
    .gap-10 {
      gap: 10px;
    }
    
    .gap-20 {
      gap: 20px;
    }
    
    .row-column-gap {
      row-gap: 15px;
      column-gap: 25px;
    }
    
    .item {
      width: 100px;
      height: 80px;
      background-color: #3498db;
      color: white;
      display: flex;
      justify-content: center;
      align-items: center;
      border-radius: 4px;
    }
  </style>
</head>
<body>
  <h1>gap 示例</h1>
  
  <h2>gap: 10px</h2>
  <div class="container gap-10">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
  </div>
  
  <h2>gap: 20px</h2>
  <div class="container gap-20">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
  </div>
  
  <h2>row-gap: 15px, column-gap: 25px</h2>
  <div class="container row-column-gap">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
  </div>
</body>
</html>

10.2 用gap替代margin

在传统布局中,我们通常使用 margin 来控制元素之间的间距,但这会导致一些问题,比如:

  • 需要处理第一个或最后一个元素的margin
  • 嵌套布局时margin可能会重叠
  • 代码冗余,需要为每个元素设置margin

使用 gap 属性可以解决这些问题,它只在项目之间创建间距,不会影响容器的边缘。

对比示例

使用margin

css
.item {
  margin: 10px;
}

/* 需要处理边缘元素的margin */
.container {
  margin: -10px;
}

使用gap

css
.container {
  gap: 20px;
}

/* 不需要额外处理边缘元素 */

代码示例

html
<!DOCTYPE html>
<html>
<head>
  <title>gap vs margin</title>
  <style>
    .container {
      display: flex;
      flex-wrap: wrap;
      background-color: #f0f0f0;
      padding: 10px;
      margin: 10px 0;
    }
    
    .margin {
      margin: -5px;
    }
    
    .margin .item {
      margin: 5px;
    }
    
    .gap {
      gap: 10px;
    }
    
    .item {
      width: 100px;
      height: 80px;
      background-color: #3498db;
      color: white;
      display: flex;
      justify-content: center;
      align-items: center;
      border-radius: 4px;
    }
  </style>
</head>
<body>
  <h1>gap vs margin</h1>
  
  <h2>使用 margin</h2>
  <div class="container margin">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
  </div>
  
  <h2>使用 gap</h2>
  <div class="container gap">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
  </div>
  <p>使用 gap 更加简洁,不需要处理边缘元素的 margin</p>
</body>
</html>

10.3 兼容性说明

gap 属性在现代浏览器中得到了广泛支持,包括:

  • Chrome 66+
  • Firefox 61+
  • Safari 12.1+
  • Edge 79+

对于需要支持旧浏览器的项目,可以使用以下回退方案:

css
.container {
  /* 现代浏览器 */
  gap: 20px;
  
  /* 旧浏览器回退 */
  margin: -10px;
}

.container > * {
  /* 旧浏览器回退 */
  margin: 10px;
}

实操练习

  1. 创建一个使用 gap 属性设置项目间距的布局
  2. 创建一个使用 row-gapcolumn-gap 设置不同间距的布局
  3. 对比使用 gapmargin 的区别
  4. 尝试在不同的Flex布局中使用 gap 属性

通过本节的学习,你已经掌握了如何使用 gap 属性来控制Flex项目之间的间距。这个属性可以大大简化布局代码,使代码更加清晰和易于维护。

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