Flex布局的完整基本语法

应用在父元素上-flex box

1.模型 方向 换行

display: flex(盒子模型)
  • 定义父元素为flex元素
flex-direction(方向)

概述:子元素的排列方向

  • row (默认值): 从主轴起点到到主轴终点
  • row-reverse: 从主轴终点到主轴起点
  • column: 从侧轴起点到侧轴终点
  • column-reverse:从侧轴终点到侧轴起点
flex-wrap(换行)
子元素在主轴上铺满时,是否换行
  • Nowrap(默认值):不换行
    Flex容器能容纳所有的子元素(Flex项目)排列,即使浏览器出现了水平滚动条(当Flex容器中添加了很多个Flex项目,至使Flex容器的宽度大于视窗宽度)。
  • Wrap:换行且从顶部到到底部排列
  • Wrap-reverse:换行且从底部到到顶部排列
    当你希望Flex容器内的Flex项目达到一定数量时,能换行排列。
    当Flex容器中没有足够的空间放置Flex项目(Flex项目默认宽度),
flex-flow:方向 换行
  • flex-flow :flex-direction flex-wrap
  • 默认值Flex-flow:row nowrap

2.水平 垂直 多行垂直对齐

justify-content(水平对齐)
主轴方向对齐方式
定义了沿着主轴对齐。
它帮助分赔剩下多余的空闲空间给所有的flex项目。
  • flex-start (默认值): flex项目从主轴起点开始无空闲空间地排列在一起
  • flex-end: flex项目从主轴终点开始无空闲空间地排列在一起
  • center: flex项目排列在主轴中间,两边空闲空间均匀分批
  • space-between: 在主轴上的空闲空间均匀地分配到每两个flex项目中间
  • space-around: 在主轴上每个flex项目两边都分配一样的空间
align-items(垂直对齐)
 侧轴对齐方式
  • stretch (默认值):把所有的元素伸开,所有flex项目的高度以最高的flex项目为准
  • flex-start: 在主轴上排列的flex项目顶部,对齐侧轴的起点
  • flex-end: 在主轴上排列的flex项目底部,对齐侧轴的终点
  • center: 在主轴上排列的flex项目中部,对齐侧轴的中间
  • baseline: flex项目沿着自己的基线对齐
align-content(多行flex项目垂直对齐)
 当出现多行flex项目时,侧轴方向对齐方式
  • stretch (默认值): flex盒子和flex项目没设置高度时,盒子高度以高度最高的flex项目为准
  • flex-start: 多行flex项目顶部对准侧轴起点
  • flex-end: 多行flex项目底部对准侧轴终点
  • center: 多行flex项目中部对准侧轴中间,空闲空间均匀分配打破多行flex项目两边
  • space-between:侧轴方向上,空闲空间均匀分配到每两行flex项目的中间
  • space-around: 侧轴方向上,空闲空间均匀分配到每行flex项目的两边

应用在子元素-flex项目

1.水平排序 伸展 收缩 初始宽度/ 垂直位置和垂直伸展

Order(排序)
  • 默认情况下,所有Flex项目的order值都是0
  • 可以正负值,设置子元素排列的先后顺序号
  • 如果两个以下Flex项目有相同的order值时,Flex项目重新排序是基于HTML源文件的位置进行排序。
flex-grow(伸展)
  • 默认情况下,flex-grow属性值设置为0。表示Flex项目不会增长,填充Flex容器可用空间。表示flex-grow属性没有使用。
  • 如果只有一个子元素设置了flex-grow的值,则这个子元素分配剩下的所有的空闲空间。如果你试着调整你浏览器的大小,Flex项目也会放大,以适应新的屏幕宽度。
  • 如果多个子元素设置了flex-grow的值,则按照值的比例来分配剩下的空闲空间。
flex-shrink(收缩)
  • 默认情况下,flex-shrink的值是1,也就是说flex-shrink开关也是打开的。
  • 如果你试着调整你浏览器的大小,Flex项目也会放大,以适应新的屏幕宽度。
  • 按照子元素设置的flex-shrink值,来按比例收缩flex项目。
flex-basis(初始宽度)
  • 指定flex项目的初始宽度大小,可以是比例也可以是长度单位。
  • 默认的值是auto。flex-basis可以取任何用于width属性的任何值。Flex项目宽度的计算是基于内容的多少来自动计算(很明显,加上了padding值)。
  • 这意味着,如果你增加Flex项目中的内容,它可以自动调整大小。
  • 然而,如果你想将Flex项目设置一个固定的宽度,现在Flex项目的宽度受到了限制。
  • 值为0,内容不考虑周围的额外空间。
    注意:如果flex-basis属性的值是0时,也需要使用单位。
    即flex-basis: 0px不能写成flex-basis:0
