LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Flex布局全解析,看这一篇就够了

admin
2025年3月21日 10:37 本文热度 468

今天整理一下日常开发里常用的弹性盒子(Flex Box)布局。很难想象我曾经一度执着于用float、text-align、vertical-align等属性来解决元素居中对齐的问题,显然,很多场景是无法满足的。(既然提到居中......有时间再整理一篇关于实现元素居中问题的文章)


一、Flex布局基础概念

Flex布局是CSS3的新特性,是日常开发最常用的一种布局方式,避免了float导致的布局塌陷、position: absolute脱离文档流的问题。 当页面需要适应不同屏幕大小以及设备类型时,Flex布局可以确保元素随之灵活变化。

1. 弹性容器(Flex container)与弹性项目(Flex item)

  • 弹性容器:通过 display: flex 或 display: inline-flex 定义
  • 弹性项目(弹性子元素):容器的直接子元素自动成为弹性项目,弹性容器包含一个或多个弹性项目
<!DOCTYPE html>
<html>
<head>
    <style>
      .flex-container {
        display: flex;
        width100%;
        height350px;
        background-colorrgb(200200200);
      }

      .flex-item {
        background-color#409eff;
        width100px;
        height100px;
        margin10px;
      }
    
</style>
</head>
<body>
    <div class="flex-container">
      <div class="flex-item">flex item 1</div>
      <div class="flex-item">flex item 2</div>
      <div class="flex-item">flex item 3</div>
    </div>
</body>
</html>

不使用 display: flex 的效果:

使用 display: flex 的效果:

2. 主轴(Main Axis)与交叉轴(Cross Axis)

  • 主轴:项目排列的主要方向(默认水平从左到右)
  • 交叉轴:与主轴垂直的方向(默认垂直从上到下)
  • 通过 flex-direction 修改主轴方向

二、容器属性详解

以下6个属性设置在容器上:

1. flex-direction:决定主轴方向

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row:默认值,水平排列,从左到右
  • row-reverse:水平排列,从右到左
  • column:垂直排列,从上到下
  • column-reverse:垂直排列,从下到上

2. justify-content:主轴对齐方式

.container {
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
  • flex-start:默认值,左对齐
  • flex-end:右对齐
  • center:居中
  • space-between:两端对齐,项目之间间隔相等
  • space-around:项目两侧的间隔相等,首尾项目与容器边缘的间距是项目之间间距的一半
  • space-evenly:项目之间间隔相等,首尾项目与容器边缘的间距也等于项目之间间距

3. align-items:交叉轴对齐方式

.container {
  align-items: stretch | flex-start | flex-end | center | baseline;
}
  • stretch:默认值,如果项目未设置高度或设为auto,则拉伸至容器高度
  • flex-start:交叉轴起点对齐
  • flex-end:交叉轴终点对齐
  • center:居中
  • baseline:项目的第一行文字的基线对齐

4. flex-wrap:是否换行

.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap:默认值,不换行,可能导致溢出
  • wrap:项目总宽度超过容器时换行显示
  • wrap-reverse:往上换行

5. align-content:多行项目的交叉轴对齐,如果只有一行则不生效

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • 生效条件:容器有多行项目(需设置 flex-wrap: wrap
  • stretch:默认值,轴线撑满交叉轴

6. gap:项目间距

.container {
  gap10px/* 同时设置行与列间距 */
  row-gap10px
  column-gap20px;
}

三、项目属性详解

以下6个属性设置在项目上:

1. order:项目排列顺序

.item {
  order5/* 默认0,数值越小越靠前 */
}
  • 应用场景:调整项目显示顺序(不修改HTML结构)

2. flex-grow:放大比例

.item {
  flex-grow1/* 默认0(就算有剩余空间也不放大) */
}
  • 分配规则:根据比例分配剩余空间
  • 示例:如果三个项目同时设置 flex-grow: 1 则等分剩余空间

3. flex-shrink:缩小比例

.item {
  flex-shrink1/* 默认1(如果空间不足则缩小) */
}
  • 生效条件:项目总宽度超过容器时按比例缩小
  • flex-shrink:0的不缩小

4. flex-basis:初始尺寸

.item {
  flex-basis200px | auto; /* 默认auto,项目本来的大小 */
}
  • 优先级:比 width 更高

5. flexflex-growflex-shrink 和 flex-basis的简写

.item {
  flex: auto | none | 1 | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]; /* 默认0 1 auto */
}
  • 几个快捷键:
    • auto1 1 auto
    • none0 0 auto
    • 11 1 0%
    • initial:默认值,0 1 auto
  • 后两个属性可选

6. align-self:单个项目交叉轴对齐

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
  • auto:默认值
  • 允许单个项目有与其他项目的对齐方式不一致,覆盖容器的 align-items 设置

四、实战代码示例

示例1:经典导航栏

<!DOCTYPE html>
<html>
<head>
    <style>
      .nav {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding1rem;
        background#c9c9c9;
      }
      .logo {
        width100px;
      }
      .menu {
        display: flex;
        gap2rem;
      }
    
</style>
</head>
<body>
    <nav class="nav">
      <div class="logo">Logo</div>
      <div class="menu">
        <div>Home</div>
        <div>About</div>
        <div>Contact</div>
      </div>
    </nav>
</body>
</html>

示例2:等高卡片布局

<style>
.card-container {
  display: flex;
  gap1rem;
}
.card {
  flex1;
  background#f0f0f0;
  padding1rem;
}
</style>

<div class="card-container">
  <div class="card">Card 1</div>
  <div class="card">Card 2<br>多行内容</div>
  <div class="card">Card 3</div>
</div>

示例3:垂直居中(经典问题)

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height300px;
}

看到这里就基本掌握了Flex布局。后面会考虑再整理一下关于另一个布局方式Grid的详解以及他们的区别。


阅读原文:点击查看原文


该文章在 2025/3/21 10:37:54 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved