• Flexbox


    概述

    CSS Flexible Box Layout(css 弹性盒子布局)是css的模块之一,定义了一种针对用户界面设计而优化的CSS盒子模型。在弹性布局模型中,弹性容器的子元素不仅可以在任何方向排布,还可以"flex"其尺寸。

    css2.1中定义了4中布局模式,分别是block layout、inline layout、table layout、positioned layout。块级布局侧重于垂直方向、行内布局侧重于水平方向,flex layout是与方向无关的。块级布局对于单独一个页面来说是行之有效的,但其仍缺乏足够的定义来支持那些必须随用户代理(user agent)不同或设备方向从水平转为垂直等各种变化而变换方向、调整大小、拉伸、收缩的应用程序组件。flex layout 是一种新的布局模式,可用于布置更复杂的应用程序和网页。

    使用flexbox的准备工作

    使用flexbox 前需要了解一些flex layout的一些词汇。

    弹性容器(Flex container):包含着弹性项目的父元素。通过设置 display 属性的值为 flex 或 inline-flex 来定义弹性容器。

    弹性项目(Flex item):弹性容器的每个子元素都称为弹性项目。弹性容器直接包含的文本将被包覆成匿名弹性单元。

    轴(Axis):每个弹性框布局包含两个轴。弹性项目沿其依次排列的那根轴称为主轴(main axis)。垂直于主轴的那根轴称为侧轴(cross axis)。
    flex轴

    弹性容器的主轴和侧轴取决于flex-direction的属性。下面会进行介绍。

    开始使用Flexbox

    display值为 flex 使弹性容器成为块级元素;display值为 inline-flex 使弹性容器成为单个不可分的行内级元素。例如,对ul使用display: flex,则ul变为flex容器,li变为flex项目。
    使用flexbox
    flex就这样就初始完成,接下来要使用 flex容器属性 进行一些操作了。

    flex 容器的属性有

    flex-direction || flex-wrap || flex-flow || justify-content || align-items || align-content

    fle-direction控制着主轴在容器中的方向;值为:row || row-reverse || column || column-reverse;

    flex-wrap: 控制flex容器内的flex item是在一行还是多行排列。值为:wrap || nowrap || wrap-reverse;例子如下:

    flex-wrap

    flex-flow: 是flex-direction 和flex-wrap的简写;

    justify-content: 控制主轴上所有flex item 的对齐;例子和值如下:
    justify-content

    align-items: 控制 flex项目 在Cross-Axis上对齐方式。例子和值如下:
    align-items

    align-content: 控制flex item 在 flex 容器的Cross-Axis之间的空间分配。类似于justify-content对齐主轴的方式。注意:align-content对只有一行的 flex 容器不起作用。
    align-content
    align-content和align-items的区别:如果在flex容器中使用wrap,那可能会出现折行,若想控制每行之间空间分配,则使用align-content.

    flex 项目属性

    flex-grow || flex-shrink || flex-basis

    flex-grow属性定义flex item 的拉伸因子。值为非负数数值,默认值为 零(0).

    flex-shrink属性定义flex item的收缩因子。值为非负数数值,默认值为1。

    flex-basis属性指定flex元素在主轴方向上的初始大小。值类似于width和height的值,默认为auto(content)。

    理解拉伸和收缩前,需要知道positive free space和negative free space的概念。flex子元素没有positive free space 就不会增长, 没有negative free space 就不会缩小.例如,我们有一个500px宽的容器,flex-direction属性为row,容器中有三个100px的flex item,此时整个容器还有500 - 100 * 3= 200px的positive free space。
    positive free space

    还是500px的flex容器,flex-direction属性为row,容器中有三个200px的flex item,此时flex 容器就有了500 - 200*3 = -100px的 negative free space。
    negative free space

    flex-grow

    当一个flex 容器有positive free space时,此时说明容器有空间用于flex item。如果我们想让positive free space填充flex item,需要使用flex-grow来控制分配positive free space的比例。例如,给每一个flex item的flex-grow设置为1,则每份flex item分配的positive free space空间为12001/(1+1+1);若更改其中一个flex-grow为2,其它值为1,则设置为2的分配空间为2*200 * 1/(1+2+1)。设置flex-grow的值为n单位 positive free space。

    flex-shrink

    当一个flex容器有negative free space时,此时说明容器需要减少flex item的空间让flex item不溢出flex容器。方式和flex-grow相似(但不相同),不再赘述。这个缩小因素和flex-basis的有一定关系,例如:
    negative free space1
    negative free space2

    当flex item到min-content的大小时,随着空间的进一步缩小,空间是从第三个flex item中进行移除的。设置为1,不代表都会缩小。

    flex-basis

    flex-basse的默认值是auto。flex有几点需要注意:

    • 如果flex-basis设置为auto,同时item已设置有width,此时宽度会基于 width。
    • 如果flex-basis设置为auto 或 content,此时大小会基于item 大小。
    • 如果flex-basis的值为非零且有长度单位(类似于width或heigh的值),此时的值为item的大小。
    • .如果flex-basis的值为0,则计算分配空间时不考虑flex item的大小。

    flex 简写

    flex是flex-grow、flex-shrink和flex-basis三个属性的简写。flex值可以为 auto、initial、none或.

    auto时值为: 1 1 auto;

    initial时值为 0 1 auto;

    none时值为0 0 auto;

    positive-number指的是非以上三值,值可以为一个(单值语法)、两个(双值语法)、三个(三值语法)。一个值时:一个无单位数会被当做flex-grow;一个有单位值(有效宽度)会被当做flex-basis的值。两个值时:第一个值必须为一个无单位数,会被当做flex-grow的值;第二个值若是一个无单位数会被当作flex-shrink,有单位值(有效宽度)会被当作flex-basis的值。

    当简写时需要注意,flex-grow的缺省值为 1,flex-shrink的缺省值为1,flex-basis的缺省值为0。

    参考

  • 相关阅读:
    sql 删除默认索引,对象 依赖于 列,由于一个或多个对象访问此列
    sql 重复数据查询
    Sql 查询结果 根据某个字段值 变更另外一个字段值 case when
    使用ABP框架踩过的坑系列3
    使用ABP框架踩过的坑系列5
    使用ABP框架踩过的坑系列4
    使用ABP框架踩过的坑系列2
    使用ABP框架踩过的坑系列1
    java rest框架jersey数组单记录问题解决
    测试工程师面试常见逻辑题
  • 原文地址:https://www.cnblogs.com/anlen/p/10572266.html
Copyright © 2020-2023  润新知