align-self(垂直位置和垂直伸展)
 控制单个flex项目侧轴的位置和高度
  • auto
    是将目标Flex项目的值设置为父元素的 align-items值,或者如果该元素没有父元素的话,就设置为 stretch。继承父元素的 align-item 值。
  • flex-end
    将目标项目(Flex项目)对齐到Cross-Axis的末端。
  • center
    将目标项目(Flex项目)对齐到Cross-Axis的中间。
  • stretch
    会将目标项目拉伸,以沿着Cross-Axis填满Flex容器的可用空间(Flex项目高度和Flex容器高度一样)。
  • baseline
    将目标项目沿着基线对齐。它与flex-start的效果看起来是一样的,不过我相信你理解了基线是什么。因为前面已经解释过。

2.flex:膨胀 收缩 初始宽度

  • flex:0 1 === flex: 膨胀 收缩 (无值时,默认为0)
    flex默认属性值以及所有的Flex项目都是默认行为
    不伸展,会收缩
  • flex:0 0 auto === flex:none
    试着缩放一下浏览器,你会注意到弹性项目不会收缩其宽度。它们从父元素中突出来了,要看到所有内容,必须横向滚动浏览器。
  • flex: 1 1 auto === flex: auto
    还是按我前面立的规矩。即,自动计算初始化宽度,但是如果有必要,会伸展或者收缩以适应整个可用宽度。
    此时,项目会填满可用空间,在缩放浏览器时也会随之收缩。
  • flex: 2 1 0 === flex: 2
    2 表示任何正数

3.绝对项目 相对项目

1. 什么是绝对项目和相对项目
  • 绝对项目
    Flex:膨胀宽度 收缩宽度
    如果你只设置了flex-grow和flex-shrink值,flex-basis可能是默认值0。这就是所谓的绝对flex项目。
  • 相对项目
    Flex:膨胀宽度 收缩宽度 初始宽度
    只有当你设置了flex-basis,你会得到一个相对flex项目。
2.绝对和相对Flex项目之间到底有啥区别
  • 二者之间主要的区别在于间距及如何计算间距。
  • 绝对Flex项目中,只根据 flex 属性来计算,而不是内容。
    flex-basisi:0
  • 一个相对Flex项目内的间距是根据它的内容大小来计算的。
    flex-basis:auto

4.Margin:auto的作用

1.使用margin:auto
  • 第一个Flex项目使用margin:auto;前后
  • 当在Flex项目上使用 margin: auto 时,左、右l两边会占据所有剩余空间。
  • 让一个Flex项目的两边都用自动外边距对齐
margin-left: auto; 
margin-right: auto;
2.Justufy-content属性什么时候不起作用

当在一个Flex项目上使用自动外边距(margin: auto)时,justify-content 属性就不起作用了。

当用 flex-direction: column 时

 项目的宽度填满了空间

高度

  • Flex(膨胀宽度、收缩宽度、初始宽度)属性变成了(高度)
  • 本质上,每个作用于横向轴(即Main-Axis)上的 flex 属性,现在都会作用于纵向上的新Main-Axis。它只是在方向上的一个切换。
  • 影响Main-Axis的每一个属性现在会影响新Main-Axis。像 flex-basis 这种会影响Main-Axis上Flex项目宽度的属性,现在会影响项目的高度,而不是宽度。

位置

  • Main-Axis是从上到下,Cross-Axis是从左到右。
  • Justify-content(水平位置)变成(垂直位置)
  • justify-content: center;flex项目垂直居中了
  • Align-items(垂直位置)变成(水平位置)
  • align-items: center;Flex项目已经水平居中了

浏览器bug

  • 在有些浏览器中,会有一个 bug,允许Flex项目收缩后比其内容尺寸小。这是个很古怪的行为。
  • 解决这个 bug 的变通方案是把 flex-shrink 的属性值设置为 0,而不是默认值 1,同时,把 flex-basis 属性设置为 auto。

参考
理解Flexbox:你需要知道的一切

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,377评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,282评论 0 26
  • flex布局基础知识 main axis(主轴): Flex容器的主轴主要用来配置Flex项目。它不一定是水平,这...
    前端小兵阅读 475评论 0 1
  • title: flex布局date: 2017-07-07 14:13:33tags: css笔记 flexbox...
    Gary23阅读 1,463评论 0 0
  • 前言 FlexBox是css3的一种新的布局方式,天生为解决布局问题而存在的它,比起传统的布局方式,我们使用Fle...
    zevei阅读 1,369评论 23 3