CSS3-弹性布局-弹性容器-怪异盒模型详细讲解-配视频+作业-可视化弹性布局工具

指的是使用样式来让普通盒子变成弹性盒子。并不是新增了某些弹性标签。
之前布局:盒模型+浮动+定位。在做复杂布局的时候,写起来比较麻烦。
可以把弹性布局理解成是高级版(升级版)的浮动+盒模型布局。
颠覆了我们之前对布局的理解和使用。

一、怪异盒模型

区别:不是新增了盒模型属性,盒模型的总宽总高的计算方式发生了改变

面试:标准盒模型和怪异盒模型的区别?

/*要给元素启用怪异盒模型,需要写对应的样式*/
标签{
    box-sizing:content-box(默认值)|border-box(怪异盒模型);
}
  1. 标准盒模型(标准盒模型)

总宽、总高需要3个属性参与

总宽=width+左右padding+左右border
总高=height+上下padding+上下border
// 盒子的总宽希望是400
  1. 怪异盒模型(非标准盒模型)

总宽只需要一个属性参与,即width=总宽。

总宽=width宽,不管有没有添加padding或border,如果添加了则会自动扣除
//希望总宽是400
/*标准盒模型*/
div{
    width:354px;
    padding:20px;
    border:2px solid red;
}
/*怪异盒模型*/
div{
    box-sizing:border-box;
    width:400px;
    padding:20px;
    border:2px solid red;
}

好处:

  1. 不需要计算复杂在盒模型
  2. 移动端首选的盒模型
/*实际开发中*/
在reset.css中全局启用该怪异盒模型
*{
    box-sizing:border-box;
    margin:0;
    padding:0
}
//推荐
div,p,h1,h2,h3,ul,li,dd,dt,dl{
    box-sizing:border-box;
    margin:0;
    padding:0
}

二、弹性布局【重难点】

指的就是用弹性盒子来布局。

指的是使用样式来让普通盒子变成弹性盒子。并不是新增了某些弹性标签。

之前布局:盒模型+浮动+定位。在做复杂布局的时候,写起来比较麻烦。

可以把弹性布局理解成是高级版(升级版)的浮动+盒模型布局。

颠覆了我们之前对布局的理解和使用。

弹性盒子涉及的属性比较多,比较复杂,容易记混。

弹性布局分两部分:

  1. 弹性容器(父级)
  2. 弹性盒子(元素本身)
一、给父级添加的属性6个
  1. display:felx;设置父级为弹性布局

    /*添加到父级上*/
    .father{
       display: flex;
    }
    /*目的让里面的子元素变成弹性盒子,影响的是里面的直接子元素,不影响孙元素*/
  2. flex-direction弹性盒子的水平或垂直对齐方式的属性

    也就是规定弹性盒子在主轴上的对齐方式(左对齐、右对齐,从上到下对齐,从下到上)

    flex-direction:row|row-reverse|column|column-reverse
    属性值说明:
    row:默认值-从左到右
    row-reverse:在主轴上,从右到左排列
    column:让弹性盒子对的排列
    
  3. justify-content 把弹性项(子元素)沿着弹性容器的主轴线(main axis)对齐。

    也就是水平方向分布弹性盒子。

    作用:解决主轴方向的富裕空间管理(留白)

    语法:
    justify-content:flex-start|flex-end|center|space-between|space-around;
    一共5种分配富裕空间的方式。
    1. justify-content:flex-start(默认值)
    弹性项目向行头紧挨着填充.
    人话:子元素在主轴开始位置,富裕空间在主轴结束位置。
    即弹性盒子在左侧,留白在右侧
    2. justify-content:flex-end;
    弹性项目向行尾紧挨着填充
    人话:与flex-start相反,子元素在主轴结束位置,而富裕空间在子元素开始位置。
    即弹性盒子在右侧,留白在左侧
    3. justify-content:center;
    弹性项目居中紧挨着填充。
    人话:子元素在主轴中间位置,富裕空间在主轴两侧
    即弹性盒子在中间,留白平均分配在两侧
    4. justify-content:space-between;
    弹性项目平均分布在该行上。
    人话:富裕空间平均分配在每两个子元素之间。(第一个和最后一个没有空间)
    5. justify-content:space-around;
    弹性项目平均分布在该行上,两边留有一半的间隔空间。
    人话:富裕空间平均分配在每个元素的两侧。(手拉手)
  4. align-items

    可以理解为单行子元素在父容器中的垂直方向的对齐方式

    作用:纵轴方向的富裕空间管理(留白)

    align-items:stretch(默认值)|flex-start|flex-end|center|baseline;
    解释:
     stretch:元素被拉伸至纵轴起始结束位置,如果该元素不写高度则无富裕空间
     flex-start: 元素在纵轴起始位置,富裕空间在纵轴结束位置
     flex-end: 元素在纵轴结束位置,富裕空间在纵轴开始位置
     center: 元素在纵轴中间位置,富裕空间在纵轴两侧(上下)位置
     baseline: 元素根据纵轴文字上的基线对齐。
  5. 让弹性盒子换行(默认所有的弹性盒子都在同一行)

    默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
    取值: nowrap(默认值)
         wrap (换行,第一行在上方)
         wrap-reverse; (换行,第一行在下方)
    注意:如果在子元素中使用了flex-grow:1;则可能不会生效。
  6. 多行的弹性盒子的对齐方式

    取值同align-items
    相当于是多行子元素的侧轴对齐方式。如果项目(子元素)只有一根轴线,该属性不起作用。
    注意:针对的是多行,影响的是整体,而不会影响单行在侧轴上的对齐方式。

