首页 前端知识 Html Css 核心知识 - flex (超详细)

Html Css 核心知识 - flex (超详细)

2024-05-29 10:05:56 前端知识 前端哥 937 195 我要收藏

一、定义

        Flex布局是一种用于创建灵活、自适应网页布局的CSS布局模型。它提供了一种简单而强大的方式来对齐和分布元素,特别适用于构建响应式和移动端友好的布局。

二、核心思想

        Flex布局的核心思想是将容器内的子元素看作一个弹性盒子,通过设置容器的属性来控制盒子的对齐和排列方式。Flex布局中包含两个概念,即Flex容器和Flex项目。

        Flex 容器:应用Flex布局的父元素,通过设置Flex属性来控制子元素的排列方式。Flex容器有一个主轴和一个交叉轴,主轴是子元素排列的方向,交叉轴则与主轴垂直

        Flex项目Flex容器内部的子元素,通过设置item属性来调整自身在容器内的布局行为,包括伸缩比例、对齐方式等。

三、特点

        1、 灵活活的盒子模型:弹性盒模型中的元素可以自适应容器的大小,并根据自身的属性进行伸缩,从而实现不同场景下的布局需求。

        2、 方便的对齐和分布:可以通过设置容器的属性,快速地实现子元素的对齐和分布,包括居中、两端对齐、垂直居中等。

四、flex 元素

1、思维导图

2、作用在 flex 容器上的元素

1> 开启 flex 布局 display: flex; (默认开启主轴排序-由左向右)

代码初始演示后续根据需求需要做出相应改动

<div class="father">
    <div class="son">son1</div>
    <div class="son">son2</div>
    <div class="son">son3</div>
    <div class="son">son4</div>
</div>
<style>
.father {
  height: 420px;
  width: 420px;
  padding: 10px;
  margin: 100px auto;
  border: 1px red solid;
  box-sizing: border-box;
  /* display: flex; */
  /* flex-direction: row; 默认开启了主轴排序(由左向右)*/
}
.son {
  height: 100px;
  width: 100px;
  margin-right: 50px;
  margin-bottom: 50px;
  color: white;
  text-align: center;
  font-size: 30px;
  line-height: 100px;
}
.son:nth-child(1) {
  background-color: olivedrab;
}
.son:nth-child(2) {
  background-color: red;
}
.son:nth-child(3) {
  background-color: orange;
  margin-bottom: 0px;
  margin-right: 0px;
}
</style>

未开启 flex 布局

