【CSS】深入浅出弹性布局

CSS的弹性布局(Flexbox)是一种用于在容器中沿着一维方向(水平或垂直)来布局、对齐和分配容器内项目空间的有效方式。它旨在提供一个更加有效的方式来布局、对齐和分配容器中项目的空间,即使它们的大小未知或是动态变化的。

基本概念

  • 容器(Flex Container) :设置display: flex;display: inline-flex;的元素成为一个弹性容器,其子元素则成为弹性项目(Flex Items)。
  • 项目(Flex Items):弹性容器的直接子元素自动成为弹性项目。
  • 主轴(Main Axis) :弹性项目沿着其排列的轴被称为主轴。默认情况下,主轴的方向是水平方向(从左到右),但可以通过flex-direction属性来改变。
  • 交叉轴(Cross Axis):垂直于主轴的轴称为交叉轴。

主要属性

容器属性
  • flex-direction:定义主轴的方向(row, row-reverse, column, column-reverse)。
  • flex-wrap:定义项目是否应该换行(nowrap, wrap, wrap-reverse)。
  • flex-flowflex-directionflex-wrap的简写。
  • justify-content:定义项目在主轴上的对齐方式(flex-start, flex-end, center, space-between, space-around, space-evenly)。
  • align-items:定义项目在交叉轴上的对齐方式(flex-start, flex-end, center, baseline, stretch)。
  • align-content:定义多根轴线的对齐方式,如果项目只有一根轴线,则此属性不起作用(flex-start, flex-end, center, space-between, space-around, stretch)。
项目属性
  • flex-grow:定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
  • flex-shrink:定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
  • flex-basis:定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
  • flexflex-grow, flex-shrinkflex-basis的简写,默认值为0 1 auto
  • align-self :允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

示例

html 复制代码
<div class="flex-container">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>

<style>
.flex-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 100px;
}

.flex-item {
  flex-grow: 1; /* 所有项目将等分剩余空间 */
  text-align: center;
}
</style>

在这个例子中,.flex-container 是一个弹性容器,它的子元素 .flex-item 将沿主轴(水平方向)等分剩余空间,并且它们在交叉轴(垂直方向)上居中对齐。

相关推荐
用户9385156350712 分钟前
TypeScript 高级类型 + CSS 三列布局:从类型体操到样式工程的进阶之路
css·面试·typescript
Eason_Lou1 小时前
【无标题】
前端·vue.js·html
_codemonster1 小时前
npm run dev 是在开发模式运行,怎么在生产环境运行
前端·npm·node.js
kyriewen2 小时前
我受够了复制报错去问 AI,花一下午给控制台做了个调试助手
前端·javascript·ai编程
IT_陈寒3 小时前
Redis的DEL命令竟然没删掉数据?我踩的这个坑你得知道
前端·人工智能·后端
anOnion3 小时前
构建无障碍组件之Menu and Menubar Pattern
前端·html·交互设计
JavaGuide3 小时前
我用 Claude Code/ZCode+GLM-5.3 从零做了一款 Agent 游戏!
前端·后端
Eason_Lou3 小时前
vue flow使用注意事项
前端·vue.js
小赵同学WoW4 小时前
1-2 TypeScript 中的 `any` 与 `unknown`
前端