Flex容器入门

Flex容器是采用Flexbox布局的父元素,它控制其子元素的排列和对齐方式。

基本概念

Flexbox,全称 Flexible Box 布局模型,是一种用于一维布局的 CSS 技术。它允许开发者在容器内灵活地分配空间给子元素,并轻松地对齐这些元素。

常见的应用场景

应用场景描述
响应式布局Flexbox 可以创建灵活的布局,使得网页能够适应不同屏幕尺寸和分辨率。
导航栏使用 Flexbox 可以轻松地创建水平导航栏,并且能够对齐和分配空间给导航项。
卡片布局卡片视图通常需要等高或等宽的布局,Flexbox 可以轻松实现这种效果。
网格布局虽然 CSS Grid 布局更适合二维布局,但 Flexbox 仍然可以用来创建简单的网格布局。
动态内容区域对于内容大小不固定的元素,Flexbox 可以自动调整它们的大小以适应可用空间。
对齐元素Flexbox 提供了多种对齐方式,可以轻松地在容器内对齐文本、图片或其他元素。
多列布局虽然传统的多列布局使用 column-count 属性,但 Flexbox 也可以用于创建多列布局。
订单和排序Flexbox 允许开发者动态地改变元素顺序,而不需要更改 HTML 结构。
自适应布局Flexbox 可以根据浏览器窗口大小的变化自动调整布局,实现真正的自适应设计。
溢出隐藏当内容超出容器大小时,Flexbox 可以轻松实现内容的溢出隐藏。
空间分布Flexbox 可以均匀地在元素之间分配空间,或者将空间集中在特定元素。
复杂布局对于更复杂的布局,如聊天应用的对话列表、仪表板等,Flexbox 提供了一种相对简单的解决方案。
交互式界面在需要动态调整布局的交互式界面中,Flexbox 可以响应用户操作,如调整大小、切换标签页等。

Flex容器属性

justify-content

用于水平分配项目之间和项目周围的空间。

属性值/描述代码示例效果
center
居中对齐
.container { 
  display: flex; 
  justify-content: center; 
  ... 
} 
.block { 
  width: 50px; 
  height: 50px; 
  background-color: black; 
}
center
flex-start(默认)
默认值,左对齐
.container { 
  display: flex; 
  justify-content: flex-start; 
  ... 
}
flex-start
flex-end
右对齐
.container { 
  display: flex; 
  justify-content: flex-end; 
  ... 
}
flex-end
space-between
两端对齐
.container { 
  display: flex; 
  justify-content: space-between; 
  ... 
}
space-between
space-around
项目之间的间隔是项目与Flex容器边缘间隔的两倍
.container { 
  display: flex; 
  justify-content: space-around; 
  ... 
}
space-around
space-evenly
项目之间的间隔与Flex容器边缘的间隔相等
.container { 
  display: flex; 
  justify-content: space-evenly; 
  ... 
}
space-evenly

align-items

用于垂直分配项目之间和项目周围的空间。

  • 如果容器是水平的(主轴为行),则align-items 将影响子元素的垂直对齐方式;
  • 如果容器是垂直的(主轴为列),则 align-items 将影响子元素的水平对齐方式;
  • flex-direction影响容器是水平还是垂直。
属性值/描述代码示例效果
center
居中对齐
.container { 
  display: flex; 
  align-items: center; 
  ... 
} 
.block { 
  width: 50px; 
  height: 50px; 
  background-color: black; 
}
center
flex-start
容器头部对齐
.container { 
  display: flex; 
  align-items: flex-start; 
  ... 
}
flex-start
flex-end
容器尾部对齐
.container { 
  display: flex; 
  align-items: flex-end; 
  ... 
}
flex-end
baseline
基线对齐
.container { 
  display: flex; 
  align-items: baseline; 
  ... 
} 
.block1 { 
  width: 50px; 
  height: 80px; 
  background-color: black; 
} 
.block2 { 
  width: 50px; 
  height: 50px; 
  background-color: white; 
}
baseline
stretch
在未设置高度情况下,将占满容器的高度
.container { 
  display: flex; 
  align-items: stretch; 
  ... 
} 
.block1 { 
  width: 50px; 
  background-color: black; 
} 
.block2 { 
  width: 50px; 
  background-color: white; 
}
stretch

flex-direction

用于指定项目的方向,并且会影响容器是水平还是垂直方向(会影响align-items的使用)

