zoukankan      html  css  js  c++  java
  • L6.Flexbox 伸缩盒模型

    http://www.w3.org/TR/2014/WD-css-flexbox-1-20140325/

    Introduction

    CCS2.1中规定了四种布局模式:

    • block layout, designed for laying out documents
    • inline layout, designed for laying out text
    • table layout, designed for laying out 2D data in a tabular format
    • positioned layout, designed for very explicit positioning without much regard for other elements in the document

    Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,用于复杂的布局(designed for laying out more complex applications and webpages)

    例子:

    <style>
    #deals {
      display: flex;        /* Flex layout so items have equal height  */
      flex-flow: row wrap;  /* Allow items to wrap into multiple lines */
    }
    .sale-item {
      display: flex;        /* Lay out each item using flex layout */
      flex-flow: column;    /* Lay out item’s contents vertically  */
    }
    .sale-item > img {
      order: -1;            /* Shift image before other content (in visual order) */
      align-self: center;   /* Center the image cross-wise (horizontally)         */
    }
    .sale-item > button {
      margin-top: auto;     /* Auto top margin pushes button to bottom */
    }
    </style>

    2、Terminology 术语

    Flexbox 由 伸缩容器 和 伸缩项目 组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。

    下图是可以看出flex-flow与之前熟悉的元素的映射关系。The flex-flow value determines how these terms map to physical directions (top/right/bottom/left), axes (vertical/horizontal), and sizes (width/height).

    Flexbox 定义了伸缩容器内伸缩项目该如何布局。

    Flexbox 使用 主轴 和 侧轴的概念。伸缩行跟随主轴。侧轴则垂直于主轴。

    • 主轴起点 Main Start
    • 主轴终点 Main End
    • 主轴方向 Main Direction (有时候也成为伸缩流方向 Flow Direction)
    • 侧轴起点 Cross Start
    • 侧轴终点 Cross End
    • 侧轴方向 Cross Direction

    Flex Containers: the flex and inline-flex display values

    display 值有两种

    flex :生成一个块级伸缩容器box

    inline-flex: 生成一个内联伸缩容器box

    Flex 容器与之前的块级元素和内联元素不同,因此很多针对块级元素定义的属性在伸缩容器内是没效果的。(如column-*,float,clear等

    Flex Items

    4.1 Absolutely-Positioned Flex Children
    4.2 Flex Item Margins and Paddings
    4.3 Flex Item Z-Ordering
    4.4 Collapsed Items 项目折叠

    设置伸缩元素的 visibility:collapse ,

    目前为止,visibility: collapse; 还没有被让任何浏览器正确的实现。

    4.5 Implied Minimum Size of Flex Items

     5 Ordering and Orientation

    伸缩容器的内容可以从任何方向任何顺序铺展。主要通过 flex-direction,flex-wrap, and order这三个属性

    5.1 flex-direction 伸缩流的方向
    • 默认值是 row:该值表示伸缩项目根据书写模式的方向布局(Flex Flow Direction)
    • row-reverse: 主轴起点和主轴终点交换。如果书写模式是从左至右,伸缩项目则是从右往左显示。
    • column: 主轴和侧轴交换。如果书写模式是垂直的(从上到下),那么伸缩项目也是垂直显示的(从上到下)。
    • column-reverse: 和 column 一样,但是方向相反。
    5.2 伸缩行换行: the flex-wrap property

    nowrap | wrap | wrap-reverse

    单行,多行,多行且从cross-end 往cross-start

    如果 flex-wrap 设置为 wrap,在一个伸缩行容不下所有伸缩项目时,伸缩项目会换行到一条新增的伸缩行上。新增的伸缩行根据侧轴的方向添加。若为wrap-reverse,则从侧轴反方向添加

    5.3 Flex Direction and Wrap: the 
    flex-flow shorthand

    flex-direction 和flex-wrap 的缩写。

    div1 { flex-flow: row; }

    /* Initial value. Main-axis is

       inline, no wrap. */

    div2 { flex-flow: column wrap; }

    /* Main-axis is block-direction (top to bottom)

       and lines wrap in the inline direction (rightwards). */

    div3 { flex-flow: row-reverse wrap-reverse; }

    /* Main-axis is the opposite of inline direction

       (right to left). New lines wrap upwards. */

    NOTE: 以上三个属性都是相对writing-mode而言的。

    
    

    5.4 显示顺序: order

    如果需要文档顺序(html的顺序)和显示顺序不同时,用order,order默认值为0,设为-1将显示在最前面。

    6 Flex Lines

    • single-line 即使内容可能溢出也放在一行里
    • multi-line  多行

    7 Flexibility

    7.1 The flex Shorthand

    none | [ <‘flex-grow’><‘flex-shrink’>? || <‘flex-basis’> ]

    flex: 0 auto

    flex: initial flex: 0 1 auto

    元素在有剩余空间的情况下不会有任何变化,但是在必要的情况下会被收缩。

    flex: auto =flex: 1 1 auto.

    元素会根据主轴自动伸缩以占用所有剩余空间,可以通过使用 flex: 1; 来达到一样的效果

    flex: none=flex: 1 1 auto.

    在任何情况都不会发生伸缩。

    flex: <positive-number> : 指定一个数字,代表了这个伸缩项目该占用的剩余空间比例。剩余空间被所有指定flex的伸缩元素瓜分。

     

    7.3 Components of Flexibility

    8 Alignment校准

    块级元素中的margin在伸缩盒中,能做同样的事情,但是更加强大。

    8.1 Aligning with auto margins

    margin:auto垂直居中
    #login {
      margin-left: auto;
    } 导致了所有的剩余空间被合并到login元素的左边去了

     用auto margins 和alignment properties的区别:

    • 左图:margin:auto 右图:(侧轴对齐align-self:center),当这个ul在页面的最左边时,左图是合理的布局。

    8.2 Axis Alignment:

    the justify-content property主轴对齐(水平方向)

    flex-start | flex-end | center | space-between | space-around

    8.3 Cross-axis Alignment:

    the align-items and align-self properties侧轴对齐(竖直方向)

    flex-start | flex-end | center | baseline | stretch

    8.4 Packing Flex Lines:  align-content 堆栈伸缩行

    与 align-items 相似,不过不是对齐伸缩项目,它对齐的是伸缩行

    flex-start | flex-end | center | space-between | space-around | stretch

    8.5 Flex Baselines

    main-axis baseline

    cross-axis baseline

    9 Flex Layout Algorithm

  • 相关阅读:
    编译资源收集
    volatile和synchronized到底啥区别?多图文讲解告诉你
    沙雕与大婶 | Mock掉你的外部依赖吧
    全网最详细的一篇Flutter 尺寸限制类容器总结
    一篇带你看懂Flutter叠加组件Stack
    【MySQL】:事务四大特性与隔离级别
    Dubbo 入门-细说分布式与集群
    Java 线程基础知识
    SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
    搭建博客、自己的小窝?快来看看这些开源静态网站生成器
  • 原文地址:https://www.cnblogs.com/guozhiguoli/p/3791348.html
Copyright © 2011-2022 走看看