IP地址检测
视频播放器
输入关键词搜索
登录
css之flex布局

css之flex布局

2023-03-07
编程开发

主轴和交叉轴

主轴由flex-direction定义,可以取 4 个值:

  1. row
  2. row-reverse
  3. column
  4. column-reverse

交叉轴垂直于主轴

如果flex-direction (主轴) 设成了 row 或者 row-reverse 的话,交叉轴的方向就是沿着列向下的

理解主轴和交叉轴的概念对于对齐 flexbox 里面的元素是很重要的;flexbox 的特性是沿着主轴或者交叉轴对齐之中的元素

起始线和终止线

如果 flex-direction 是 row ,并且我是在书写英文,那么主轴的起始线是左边,终止线是右边。 用起始和终止来描述比左右更合适,这会对你理解其他相同模式的布局方法(例如:CSS Grid Layout)起到帮助的作用

Flex容器的默认属性

把容器的display属性值改为flex或者inline-flex,就可以创建一个flex容器。容器中的直系子元素就会变为flex元素 所有 CSS 属性都会有一个初始值,所以 flex 容器中的所有 flex 元素都会有下列行为

  • flex-direction:row 主轴为row,即子元素横向排列
  • align-items:stretch 子元素在交叉轴方向被拉伸
  • flex:0 1 auto 子元素在主轴方向上不能拉伸,只能缩放,大小自适应
  • flex-wrap:nowrap 超出部分不会换行

Flex子元素的属性(作用在主轴上)

需要先了解一下「可用空间(available space)」这个概念,这几个flex属性的作用其实就是改变了容器中的可用空间的行为。换句话说,就是如何分配容器在主轴方向或者交叉轴方向上的可用空间

  • flex-grow 沿主轴方向增长尺寸,用数字代表权重。如果有其他元素也被允许延展,那么他们会根据权重大小各自占据可用空间的一部分
  • flex-shrink 如果容器中没有足够空间进行排列,就缩放它所占的空间,用数字代表权重
  • flex-basis 定义了元素在主轴方向上的尺寸
    指定了 flex 元素在主轴方向上的初始大小
    • auto 自适应:元素的主轴尺寸可在主轴方向弹性伸缩
    • 100px 固定:100px
    • 0 固定:元素的最小尺寸
    当一个元素同时被设置了flex-basis(除值为auto外)和width(主轴是row)或height(主轴是column),flex-basis具有更高的优先级

简写形式一

你可能很少看到 flex-grow,flex-shrink,和 flex-basis 属性单独使用,而是混合着写在 flex 简写形式中。 Flex 简写形式允许你把三个数值按这个顺序书写 — flex-grow,flex-shrink,flex-basis

.box {
  display: flex;
}

.one {
  flex: 1 1 auto;
}

.two {
  flex: 1 1 auto;
}

.three {
  flex: 1 1 auto;
}
  • 第一个数值是 flex-grow。赋值为正数的话是让元素增加所占空间。数字代表权重,可以看到上面的三个元素,flex-grow都是1,意味着权重相同。它们会把父元素主轴剩余空间平均分
  • 第二个数值是flex-shrink — 正数可以让它缩小所占空间,但是只有在 flex 元素总和超出主轴才会生效。数字代表权重
  • 最后一个数值是 flex-basis;flex 元素是在这个基准值的基础上缩放的。auto代表元素的大小不是固定的

简写形式二

  • flex: initial flex: initial 相当于 flex: 0 1 auto (不能拉伸,收缩权重为1。整体的意思就是:主轴方向,元素尺寸可以缩放,并依次排列)
  • flex: auto 等同于 flex: 1 1 auto (可以拉伸,权重是1,可以收缩,权重是1。加上auto,整体的意思就是:主轴方向,元素可自由收缩,尽可能填满空间)
  • flex: none 和 flex: 0 0 auto 是一样的。元素既不能拉伸或者收缩
  • flex: 你在教程中常看到的 flex: 1 或者 flex: 2 等等。它相当于flex: 1 1 0 或者 flex: 2 1 0。元素可以在 flex-basis 为 0 的基础上伸缩。

疑问?

  1. flex: 1 1 0
  2. flex: 1 1 100px
  3. flex: 1 1 auto 它们三者之间的最大区别

这三个属性的最大区别在于它们的初始尺寸和调整方式。 flex: 1 1 0 和 flex: 1 1 100px 的初始尺寸都是固定的,而 flex: 1 1 auto 的初始尺寸则是根据内容自动计算的。 在调整方式上,flex: 1 1 0 和 flex: 1 1 100px 会收缩到固定的最小尺寸,而 flex: 1 1 auto 则会根据内容自动调整尺寸。

Flex容器的属性

Flexbox 的一个关键特性是能够设置 flex 元素沿主轴方向和交叉轴方向的对齐方式,以及它们之间的空间分配

align-items (子元素在交叉轴方向上的排列方式)

  • 默认值stretch(拉伸) 这就是为什么刚开始flex元素的高度会被拉伸到flex容器的高度,因为默认情况下,height属于交叉轴
  • flex-start 与flex容器的交叉轴起始线对齐
  • flex-end 与flex容器的交叉轴终止线对齐
  • center 在flex容器的交叉轴居中位置

justify-content (子元素在主轴方向上的排列方式)

  • stretch(在主轴方向上,对子元素进行拉伸)

示例中没有看到拉伸效果,是因为button元素默认的属性是flex:0 1 auto。该属性代表元素只能缩放,不能拉伸。改成flex:1 1 auto就可以了
  • flex-start
  • flex-end
  • center
  • space-around
  • space-between

开发过程中的经验总结

  1. flex容器的子元素设置flex:1可以填充剩下的部分,而不是设置width:100%
THE END
0/500
暂无评论
📢网站公告
欢迎来到这里
⚙️实用工具
html转pdfmarkdown编辑器
本站推荐:腾讯云服务器仅需2.3折 (点击直达)
用户协议
隐私政策
Build Time: 2025-04-26 11:07:00