28-(flex)伸缩布局/弹性布局

  • 主轴和侧轴
主轴和侧轴.png
  • 注意:
    flex:将一个容器设置为块伸缩容器
    inline-flex:将一个容器设置为内联 伸缩容器
  • 注意:设为 Flex 布局以后,css的columns在伸缩容器上将失效;子元素的float、clear和vertical-align属性将失效。
  1. 主轴方向问题
  • 1.1 在伸缩布局中, 默认伸缩项是从左至右的排版的

        display: flex;
    
  • 1.2 主轴的排版的方向默认就是row, 默认就是从左至右

       flex-direction: row;
    
  • 1.3. 修改主轴的排版方向为从右至左

     flex-direction: row-reverse;
    
  • 1.4 告诉系统把主轴的方向改为垂直方向

  • 注意点:

  • 1.5 默认情况下主轴是水平方向的, 但是也可以修改为垂直方向。
    只要看到

     flex-direction: column   
    
  • 或者

     column-reverse就代表主轴被修改为了垂直方向
    
  • 1.6 如果将主轴修改为了垂直方向, 那么侧轴就会自动从垂直方向转换为水平方向

  • 修改主轴的排版方向为从上至下

     flex-direction: column;
    
  • 修改主轴的排版方向为从下至上

    flex-direction: column-reverse;
    
  1. 主轴对齐方式
  • 2.1 主轴
    • 用于设置伸缩项主轴上的对齐方式!
  • 如果设置为flex-start, 代表告诉系统伸缩项和主轴的起点对齐
  justify-content:取值;
  • 2.2 伸缩项和主轴的起点对齐
  justify-content: flex-start;
  • 2.3 伸缩项和主轴的终点对齐
  justify-content: flex-end;
  • 2.3 居中对齐
  justify-content: center; 
  • 2.4 两端对齐
  justify-content: space-between;
  • 2.5 环绕对齐:每个项目两侧的间隔相等
  justify-content: space-around;
  • 2.6 总结:

     语法:*justify-content:flex-start|flex-end|center|space-between|space-around*
    
  • flex-start:伸缩项目向一行的起始位置靠齐

  • flex-end:伸缩项目向一行的结束位置靠齐

  • center:伸缩项目向一行的中间位置靠齐

  • space-between:伸缩项目会平均的分布在行里

  • space-around:伸缩项目会平均地分布在行里,两端保留一半的空间

示例链接:

http://www.runoob.com/try/playit.php?f=playcss_justify-content&preval=initial

  1. 侧轴对齐方式
  • 3.1 侧轴
    通过align-items可以修改侧轴的对齐方式
    默认情况下是以侧轴的起点对齐

  • 3.2 以侧轴的起点对齐

  align-items: flex-start;
  • 3.3 以侧轴的终点对齐
  align-items: flex-end;
  • 3.4 以侧轴的中线对齐
  align-items: center;
  • 3.5 基线对齐
  align-items: baseline;
  • 3.6 拉伸对齐
  align-items: stretch;
  • 注意点:
    和主轴不同的是, 侧轴没有两端对齐和环绕对齐
  • 3.7 总结:

  • align-items和justify-content相呼应。align-items调整伸缩项目在侧轴上的定位方式,主要用来定义伸缩项目可以在伸缩容器的当前行的侧轴对齐方式。

     *  语法:align-items:flex-start|flex-end|center|baseline|stretch
    
  • flex-start:伸缩项目在侧轴起点边的外边距紧靠住该行在侧轴起始边

  • flex-end:伸缩项目在侧轴终点边的外边距靠住该行在侧轴终点边

  • center:伸缩项目的外边距盒在该行的侧轴上居中放置

  • baseline:伸缩项目根据伸缩项目的基线对齐

  • stretch:默认值,伸缩项目拉伸填充整个伸缩容器
    (伸缩项目设置宽度或者高度之后不会被拉伸)
    示例:
    http://www.runoob.com/try/playit.php?f=playcss_align-items&preval=stretch
    http://www.runoob.com/try/playit.php?f=playcss_align-self&preval=auto

  • 3.8 注意点:

  • 如果在伸缩容器中通过 align-items 修改侧轴的对齐方式, 是修改所有伸缩项侧轴的对齐方式

  • 如果是在伸缩项中通过 align-self 修改侧轴的对齐方式, 是单独修改当前伸缩项侧轴的对齐方式

  • align-self属性的取值和align-items一样

  1. 伸缩换行flex-wrap
  • 在伸缩布局中, 如果伸缩容器的宽度不够, 系统会自动压缩伸缩项的宽度, 保证所有的伸缩项都能放在伸缩容器中
  • 如果当伸缩容器宽度不够时, 不想让伸缩项被压缩, 也可以让系统换行flex-wrap: wrap;
  • 默认情况下如果伸缩容器的高度比换行之后所有伸缩项的高度还要高, 那么系统会自动将剩余空间平分之后添加给每一行

宽度不够也不换行, 默认取值

        flex-wrap: nowrap;
        宽度不够也不换行, 默认取值
      

        flex-wrap: wrap;
        如果当伸缩容器宽度不够时, 不想让伸缩项被压缩, 也可以让系统换行flex-wrap: 


        flex-wrap: wrap-reverse;
        伸缩容器多行显示,ltr排版下,伸缩项目从右向左排列;
        rtl排版下,伸缩项目从左往右排列(与wrap相反)

