flex布局

传统布局与flex布局

传统布局

  1. 兼容性好
  2. 布局繁琐
  3. 有局限性、不能再移动端很好的布局

flex弹性布局

  1. 操作方便、布局极为简单、移动端应用很广泛
  2. PC端浏览器支持情况较差
  3. IE 11 或更低版本,不支持或仅部分支持

建议:

  1. 如果是PC端页面布局,我们还是传统布局
  2. 如果是移动端或者不考虑兼容性问题的PC端页面布局,我们还是flex弹性布局

布局原理

flex是flexible Box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局

  1. 当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效。
  2. 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局

采用flex布局的元素,成为Flex容器,简称“容器”,它的所有子元素自动成为容器成员,成为Flex项目,简称“项目”。

总结flex布局原理: 就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式

div{
/* Webkit 内核的浏览器,必须加上-webkit前缀。 */
display: -webkit-flex;
display: flex;
}

flex布局父项常见属性

常见父项属性

以下由6个属性是对父元素设置的

属性值说明
flex-direction设置主轴的方向
justify-content设置主轴上的子元素的排列方式
flex-wrap设置子元素是否换行
align-content设置侧轴上子元素的排列方式(多行)
align-items设置侧轴上子元素的排列方式(单行)
flex-flow复合属性,相当于同时设置了flex-direction和flex-wrap

flex-direction

flex-direction设置主轴的方向(即项目的排列方向)
在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列,x轴和y轴

默认主轴方向就是x轴方向,水平向右
默认侧轴方向就是y轴方向,水平向下

注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴,而我们的子元素是跟着主轴来排列的

属性值

属性值说明
row默认值从左到右
row-reverse从右到左
column从上到下
column-reverse从下到上
 <style>
    div{
      /* 給父级添加flex属性 */
      display: flex;
      width: 800px;
      height: 300px;
      background-color: pink;
      /* 默认的主轴是 x 轴, 即 行 row 那么y 轴就是侧轴了 */
      /* 我们的元素是跟着主轴来排列的 */
      /* flex-direction: row; 可写可不写 */
      flex-direction: row; 
      /* 翻转 */
      /* flex-direction:row-reverse; */
      /* 我们可以把我们的主轴设置为y轴,那么x轴就成了侧轴 */
      /* flex-direction: column; */
    }
    div span{
      width: 150px;
      height: 100px;
      background-color: purple;
    }
  </style>
</head>
<body>
  <div>
    <span>1</span>
    <span>2</span>
    <span>3</span>
  </div>
</body>

在这里插入图片描述

justify-content

justify-content设置主轴上子元素的排列方式

注意:使用这个属性之前一定要确定好主轴是哪个

属性值说明
flex-start默认值从头开始,如果主轴是x轴,则从左到右
flex-end从尾部开始排列
center在主轴居中对齐(如果主轴是x轴,则水平居中)
space-around每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
space-between先两边贴边,再平分剩余空间(两端对齐,项目之间的间隔都相等)

从头部开始排列

  justify-content: flex-start ;

在这里插入图片描述

让我们的子元素居中对齐

 justify-content: center; 

在这里插入图片描述

平均分配剩余空间

  justify-content: space-around

在这里插入图片描述

先两边贴边,再平均分配剩余空间
justify-content: space-between
在这里插入图片描述

flex-wrap

flex-wrap 设置子元素是否换行
默认情况下,项目都排在一条线(右称“轴线”)上。flex-wrap属性定义,flex布局中默认是不换行的。

属性值说明
nowrap默认值,不换行
wrap换行(第一行在上方)
wrap-reverse换行(第一行在下方)

在这里插入图片描述
wrap
在这里插入图片描述
wrap-reverse
在这里插入图片描述

align-items

align-items设置侧轴上子元素的排列方式(单行)

该属性是控制子项在侧轴(默认是y轴)上的排列方式,在子项为单项的时候使用

属性值说明
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
stretch拉伸(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度
baseline项目的第一行文字的基线对齐
 div{
      display: flex;
      width: 600px;
      height: 400px;
      background-color: pink;
      align-items: flex-start;
    }

    div span{
      background-color: purple;
      color: #fff;
      margin: 10px;
    }

    div span:nth-child(1){
      width: 150px;
      height: 100px;
      font-size: 15px;
    }
    div span:nth-child(2){
      width: 200px;
      height: 200px;
      font-size: 20px;
    }
    div span:nth-child(3){
      width: 250px;
      height: 250px;
      font-size: 25px;
    }
  </style>
</head>
<body>
  <div>
    <span>1</span>
    <span>2</span>
    <span>3</span>
  </div>

flex-start:交叉轴的起点对齐
在这里插入图片描述

flex-end:交叉轴的终点对齐。
在这里插入图片描述
center:交叉轴的中点对齐。
在这里插入图片描述
baseline: 项目的第一行文字的基线对齐。
在这里插入图片描述

align-content

align-content 设置侧轴上子元素的排列方式,并且只能用于子项出现换行的情况(多行),在单行下是没有效果的(属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用)

属性值说明
flex-start默认值在侧轴的头部开始排列
flex-end在侧轴的尾部开始排列
center在侧轴中间显示
space-around子项在侧轴平分剩余空间
space-between子项在侧轴先分布在两头,再平分剩余空间
stretch设置子项元素高度平分父元素高度
 div{
      display: flex;
      width: 600px;
      height: 400px;
      background-color: pink;
      /* 换行 */
      flex-wrap: wrap;
      /*1. 因为有了换行,此时我们侧轴上控制子元素的对齐方式我们用 align-content */
      /* align-content: flex-start; */
      /*2. 整体居中对齐 */
      /* align-content: center; */
      /* 3.上下靠边对齐 */
      /* align-content: space-between; */
      /*4. 四周留边距 */
      /* align-content: space-around; */
    }

    div span{
      width: 150px;
      height: 100px;
      background-color: purple;
      color: #fff;
      margin: 10px;
    }
  </style>
</head>
<body>
  <div>
    <span>1</span>
    <span>2</span>
    <span>3</span>
    <span>4</span>
    <span>5</span>
    <span>6</span>
  </div>

1.flex-start:交叉轴的起点对齐。
在这里插入图片描述
2.center:与交叉轴的中点对齐。

在这里插入图片描述
3.space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
在这里插入图片描述
4.space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
在这里插入图片描述
5. stretch(默认值):轴线占满整个交叉轴。
在这里插入图片描述

align-content和align-items区别

  1. align-items适用于单行情况下,只有上对齐、下对齐、居中和拉伸
  2. align-content适用于换行(多行)的 情况下(单行情况下无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值
  3. 总结就是单行找align-items,多行找align-content

flex-flow

flex-flow属性是flex-direction和flex-wrap属性的复合属性

flex布局子项常见属性

属性说明
flex子项目占的份数
align-self控制子项目在侧轴的排列方式
order定义子项的排列顺序(前后循序),数值越小,排列越靠前,默认为0

align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性,默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

在这里插入图片描述

 div span:nth-child(2){
      align-self: flex-end;
    }

在这里插入图片描述

order

order属性定义项目的排列顺序
数值越小,排列越靠前,默认为0
注意:和z-index不一样
在这里插入图片描述

flex-grow

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
在这里插入图片描述
在这里插入图片描述

flex-shrink

  • flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
  • 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
  • 负值对该属性无效。
  • 当空间不足(即宽度占满不能换行)时会将该属性大的元素进行缩小

在这里插入图片描述

在这里插入图片描述

flex-basis

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

.item { flex-basis: | auto; /* default auto */ }

flex属性

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

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

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

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

在这里插入图片描述

参考:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值