Flex布局

前言: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。

  • 被设置为dlex的容器,其里面的流元素也可以设置宽高
  • 被设置为dlex的容器,其里面的元素也成为项目

1、父容器的属性

以下6个属性设置在容器上。

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

1.1、设置主轴方向(默认为x轴)

flex-dicrection 4个值

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。
row

在这里插入图片描述

row-reverse

在这里插入图片描述

column

在这里插入图片描述

column-reverse

在这里插入图片描述

1.2、设置是否换行显示

flex-wrap 3个值

  • nowrap(默认值):不换行
  • wrap:换行,第一行在上方。
  • wrap-reverse:换行,第一行在下方。
nowrap

全部显示在一行内,如果宽度超出,则平均减少前面元素的宽度,把新元素挤进去

在这里插入图片描述

wrap

如果内容挤不下就自动换行

在这里插入图片描述

wrap-reverse

在这里插入图片描述

1.3、主轴方向&是否换行简写

flex-flow 这里随便列举一个

column wrap

在这里插入图片描述

1.4、主轴上的对齐方式与分布方式

justify-content 5个值

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
flex-start

在这里插入图片描述

flex-end

在这里插入图片描述

center

在这里插入图片描述

space-between

在这里插入图片描述

space-around

在这里插入图片描述

1.5、副轴上的对齐方式

align-items 5个值

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
flex-start

在这里插入图片描述

flex-end

在这里插入图片描述

center

在这里插入图片描述

baseline

在这里插入图片描述

stretch

必须项目未设置高度或为aotu才有用

在这里插入图片描述

1.6、副轴上的分布方式(包含对齐方式)

align-content 6个值 四个内容和上面属性一致就不展示了

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。
space-between(多行内容才有效果)

在这里插入图片描述

space-around(多行内容才有效果)

在这里插入图片描述

1.7、设置项目间距

  • row-gap:行与行之间的间距
  • column-gap:列与列之间间距
  • gap:上面两个写法的简写,第一个值为行间距,第二个值为列间距

注意:

  • 如果设置了aline-items/justify-content的值,那么当行间距或列间距小于他们这个属性里面的默认间距,则间距值无效。大于则取值大的
  • 比如:编写了justify-content:space-bewtten,那么元素中间便会自动生成间距。如果下面再编写column-gap的值,那么值比上面自动生成的间距小的话,不生效
/* 行 列 间距 */
/* row-gap: 10px;
column-gap: 20px; */
/* 上面简写 */
gap: 20px 20px;

在这里插入图片描述

2、子容器(项目)的属性

2.1、定义项目的排列顺序

order 值为Integer类型 数值越小,排列越靠前,默认为0。

/* 选中第二个span元素 */
span:nth-child(2){
    order: -1;
}

在这里插入图片描述

2.2、定义项目的放大比例

flex-grow 默认为0,即如果存在剩余空间,也不放大

​ 如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

所有项目都为1份

在这里插入图片描述

第二个项目为2份

在这里插入图片描述

2.3、定义了项目的缩小比例

flex-shrink 默认为1,即如果空间不足,该项目将缩小

​ 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

第二个span元素不缩小

在这里插入图片描述

2.4、定义了在分配多余空间之前,项目占据的主轴空间

flex-basis 默认为auto,浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

  1. 首先需要把副属性设为justify-content: space-between;,span元素设置为width: 50px;

    在这里插入图片描述

  2. 设置第二个项目占据150px

    在这里插入图片描述

2.5、上面三个简写

flex 是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

​ 该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

1 1 auto

在这里插入图片描述

0 0 auto

在这里插入图片描述

2.6、允许单个项目有与其他项目不一样的对齐方式

align-self

​ 可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

单独为第二个span设置为flex-end

在这里插入图片描述

3、flex/margin

  • 尽管flex布局,有很多控制主轴justify-content方向的属性供我们使用
  • 但是没有单独控制项目在主轴方向(控制副轴可以使用align-self属性)
  • 这时候我们搭配margin属性使用即可

如下案例,有四个盒子(父元素为flex布局),justify-content: space-between;两边对其。

需求:第三个盒子也靠边对其,第二个盒子在剩余空间的中间

3.1代码

<template>
  <div class="wrapper">
    <div class="item">item-1</div>
    <div class="item">item-2</div>
    <div class="item">item-3</div>
    <div class="item">item-4</div>
  </div>
</template>

<style lang="scss" scoped>
  @use "sass:math";
  .wrapper {
    width: 80vw;
    height: 20vh;
    display: flex;
    border: 1px solid red;
    justify-content: space-between;
    .item{
      width: 50px;
      @for $i from 1 through 4{
        &:nth-child(#{$i}){
          background-color: rgb(math.random(255), math.random(255), math.random(255));
        }
      }
      /* 需要把第二个盒子单独再设置为剩余宽度的中间 */
      &:nth-child(2){
        margin-left: auto;
      }
      /* 只写这句话会导致第二个盒子贴向左边,第三个盒子贴向右边 */
      &:nth-child(3){
        margin-left: auto;
      }
    }

  }
</style>

3.2、效果

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Flex布局(也称为弹性布局)是种主流的CSS布局方式,它可以方便地实现页面元素的自适应和排列。Flex布局通过定义容器和子元素的属性来实现灵活的布局效果。 在Flex布局中,有两个重要的概念:容器和子元素。容器是指应用Flex布局的父元素,而子元素则是容器内部的直接子元素。 以下是Flex布局的一些主要特点和属性: 1. 容器属性: - display: flex;:将容器设置为Flex布局。 - flex-direction:指定主轴的方向,可以是row(水平方向)、column(垂直方向)、row-reverse(水平反向)或column-reverse(垂直反向)。 - justify-content:定义了子元素在主轴上的对齐方式,可以是flex-start(起始对齐)、flex-end(末尾对齐)、center(居中对齐)、space-between(两端对齐,项目之间间隔相等)或space-around(每个项目两侧的间隔相等)。 - align-items:定义了子元素在交叉轴上的对齐方式,可以是flex-start(起始对齐)、flex-end(末尾对齐)、center(居中对齐)、baseline(基线对齐)或stretch(拉伸对齐)。 - flex-wrap:定义了子元素是否换行,可以是nowrap(不换行)、wrap(换行)或wrap-reverse(反向换行)。 2. 子元素属性: - flex:指定子元素的伸缩比例,用于控制子元素在容器中的占比。 - align-self:定义了单个子元素在交叉轴上的对齐方式,可以覆盖容器的align-items属性。 以上是Flex布局的一些基本概念和属性,通过灵活地使用这些属性,可以实现各种不同的布局效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值