Day5 弹性布局flex

118 阅读3分钟

day5 打卡 flex

每日一句

A good laugh and a long sleep are the best cures in the doctor's book.

医生手册写道:开怀大笑,睡个长觉是最好的灵丹妙药。

引言:布局的传统解决方案,基于盒状模型,依赖display属性 +position属性 +float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。而flex布局就变得简单多了。

image.png

概念

Flex布局是什么?

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

低版本浏览需加前缀,如Webkit 内核的浏览器,必须加上-webkit前缀。

Tips:

设为 Flex 布局以后,子元素的floatclearvertical-align属性将失效。

基本概念:

  • 容器:指父元素
  • 项目:指子元素
  • 主轴:指多个子元素或项目排列方向上的一根轴就是主轴,如果按x方向排列,x就是主轴,按y方向排列,y就是主轴。

image.png

  • 交叉轴:与主轴垂直的一条轴,就是交叉轴。

image.png

容器的相关属性

  • 希望父元素独占一行,则设置父元素display: flex;, 希望多个父元素都占一行,则需每个父元素 display:inline-flex;

image.png

image.png

父元素设置flex之后,可设置的属性有:

flex-direction: 设置主轴的方向,值:row/column/row-reverse/column-reverse 默认:row (row:行,column:列)
flex-wrap: 设置主轴上的项目在排列方向上显示不下,是否换行显示。值:nowrap(打死不换行)/wrap(换行)
flex-flow: 是flex-direction,flex-wrap的简写, 以空格分隔,默认:row nowrap
justify-content: 设置主轴上对齐方式,值: flex-start/flex-end/center/space-between(两端)/space-around(均匀分布)
align-items: 设置交叉轴上对齐方式,值 flex-start/flex-end/baseline(文本基线)/center/stretch(拉伸)

项目相关属性

项目属性是对容器设置属性外,单独对项目设置的属性。 访属性只能设置在项目上,只对该项目有效,不影响其他项目。

主要项目属性:

  • order: 指定某项目顺序。数字越小越靠近起点,默认0.
  • flex-grow: 指定某项目放大属性。如果容器有足够空间,项目可以放大比例;默认0不放大;值越大,占的空间越多;如项目都设置为1,则均分整个容器。
  • flex-shrink: 指定某项目缩小属性。如果容器空间不足时,项目可以缩小比例;默认1,空间不足等比缩小;0不缩小。
  • align-self:设置某一项目在交叉轴上的对齐方式(容器中的align-items是设置容器中项目统一的对齐方式)。值flex-start/flex-end/center/baseline/center/stretch/auto, 与容器align-items类似,多了一个值auto:表示继承容器的align-items效果。
  • flex-basis: 设置某项目的占用空间。没有设置,则为auto,那此项目的宽高则为width/height; 如flex-basis:200px;,则此项目会覆盖项目的width值。
  • flex: 是flex-grow flex-shrink flex-basis 的缩小。默认:0 1 auto,后两位为可选; 该属性有两个快捷值auto:(1 1 auto),none:(0 0 auto)