总结:

  • nowrap:伸缩容器单行显示,ltr排版下,伸缩项目从左到右排列;rtl排版下,伸缩项目从右向左排列(默认值)
  • wrap:伸缩容器多行显示,ltr排版下,伸缩项目从左到右排列;rtl排版下伸缩项目从右向左排列。
  • wrap-reverse:伸缩容器多行显示,ltr排版下,伸缩项目从右向左排列;rtl排版下,伸缩项目从左往右排列(与wrap相反)
  1. 堆栈伸缩行align-content
  • align-content属性会更改flex-wrap的行为,和align-items相似,但不是对齐伸缩项目,它对齐的是伸缩行。

  • align-content属性主要用来调准伸缩行在伸缩容器里的对齐方式。

  • 语法:align-content:flex-start|flex-end|center|space-between|space-around|stretch

  • 如果伸缩容器中的伸缩项换行了, 那么我们就可以通过align-content来设置行与行之间的对齐方式

  • 默认情况下换行就是就是拉伸对齐

  • 一定要注意: 在换行中的拉伸对齐是指, 所有行的高度总和要和伸缩容器的高度一样。
    所以会将多余的空间平分之后添加给每一行

参数说明:

  • flex-start:各行向伸缩容器的起点位置堆叠
  • flex-end:各行向伸缩容器的结束位置堆叠
  • center:各行向伸缩容器的中间位置堆叠
  • space-between:各行在伸缩容器中平均分布
  • space-around:各行在伸缩容器中平均分布,在两边各有一半的空间
  • stretch:默认值,各行将会伸展以占用额外的空间
  1. 伸缩项排序
  • 如果想调整伸缩布局中伸缩项的顺序, 那么我们可以通过修改伸缩项的order属性来实现
  • 默认情况下order的取值是0
  • 如果我们设置了order属性的值, 那么系统就会按照设置的值从小到大的排序
  1. 伸缩项放大比例
  • flex-grow作用:
    当所有伸缩项宽度的总和没有伸缩容器宽度大的时, 我们可以通过flex-grow让系统调整伸缩项的宽度, 以便于让所有伸缩项的宽度的总和等于伸缩容器的宽度

         2.flex-grow计算公式
         2.1计算剩余的空间
         伸缩容器宽度 - 所有伸缩项的宽度
         400 - 300 = 100
         2.2计算每份剩余空间的宽度
         剩余空间 / 需要的份数
         100 / 6 = 16.66
         2.3计算每个伸缩项最终的宽度
         伸缩项的宽度 + 需要的份数 * 每份的宽度
    
         注意点:
         flex-grow默认值是0
    
    
     如果伸缩项目的flex-grow设置为1,每个伸缩项目将设置一个大小                                       
     相等的额外空间。如果给其中一个伸缩项目设置flex-grow设置为2,    
     这个伸缩项目所占的额外空间是其他伸缩项目所占额外空间的2倍。
     也可以这样理解,把上例各项目的flex-grow值加起来等于4,就是把      
     额外空间分成4份,比例为1的占1份,比例为2的占2份。
    

8、伸缩项缩小比例

  • flex-shrink作用:
  • 当所有伸缩项宽度的总和比伸缩容器宽度大的时, 我们可以通过flex-shrink让系统调整伸缩项的宽度, 以便于让所有伸缩项的宽度的总和等于伸缩容器的宽度
2.计算每个伸缩项需要压缩的宽度
2.1计算溢出的宽度
伸缩容器的宽度 -  所有伸缩项的宽度总和
400 - 600 = -200
2.2计算总权重
每个伸缩项需要的份数 * 每个伸缩项的宽度
1 * 200 +  2 * 200 + 3 * 200 = 1200
2.3计算每个伸缩项需要压缩的宽度
溢出的宽度 * 需要的份数 * 每个伸缩项的宽度 / 总权重
-200 * 1 * 200 / 1200 = -33.33

注意点:
flex-shrink: 默认值是1



与flex-grow类似,也是处理伸缩容器额外空间的属性,不同的是,flex-    
grow处理的是伸缩容器内部剩下的额外空间,而flex-shrink处理的是伸 
缩容器外部溢出的额外空间。上例中将溢出的额外空间分成4份,收缩 
比例为1的占1份,收缩比例为2的占2份,如果不设置收缩比例,默认的 
比例为1。

9、伸缩项放大缩小比例
如果有伸缩项没有设置flex-grow, 那么系统会保持原有的宽度
而会将多余的宽度等分之后, 按照每个伸缩项需要的份数添加给它们
如果想让某个伸缩项不缩小, 那么需要将它的flex-shrink设置为0

10、伸缩项宽度
如果是伸缩布局, 除了可以通过元素的width属性来设置宽度以外, 还可以通过flex-basis属性来设置伸缩项的宽度

  • 注意点:
    1.width属性可以设置宽度 / flex-basis也可以设置宽度
    那么如果两者同时存在, 系统会听flex-basis的
    2.flex-basis属性是专门提供给伸缩布局使用的
    3.如果同时通过这两个属性设置了宽度, 但是其中一个是auto, 那么系统会按照具体值来设置
  1. 伸缩项属性简写:
    flex: flex-grow flex-shrink flex-basis;
    默认值:
    flex: 0 1 auto;
    注意点:
     在连写格式中, flex-shrink flex-basis是可以省略的
     /*
    flex: 1 1 200px;
    */
     flex: 1;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 一、css的布局模式 css2.1中定义了四种布局模式,由一个盒与其兄弟、祖先盒的关系决定其尺寸与位置的算法。 块...
    LemonnYan阅读 1,042评论 0 1
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,389评论 0 26
  • 一、Flex 布局是什么? CSS3引入了一种新的布局模式——Flexbox布局,即伸缩盒模型布局(Flexibl...
    侠客有情剑无情QAQ阅读 5,723评论 7 94
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,452评论 0 6
  • 前言 FlexBox是css3的一种新的布局方式,天生为解决布局问题而存在的它,比起传统的布局方式,我们使用Fle...
    zevei阅读 1,408评论 23 3