一文搞懂flex布局

上学读书的时候,学习flex布局,更多停留在理论知识层面。近来,经过工作实践,发现自己对flex布局的理解更加深入,运用起来更加熟练,也越发能感受到flex布局的强大灵活性,特来总结一波。若有错误之处,欢迎指出!

知识导图

在这里插入图片描述

基本概念

(1)容器

设置样式属性display:flex的那个父元素

(2)项目

容器内的直接子元素(第一层级)

比如:类名为father的那个元素是容器,类名为son的两个元素是项目。

<div class="father">
  <div class="son">
    1
  </div>
  <div class="son">
    2
  </div>
</div>
.father{
   display:flex;
}

(3)主轴、交叉轴

在这里插入图片描述

(4)方向

在这里插入图片描述

容器属性

(1)flex-direction

定义主轴方向。

row  //水平(默认)
column  //(垂直)
row-reverse //水平反向
column-reverse  //垂直反向

在这里插入图片描述

(2)justify-content

定义主轴方向上的子元素对齐方式。

flex-start  // 主轴前对齐(默认)
flex-end  // 主轴后对齐
center  // 主轴居中
space-between // 等距,首尾(项目之间间隔相等)
space-around  // 等距,两边(项目两侧的间隔相等)
space-evenly  //等距,容器

在这里插入图片描述

(3)align-items(单行)

定义交叉轴方向上的子元素对齐方式。

flex-start  // 交叉轴前对齐(默认)
flex-end  // 交叉轴后对齐
center  // 交叉轴居中
baseline // 文字基线
stretch  // 拉伸

在这里插入图片描述
注意:
主轴方向设为flex-direction: row;(默认), 此时,要使交叉轴属性align-content:stretch生效,需要去掉子项的高度。

(4)flex-wrap

超出容器轴线长度是否换行。

wrap // 换行
nowrap // 不换行 (当子元素宽度之和超出父元素宽度时,会自动缩小子元素宽度)
wrap-reverse  // 行序反向

在这里插入图片描述

(5)align-content(多行)

定义元素在交叉轴上的对齐方式(只在多行项目的情况下有效,即容器父元素设置属性:flex-wrap:wrap)

flex-start
flex-end
center
stretch
space-between
space-around

在这里插入图片描述
注意:
主轴方向设为flex-direction: row;(默认), 此时,要使交叉轴属性align-content:stretch生效,需要去掉子项的高度。

项目属性

flex

三个属性(flex-grow、flex-shrink、flex-basis)的简写。
默认值:

item {
  flex:0 1 auto;
}

flex-grow:按容器剩余空间的比例放大元素填充容器。
flex-shrink:按被挤压空间的比例缩小元素。(可选)
flex-basis:元素初始大小,默认auto。(可选)

PS:关于这三个属性的具体细节含义,这里暂且不表(个人感觉有点复杂),我一般就写的简写形式,属性值直接设为数值。

经典布局

(1)等分布局(百分比布局)

在这里插入图片描述

<div class="father">
    <div class="box">
        1
    </div>
    <div class="box">
        2
    </div>
    <div class="box">
        3
    </div>
</div>
.father {
  display: flex;
  gap: 10px;
  div[class^="box"]{
    flex:1;
  }
}

分析:子元素设置flex属性值为1后,三个子元素会平分父盒子的宽度。

(2)元素水平垂直居中对齐

在这里插入图片描述

<div class="father">
  <div class="box">
    我是内容!
  </div>
</div>
.father {
  display: flex;
  height: 200px;
  justify-content: center;
  align-items: center;
}

(3)某一/多个盒子固定,其它盒子自适应

如:
①在做页面的宽度自适应时,可能出现的布局:左右固定宽度,中间宽度自适应
②在做页面的高度自适应时,可能出现的布局:上方固定高度,下方高度自适应
技巧:固定宽/高度的盒子设置固定固定宽/高,可以设置具体的像素或相对于父盒子的百分比,自适应的那个子盒子设置flex属性即可。

理论知识详细可参考之前的链接:

  1. flex布局的常见属性
  2. flex布局典型案例
CSS flex布局中,要实现最后一行元素左对齐,可以采用多种方法来调整布局。首先,要理解`flex-wrap`和`justify-content`属性是控制flex容器内元素排列的关键。默认情况下,`flex-wrap: nowrap;`会导致所有元素在同一行内展示,直到容器宽度不足以容纳下一个元素,而`justify-content: space-between;`则会在元素间均匀分配空间,但在最后一行可能导致元素不整齐。 参考资源链接:[CSS flex布局:实现列表最后一行左对齐的多种技巧总结](https://wenku.youkuaiyun.com/doc/2epw1yiijp?spm=1055.2569.3001.10343) 要解决这个问题,推荐的方法是: 1. **利用CSS选择器调整最后一行元素的margin** 当确定了flex容器中子元素的数量和最后一行应有的元素数量后,可以通过CSS选择器为特定元素设置margin,从而调整最后一行的对齐方式。例如,如果最后一行应该有3个元素,可以设置: ```css .container > .list:nth-last-child(-n+3) { margin-right: 0; /* 移除最后一个元素的右边距 */ } ``` ```css .container > .list:nth-last-child(2) { margin-right: auto; /* 自动调整第二个元素的右边距以对齐 */ } ``` 这样做的目的是通过调整最后一行元素的右边距,使得最后一行元素能够左对齐。 2. **使用calc()函数精确控制间距** 如果需要更精细的控制,可以使用`calc()`函数来动态计算最后一个元素右边距的值,使其根据实际容器宽度和元素数量来调整: ```css .container > .list:last-child { margin-right: calc((100% - 3 * 24%) / 2); /* 根据容器宽度和元素数量动态调整右边距 */ } ``` 以上代码假设每个元素宽度固定为24%,容器宽度为100%。 通过这些方法,可以灵活调整flex容器中元素的布局,即使在动态变化的环境中也能保持最后一行元素的左对齐,同时保持其他行元素间空间均匀分配。 推荐继续阅读《CSS flex布局:实现列表最后一行左对齐的多种技巧总结》一文,该文提供了更详细的技术实现和场景应用,将有助于你更深入地理解CSS flex布局,并在实际项目中灵活运用。 参考资源链接:[CSS flex布局:实现列表最后一行左对齐的多种技巧总结](https://wenku.youkuaiyun.com/doc/2epw1yiijp?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值