CSS之flex布局和Grid布局

flex布局

  • display:flex | inline-flex       设定flex布局
  • flex-direction: row | row-reverse | column | column -reverse         设定主轴方向
  • justify-content: flex-start | center | flex-end         设定主轴对齐方式
  • align-content: flex-start | center | flex-end         设定副轴对齐方式(多轴)
  • align-items: flex-start | center | flex-end         设定副轴对齐方式(单轴)
  • flex-wrap:    wrap | nowrap         是否换行
  • flex-flow: row-reverse  wrap         flex-direction和flex-wrap的缩写
  • flex-grow: 0         放大(剩余空间)默认值0
  • flex-shrink: 1         缩小(空间不足)默认值1
  • flex-basis: 200px         最低分配空间
  • flex: auto| 1        前三项的缩写
  • align-self: center         单独设置副轴某一项的对齐方式,覆盖align-items
  • order:0         排列顺序,从小到大,默认值0

Grid布局

  • display: grid | inline-grid         设定grid布局
  • grid-template-columns: 300px | 33.3% | repeat(3, 300px) | repeat(auto-fill ,100px | 100px 1fr 2fr | 1fr 1fr minmax(100px,1fr) | 100px auto 100px)         列宽
  • grid-template-rows: 300px | 33.3% | repeat(3, 300px) | repeat(auto-fill ,100px | 100px 1fr 2fr | 1fr 1fr minmax(100px,1fr) | 100px auto 100px)         行高
  • grid-row-gap: 20px         行间距
  • grid-column-gap: 20px         列间距
  • grid-gap: 20px 10px         上面两个的缩写
  • grid-template-areas: ‘a b c’

                                         ‘d e f’

       注:不需要利用的区域用“.”(点)表示

  • grid-auto-flow: row | column | row dense         单元格排列顺序;当填充不下需要换行时,row dense可以解决换行留空的问题。
  • justify-items:center         单元格内容的水平位置
  • align-items: center         单元格内容的垂直位置
  • place-items: center center         上述两个属性的简写
  • justify-content:center         单元格内容的水平位置
  • align- content:   center         单元格内容的垂直位置
  • place- content: center center         上述两个属性的简写
  • justify-self:center         单独设置单元格内容的水平位置
  • align- self: center         单独设置单元格内容的垂直位置
  • place- self: center  center         上述两个属性的简写
  • grid-auto-columns:         自动创建多余网格的列宽
  • grid-auto-rows:         自动创建多余网格的行高
  • 网格属性:作用在每个item上

        grid-column-start: 1         网格左边框占的第index条网格线

        grid-column-end: 1         网格右边框占的第index条网格线

        grid-row-start: 1         网格上边框占的第index条网格线

        grid-row-start: 1         网格下边框占的第index条网格线

        缩写:grid-column: 1/3 | 1/span2

  • grid-area:         指定当前单元格放在某一区域
  1. 配合grid-template-areas使用        grid-area:e
  2. 配合grid-column-start等使用         grid-area:1/2/1/2

        grid-area: <row-start> / <column-start> / <row-end> / <column-end>;

### CSS Flexbox 布局Grid 布局的区别及使用场景 #### 1. **基本概念** Flexbox 是一种一维布局模式,主要用于解决单向(水平或垂直)的布局需求。它通过灵活调整子项的空间分布、对齐方式等特性,使得页面元素能够在不同屏幕尺寸下保持良好的适应性[^1]。 相比之下,Grid 布局是一种二维布局模式,允许开发者在同一时间管理行列的结构。这种能力使其非常适合用于构建复杂的网格系统,比如网站的整体框架或者图片画廊等场景[^2]。 --- #### 2. **开启方式** 要启用 Flexbox 布局,只需将父容器的 `display` 属性设置为 `flex` 或 `inline-flex` 即可。例如: ```css .container { display: flex; } ``` 对于 Grid 布局,则需要将父容器的 `display` 设置为 `grid` 或 `inline-grid` 来启动该功能。例如: ```css .container { display: grid; } ``` 两者都支持嵌套使用,但在实际应用中需注意性能优化[^3]。 --- #### 3. **主轴与交叉轴的概念** 在 Flexbox 中存在两个核心维度——主轴(main axis)交叉轴(cross axis)。默认情况下,主轴沿水平方向展开而交叉轴则处于竖直状态;不过可以通过修改 `flex-direction` 改变这一行为[^4]。 而在 Grid 系统里并没有严格区分所谓的“主次”,因为其本质上就是基于行列共同作用形成的矩阵型架构。 --- #### 4. **具体属性对比** | 功能/属性 | Flexbox | Grid | |-------------------|---------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | 定义容器 | 使用 `display: flex;` | 使用 `display: grid;` | | 控制排列方向 | 利用 `flex-direction` (row/column) | 不单独提供此选项,由定义行列决定 | | 子项间距设定 | 需借助 margin/padding 或者 gap | 可直接利用 `gap`, 如 `column-gap`,`row-gap` | | 对齐方式 | 主轴(`justify-content`) & 交叉轴 (`align-items`) | 更加细化的支持多种组合形式 | 更多细节可以参见官方文档说明^. --- #### 5. **典型应用场景分析** ##### (1)**Flexbox 的适用范围** 当面对简单的线性排布任务时,如导航栏设计、按钮组摆放或是表单项整齐化处理等问题,Flexbox 显示出了极大的便利性简洁度[^3]。 示例代码如下所示: ```html <div class="nav-bar"> <a href="#">Home</a> <a href="#">About</a> <a href="#">Contact</a> </div> <style> .nav-bar { display:flex; justify-content:space-around; /* 平均分配剩余空间 */ } </style> ``` ##### (2)**Grid 的擅长领域** 如果目标是要搭建整个页面的大纲轮廓或者是呈现多张照片组成的相册效果的话,那么采用 Grid 将会更加合适一些[^4]. 实例演示: ```html <div class="gallery"> <img src="image1.jpg"/> <img src="image2.jpg"/> ... </div> <style> .gallery{ display:grid; grid-template-columns:repeat(3,minmax(100px,1fr));/* 创建三列表格并自适应宽度变化*/ gap:1em;/* 添加间隙 */ } </style> ``` --- #### 总结 综上所述,虽然二者都能完成一定的布局工作,但由于设计理念的不同决定了它们各自最佳的应用场合。简单来说,如果是针对单一维度内的对象安排考虑选用 Flexbox ,而对于涉及多个纵横交错部分的情况推荐运用 Grid 技术[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值