二、添加在弹性盒子的5个属性

  1. flex-grow 较多

    属性用于指定弹性子元素如何按比例分配父级的富余空间。可一般简写为flex来指代flex-grow
    默认值为0,即不平分父级空间,即使有剩余空间,弹性盒子的宽度是自适应的。
    添加到子元素身上(弹性盒子身上)相当于是宽度属性。
    
    注意:使用后,该子元素的宽度值将失效
    注意:flex-grow是按照比例分得父级的富裕空间。
    小技巧:假设不想让子元素的width属性影响你的计算,则可以将其的值设置为0;

    注意:flex-grow是按照比例分得父级的富裕空间。
    1、子元素都没有给宽度,如果值为1,每个子元素的宽度都一致
    2、为了避免子元素的内容超过子元素的宽度,最好先给子元素的宽度设为0;
    3、如果子元素给了宽度,那么就有个计算公式
    剩余空间/比例的和*每个子元素的比例+子元素的width宽度=该子元素的最终宽度;
    剩余空间=父元素的宽度-子元素的宽度和;
    比如:父级总共400px,有3个子元素,每个子元素的flex-grow都为1,其中1、3子元素给了默认宽度width为100,那么:
    还有:400-200=200剩余
    所以每份为:200/3=66.6
    所以,1、3子元素的实际宽度为100+66.6=166,2为66

  2. flex-shrink 较少

    跟flex-grow相反的意思。指的是按照比例来收缩空间。
    flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
    子元素的总宽超过了父元素的宽度,就会按照1:1的方式自动收缩空间,直到能够容纳下来。
    如果设置为0,则该子元素不收缩空间,哪怕是父级空间不足,如果是1,则会按照比例收缩空间。不能为负数。
  3. flex-basis

    可简单理解为宽度。
    flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
    
    注意:当该子元素既有width又有flex-basis时,basis权重要比width高。比如设置basis为300,而width为200,则呈现出来的是300px

    其中1、2、3可以合并为一个属性:flex.

    flex:1;//等价于 flex-grow:1;
    felx:1 0 120px;// flex-grow  flex-shrink flex-basis;
  4. order

    取值:
    阿拉伯数字:用整数值来定义排列顺序,数值小的排在前面。可以为负值。默认为0.(按照书写的结构顺序来排)
    比如:
    order:1;//排在后面一点
    order:-1;//排在前面一点
  5. align-self

    子元素单独在侧轴(纵轴)方向上的对齐方式。
    注意:该属性值会覆盖父级上的align-content。
    取值:auto(默认值)|stretch|center|flex-start|flex-end|baseline|
    给具体的某一个子元素添加,作用在该子元素身上。如果是align-items则修饰的是所有的子元素。

技巧:

  1. 弹性布局不是要把所有的属性都写上,大概写3-5个就能满足大部分的弹性布局需求
  2. 一个好用的可视化的弹性布局的工具推荐给大家:https://www.imqd.cn/tools/flexbox/

相关单词

  1. grow 成长,长大
  2. shrink 收缩
  3. basis 基础,基本
  4. order 命令,排序
  5. self 自己,
此资源下载链接已被无情的隐藏,请输入验证码解锁:
验证码

请关注本站公众号回复“验证码”,获取验证码。

在微信里搜索“WEB前端全栈圈”或者“imqdcn”或者微信扫描二维码都可以关注微信公众号

WEB前端全栈圈
除特别声明外, 本站所有内容皆为原创,未经许可,禁止转载。转载时请务必以超链接形式标明文章出处和作者信息
  • 818
(0)
打赏 微信扫一扫 微信扫一扫

关于作者:

web前端老罗

贡献:已经在WEB前端圈发表89篇文章了,你也来试试

简介:前端老罗是一位拥有多年web前端开发经验、管理经验、教学经验的实战派全栈工程师。目前在某名企任职WEB前端技术教官。加我微信:imqdcnn可提供开发、技术咨询、答疑、直播讲座等服务

Ta的专栏 | Ta的站点 | 其他SNS

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关于WEB前端圈

我是前端人(imqd.cn)愿景是不管你是想学习前端还是一名专业的WEB前端工程师在这里都能找到你想要的物料。定位为前端人学习进步的一个平台。在这里你能找到前端学习笔记、教学视频资源、案例、前后端分离、前端框架、低代码平台、可视化数据、多端开发、全栈开发等跟前端有关的一切资源!

关于站长:WEB前端老罗(罗老师)是一位拥有多年web前端开发经验、管理经验、IT培训教学经验的实战派全栈工程师。目前在某名企任职WEB前端技术教官。右边加我微信可提供开发、技术咨询、答疑、直播讲座等服务

WEB前端圈二维码

右边添加老罗微信一对一免费私聊
拉你加入官方微信答疑群

To top