开启 flex 布局后(取消display: flex; 这行的注释

2> 控制容器(父元素)内项目(子元素)的排列方向和换行方式

a. 排列方向 flex-direction: '方向值' ;

方向值可取以下四个值

flex-direction: row; (默认值 主轴排序-由左向右)
flex-direction: row-reverse; (修改主轴方向取反 -  由右向左)

flex-direction: column; (修改主轴为交叉轴 - 即为现在主轴为 'y'轴 - 由上到下)

flex-direction: column-reverse; (修改主轴为交叉轴并方向取反 - 即为现在主轴为 'y'轴 - 由下到上)

b. 换行方式 flex-wrap: '换行值' ;

换行值可取以下三个值

flex-wrap: no-wrap(默认值 - 不允许换行-大小不够时盒子会自动伸缩); 

flex-wrap: wrap(允许换行 - 位置不够时会换到下一行); 

flex-wrap: no-reverse(允许换行且子元素由后向前排列); 

c.flex-wrap: 'flex-direction的值','flex-wrap的值'

3> 控制容器(父元素)内项目(子元素)的对齐方式

a.主轴对齐方式 justify-content: '对齐方式';

对齐方式可以去以下六个值

justify-content: flex-start;(默认值-子元素在主轴起始位置对齐);

justify-content: flex-end;(子元素在主轴末尾位置对齐);

 justify-content: center;(子元素在主轴居中对齐);

  justify-content: space-between;(子元素平均分别在主轴、且首元素和尾元素分别位置主轴首尾位置);

  justify-content: space-around;(子元素平均分别在主轴、每个子元素两侧都有相同的空间-比如说son1距离主轴起始位置为50px那么距离son2就是100px);

   justify-content: space-between;(子元素平均分别在主轴、每个子元素与主轴起始位置和其他子元素留有相等来评价-比如说son1距离主轴起始位置为50px那么距离son2也是50px);

b.交叉轴对齐方式(单行 ) align-items: '对齐方式'; 

对齐方式可以取以下五个值

align-items: stretch;(默认值-子元素在交叉轴拉伸充满整个容器(演示图是没设置高度情况下 - 设置了高度不会拉伸且位于交叉轴起始位置))

 align-items: flex-start;(子元素在交叉轴起始位置对齐)

  align-items: flex-end;(子元素在交叉轴末尾位置对齐)

 align-items: center;(子元素在交叉轴居中对齐)

 align-items: baseline;(子元素在按照基线对齐-字符的底部或顶部将与其他行内文本元素的基线对齐)

b.交叉轴对齐方式(多行 ) align-content: '对齐方式'; 

对齐方式可以取以下五个值

 align-content: stretch;(默认值-子元素在交叉轴拉伸充满整个容器(演示图是没设置高度情况下 - 设置了高度不会拉伸且位于交叉轴起始位置))

 align-content: flex-start;(子元素在交叉轴起始位置对齐)

  align-content: flex-end;(子元素在交叉轴末尾位置对齐)

 align-items: center;(子元素在交叉轴居中对齐)

 align-content:space-between;(子元素在按照交叉轴对齐-首行元素位于交叉轴起始位置、尾行元素位于交叉轴末尾位置)

  align-content:space-around;(子元素在按照交叉轴对齐-每行元素两侧都有相同的空间-比如说第一行距离交叉轴轴起始位置为50px那么距离第二行就是100px)

3、作用在 flex 项目上(子元素)的元素

1> 控制子元素分配空间

a.flex-grow: '值'(分配子元素剩余空间时的放大比例,默认为0)

值可取为 整数、小数、百分比

.son:nth-child(1) {
  background-color: olivedrab;
  flex-grow: 0;
}
.son:nth-child(2) {
  background-color: red;
  flex-grow: 1;
}
.son:nth-child(3) {
  flex-grow: 10;
  background-color: orange;
  margin-bottom: 0px;
  margin-right: 0px;
}

a.flex-grow: '值'(分配子元素剩余空间时的缩小比例,默认为0)

值可取为 整数、小数、百分比

.son:nth-child(1) {
  background-color: olivedrab;
  flex-shrink: 0;
}
.son:nth-child(2) {
  background-color: red;
  flex-shrink: 5;
}
.son:nth-child(3) {
  background-color: orange;
  flex-shrink: 10;
  margin-bottom: 0px;
  margin-right: 0px;
}

c.flex-basic: '值'(分配子元素剩余空间前的初始大小)

值可取为 像素值、百分比

d.flex: 'flex-grow' 'flex-shrink' 'flex-basic'(整合这三个值)

值可取为 像素值、百分比

2> 控制子元素排列顺序

order: '值'(默认为0)
.son:nth-child(1) {
  background-color: olivedrab;
  order: 2;
}
.son:nth-child(2) {
  background-color: red;
  order: 3;
}
.son:nth-child(3) {
  background-color: orange;
  order: 1;
  margin-bottom: 0px;
  margin-right: 0px;
}

3> 控制子元素对齐方式 align-self:'对齐值'( 控制单个子元素位于交叉轴对齐方式)

可以取以下六个值

align-self: auto; (默认值) 继承父元素align-item的值

align-self: flex-start; 位于交叉轴起始位置

align-self: flex-end; 位于交叉轴末尾位置

align-self: center; 位于交叉轴中间位置

align-self: baseline; 位于基线位置

align-self: stretch; 子元素被拉伸适应容器

.son:nth-child(1) {
  background-color: olivedrab;
  align-self: flex-start;
}
.son:nth-child(2) {
  background-color: red;
  align-self: center;
}
.son:nth-child(3) {
  background-color: orange;
  margin-bottom: 0px;
  margin-right: 0px;
  align-self: flex-end;
}
.son:

后续持续更新中...有帮助的话点个赞吧谢谢!

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9896.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!