• flex布局(理论+案例解释)


    目录

     布局原理:

    常见父项属性:

    主轴和侧轴

    设置主轴方向 flex-direction:

    设置主轴上的排列方式 justify-content(重要):

    设置侧轴上的子元素排列方式 align-items(单行)

    设置侧轴上子元素的排列方式 align-content(多行)

    align-content与align-items区别

    flex-flow :

    常见子项属性:

    flex属性:

     align-self控制子项自己在侧轴上的排列方式(了解)

    order属性定义项目的排列顺序


     布局原理:

    flex是flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。
    当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效。并且子元素的display为inline-block属性。
    伸缩布局=弹性布局= 伸缩盒布局=弹性盒布局=flex布局
     

    常见父项属性:

    一下六个属性是对父元素进行设置的:

    • flex-direction:设置主轴方向
    • justify-content:设置主轴上子元素的排列方式
    • flex-wrap:设置子元素是否换行
    • align-items:设置侧轴上的子元素排列方式
    • flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap

    主轴和侧轴

    在flex布局中,分为主轴和侧轴两个方向,同样的叫法有:行和列、x轴和y轴。子元素跟着主轴排列

    • 默认主轴方向就是x轴方向,水平向右
    • 默认的侧轴的方向是y轴,水平向下

    设置主轴方向 flex-direction

    flex-direction属性决定主轴的方向(即项目的排列方向)

    属性值说明
    row默认值从左到右
    row-reverse从右到左
    column从上到下
    column-reverse从下到上

    设置主轴上的排列方式 justify-content(重要):

    justify-content属性定义了项目在主轴上的对齐方式

    注意使用这个属性之前一定要先确定好主轴是哪个

    属性值说明
    flex-start默认值  从头开始排列
    flex-end从尾部开始排列
    center在主轴居中对齐(如果主轴是x轴则水平居中)
    space-around平分剩余空间
    space-between先两边贴边在平分中间剩余空间

     这里我就拿space-between举例,可以看见1和4都是紧贴在两侧,2和3来平分中间的

    ae91e5074879478bb428cf2640b8bee2.png

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>flex-flow小案例title>
    8. <style>
    9. section {
    10. display: flex;
    11. width: 80%;
    12. height:200px;
    13. border: 2px solid black;
    14. margin: 0 auto;
    15. /*注意是父元素属性哟 */
    16. justify-content: space-between;
    17. }
    18. section div:nth-child(1){
    19. width: 100px;
    20. height: 150px;
    21. background-color: pink;
    22. }
    23. section div:nth-child(2){
    24. width: 100px;
    25. height: 150px;
    26. background-color: green;
    27. }
    28. section div:nth-child(3){
    29. width: 100px;
    30. height: 150px;
    31. background-color: red;
    32. }
    33. section div:nth-child(4){
    34. width: 100px;
    35. height: 150px;
    36. background-color: blue;
    37. }
    38. style>
    39. head>
    40. <body>
    41. <section>
    42. <div>1div>
    43. <div>2div>
    44. <div>3div>
    45. <div>4div>
    46. section>
    47. body>
    48. html>

    设置侧轴上的子元素排列方式 align-items(单行)

    align-items是控制在侧轴上的排列方式,在子项为单项时使用(当侧轴为x轴时,设置为center属性可以实现子元素垂直居中)

             属性值                                    说明
    flex-start默认值 y为侧轴则从事从上到下
    flex-end从下到上
    center垂直居中
    stretch拉伸

    设置侧轴上子元素的排列方式 align-content(多行)

    align-content设置在侧轴上的排列方式并且只能用于子项出现换行的情况(多行)

    属性值说明
    flex-start默认值在侧轴头部开始排列
    flex-end在侧轴尾部开始排列
    center在侧轴中间开始排列
    space-around子项在侧轴平分剩余空间
    space-between子项在侧轴先分布在两头后平分剩余空间
    stretch        设置子项元素高度平分父元素高度

    align-content与align-items区别

    • align-content适用于换行(多行)的情况下(单行情况下无效),可以设置上对齐,下对齐,居中、拉伸以及平均分配剩余空间等属性值
    • align-items适用于单行情况下,只有上对齐、下对齐、居中和拉伸
    • 总结就是单行找align-items,多行找align-content

    flex-flow :

    flex-flow属性是flex-direction和flex-wrap属性的复合属性
    flex-flow:row wrap;
    flex-direction:设置主轴的方向
    justify-content:设置生轴上的子元素排列方式
    flex-wrap:设置子元素是否换行
    align-content:设置侧轴上的子元素的排列方式(多行)
    align-items:设置侧轴上的子元素排列方式(单行)
    flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap
     

    案例:

    你可以看到使用注释区域的代码和使用flex-flow: column wrap;效果是一样的

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>flex-flow小案例title>
    8. <style>
    9. div {
    10. display: flex;
    11. width:600px;
    12. height:300px;
    13. background-color: aquamarine;
    14. /* flex-direction: column;
    15. flex-wrap: wrap; */
    16. /* 复合形式: */
    17. flex-flow: column wrap;
    18. }
    19. div span{
    20. width: 150px;
    21. height:100px;
    22. background-color: aqua;
    23. }
    24. style>
    25. head>
    26. <body>
    27. <div>
    28. <span>1span>
    29. <span>2span>
    30. <span>3span>
    31. <span>4span>
    32. <span>5span>
    33. div>
    34. body>
    35. html>

    常见子项属性:

    • flex子项占的份数
    • align-self控制子项自己的侧轴排列方式(就是如果一行有5个盒子,前面的父项属性是控制所有的子项,这里是可以自己控制自己的 排列方式)
    • order属性定义子项的排列顺序(前后顺序)

    flex属性

    flex属性定义子项目分配剩余空间你进啊,用flex来表示占多少份。

    是 flex-grow、flex-shrink、flex-basis三个属性的缩写。flex:1; 是flex:0 1 auto ;的缩写

    • flex-grow:控制放大比例,默认值为0,即表示就算有剩余空间也不会放大
    • flex-shink:控制缩放比例,默认为1,表示空间不足默认缩小一倍
    • flex-basis:初始所占的空间

    flex:1;是什么意思以及它的缩写在面试经常会被问到。

    这个案例也叫圣杯布局,也是淘宝所使用的,你可以进行缩放,两边不变,中间大小在改变

    基础:

    07a0f6203c444a09b0606aa5c38ec3fa.png

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>flex-flow小案例title>
    8. <style>
    9. section {
    10. display: flex;
    11. width: 60%;
    12. height:150px;
    13. background-color: skyblue;
    14. margin: 0 auto;
    15. }
    16. section div:nth-child(1){
    17. width: 100px;
    18. height: 150px;
    19. background-color: pink;
    20. }
    21. section div:nth-child(2){
    22. /* 这里占一份左右剩下来的空间 */
    23. flex:1
    24. }
    25. section div:nth-child(3){
    26. width: 100px;
    27. height: 150px;
    28. background-color: red;
    29. }
    30. style>
    31. head>
    32. <body>
    33. <section>
    34. <div>1div>
    35. <div>2div>
    36. <div>3div>
    37. section>
    38. body>
    39. html>

    进阶:

     效果图:

    d7092ed57be5418c9d03049e07c0e0c0.png

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>flex-flow小案例title>
    8. <style>
    9. .box{
    10. display: flex;
    11. width: 60%;
    12. height:150px;
    13. background-color: skyblue;
    14. margin: 100px auto;
    15. }
    16. .box div {
    17. flex:1;
    18. }
    19. .box >div:nth-child(1){
    20. /* 注意这里得加大于号,表示是儿子辈,不然等一下2号里面的2-1,2-2会受到影响 */
    21. background-color: gray;
    22. }
    23. .box >div:nth-child(2){
    24. display: flex;
    25. flex-direction: column;
    26. background-color: beige;
    27. }
    28. .box >div:nth-child(3){
    29. background-color:yellow;
    30. }
    31. .d1 {
    32. flex:1;
    33. background-color: red;
    34. }
    35. .d2 {
    36. flex:1;
    37. background-color: pink;
    38. }
    39. style>
    40. head>
    41. <body>
    42. <div class="box">
    43. <div>1div>
    44. <div>
    45. <div class="d1">2-1div>
    46. <div class="d2">2-2div>
    47. div>
    48. <div>3div>
    49. div>
    50. body>
    51. html>

     align-self控制子项自己在侧轴上的排列方式(了解)


    align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
    默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
    在这里如果在父亲中设置align-items的话就是三个孩子一起排列在最下方,但是我们这里想要第三个孩子单独行动就可以用align-self:flex-end

    d822f2f0fb6146e585d8a4925872d90d.png

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>flex-flow小案例title>
    8. <style>
    9. section {
    10. display: flex;
    11. width: 60%;
    12. height:400px;
    13. border: 2px solid black;
    14. margin: 0 auto;
    15. /* 三个孩子沿着底侧对齐 */
    16. /* align-items: flex-end; */
    17. }
    18. section div:nth-child(1){
    19. width: 100px;
    20. height: 150px;
    21. background-color: pink;
    22. }
    23. section div:nth-child(2){
    24. width: 100px;
    25. height: 150px;
    26. background-color: green;
    27. }
    28. section div:nth-child(3){
    29. width: 100px;
    30. height: 150px;
    31. background-color: red;
    32. /* 脱离团体单独行动 */
    33. align-self: flex-end;
    34. }
    35. style>
    36. head>
    37. <body>
    38. <section>
    39. <div>1div>
    40. <div>2div>
    41. <div>3div>
    42. section>
    43. body>
    44. html>

    order属性定义项目的排列顺序

    数值越小,排列越靠前,默认为0,这里需要注意的是和z-index不一样。这里我们就直接拿上面的这个例子,注意我们是想要把2号盒子放在一号盒子的前面但是并不改变结构。

    1ad6ceba2a35432d97eea420d753a8ec.png

     这里我们只需要在第二个孩子中加一句 order:-1;就可以了

  • 相关阅读:
    JS中的括号和点号
    如何抓取 GitHub:实用教程 2024
    Docker下常规软件安装
    《JavaScript前端开发与实例教程(微课视频版)》
    77. 组合
    TiDB Lightning 数据源
    元数据管理-解决方案调研二:元数据管理解决方案——Saas/内部解决方案(1)
    unity 渲染环境设置
    NR/5G - PUSCH repetition次数
    新闻资讯|基于微信小程序的经济新闻资讯系统设计与实现(源码+数据库+文档)
  • 原文地址:https://blog.csdn.net/qq_51580852/article/details/126630472