属性值/描述代码示例效果
row(默认)
容器为水平方向,从左到右
.container { 
  display: flex; 
  flex-direction: row; 
  ... 
} 
.block { 
  ... 
}
row
row-reverse
容器为水平方向,从右到左
.container { 
  display: flex; 
  flex-direction: row-reverse; 
  ... 
} 
...
row-reverse
column
容器为垂直方向,从上到下
.container { 
  display: flex; 
  flex-direction: column; 
  ... 
} 
...
column
column-reverse
容器为垂直方向,从下到上
.container { 
  display: flex; 
  flex-direction: column-reverse; 
  ... 
} 
...
column-reverse

order

用于指定项目相对于同一容器内其余项目的顺序。

<view class="container">     
  <view class="block1">1</view>     
  <view class="block2">2</view>     
  <view class="block3">3</view> 
</view>
CSS效果
.container { 
  display: flex; 
  ... 
} 
.block1 { 
  order: 3; 
  ... 
} 
.block2 { 
  order: 1; 
  ... 
} 
.block3 { 
  order: 2; 
  ... 
}
Flex Order Example

align-self

用于单独指定某一项目为其他项目不一样的对齐方式。(项目属性可以覆盖父容器设置的 align-items 属性)

属性值/描述代码示例效果
center
居中对齐
.container { 
  display: flex; 
  align-items: flex-start; 
  ... 
} 
.block1 { 
  align-self: center; 
  ... 
} 
.block2 { 
  ... 
}
center
flex-start
容器头部对齐
.container { 
  display: flex; 
  align-items: center; 
  ... 
} 
.block1 { 
  align-self: flex-start; 
  ... 
} 
.block2 { 
  ... 
}
flex-start
flex-end
容器尾部对齐
.container { 
  display: flex; 
  align-items: center; 
  ... 
} 
.block1 { 
  align-self: flex-end; 
  ... 
} 
.block2 { 
  ... 
}
flex-end
stretch
在未设置高度情况下,将占满容器的高度
.container { 
  display: flex; 
  align-items: center; 
  ... 
} 
.block1 { 
  align-self: stretch; 
  width: 50px; 
  ... 
} 
.block2 { 
  width: 50px; 
  height: 50px; 
  ... 
}
stretch

flex-wrap

用于指定当项目在容器中一行无法显示的时候如何处理。

属性值/描述代码示例效果
nowrap(默认)
不换行
.container { 
  display: flex; 
  flex-wrap: nowrap; 
  ... 
} 
.block { 
  ... 
}
nowrap
wrap
正常换行,第一个位于第一行的第一个
.container { 
  display: flex; 
  flex-wrap: wrap; 
  ... 
} 
...
wrap
wrap-reverse
反向换行
.container { 
  display: flex; 
  flex-wrap: wrap-reverse; 
  ... 
} 
...
wrap-reverse

align-content

注意与align-items不同,align-content影响的是行与行之间的间隔。

align-items与align-content的区别
  • 作用对象align-items 对单个子元素起作用,align-content 对行(子元素组)起作用。
  • 使用场景align-items 用于单行或单列布局,align-content 用于多行布局。
  • 对齐方式:两者都可以使用 flex-startflex-endcenter 等值,但 align-content 还支持 space-betweenspace-around 等值,用于控制行与行之间的间距。
属性值/描述代码示例效果
center
居中对齐
.container { 
  display: flex; 
  flex-wrap: wrap; 
  align-content: center; 
  ... 
} 
.block { 
  ... 
}
center
flex-start(默认)
默认值,左对齐
.container { 
  display: flex; 
  flex-wrap: wrap; 
  align-content: flex-start; 
  ... 
} 
...
flex-start
flex-end
右对齐
.container { 
  display: flex; 
  flex-wrap: wrap; 
  align-content: flex-end; 
  ... 
} 
...
flex-end
space-between
两端对齐
.container { 
  display: flex; 
  flex-wrap: wrap; 
  align-content: space-between; 
  ... 
} 
...
space-between
space-around
项目之间的间隔是项目与Flex容器边缘间隔的两倍
.container { 
  display: flex; 
  flex-wrap: wrap; 
  align-content: space-around; 
  ... 
} 
...
space-around

混合使用案例

核心样式效果
justify-content: center;
align-items: center;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
align-items: center;
flex-direction: row-reverse;
flex-direction: column-reverse;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
justify-content: center;
align-content: flex-end;
justify-content: space-around;
flex-direction:column-reverse;
align-items: flex-end;
justify-content: center;
flex-direction: column-reverse;
flex-wrap: wrap-reverse;
align-content: center;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值