博客列表 >CSS进阶知识flex弹性布局容器与项目

CSS进阶知识flex弹性布局容器与项目

wen。
wen。原创
2021年01月27日 19:11:06707浏览

flex弹性盒模型

flex弹性布局为容器,容器的”子元素”为项目;容器拥有主轴和交叉轴,采用flex布局后,内部盒子的宽高可以自动适应。

一、flex模块化

模块 描述
容器 具有display:flex属性元素
项目 flex容器的”子元素”
主轴 项目排列的轴线
交叉轴 与主轴垂直的轴线

二、flex属性

属性
flex-flow 主轴方向与换行方式
justify-content 项目在主轴上的对齐方式
align-items 项目在交叉轴上的对齐方式
align-content 项目在对行容器中的对齐方式

三、容器

3.1 flex-flow

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>弹性项目在主轴的排列方式</title>
  7. <style>
  8. *{
  9. box-sizing: border-box;
  10. }
  11. .container{
  12. /* 转为flex弹性布局元素 */
  13. display: flex;
  14. border: 1px solid #333;
  15. margin: 1em;
  16. padding: 1em;
  17. }
  18. .container .item{
  19. background-color: lightgreen;
  20. height: 5em;
  21. width: 5em;
  22. border: 1px solid #333;
  23. text-align: center;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="container">
  29. <div class="item">item1</div>
  30. <div class="item">item2</div>
  31. <div class="item">item3</div>
  32. <div class="item">item4</div>
  33. <div class="item">item5</div>
  34. <div class="item">item6</div>
  35. <div class="item">item7</div>
  36. <div class="item">item8</div>
  37. </div>
  38. </body>
  39. </html>
  • 当flex为单行容器

    1. /* 单行容器 */
    2. .container{
    3. flex-flow: row nowrap;
    4. }

  • 当flex为多行容器

    1. /* 多行容器;一行显示不下,即可换行显示 */
    2. .container{
    3. flex-flow: row wrap;
    4. }

    弹性盒子

  • 当flex容器为垂直,并且不换行

    1. .container{
    2. flex-flow: column nowrap;
    3. }

    弹性布局

  • 当flex容器为垂直,并且换行

    1. .container{
    2. height: 15em;
    3. flex-flow: column wrap;
    4. }

    弹性布局

3.2 弹性项目对齐方式

注意:设置项目在单行容器上轴的对齐前提:主轴必须存在剩余空间

  • 主轴单行容器的对齐方式
属性 描述
justify-content flex-start 左对齐(默认值)
justify-content flex-end 右对齐
justify-content center 居中
justify-content space-between 两端对齐
justify-content space-around 分散对齐
justify-content space-evenly 平均对齐

项目布局

  • 交叉轴上的对齐方式
属性 描述
align-items flex-start 交叉轴的起点对齐
align-items flex-end 交叉轴的终点对齐
align-items center 交叉轴的中点对齐
align-items stretch 如果项目未设置高度或设为auto,将占满整个容器的高度(默认值)

四、项目

属性 描述
flex 项目的缩放比例与基准宽度
align-self 单个项目在交叉轴上的对齐方式
order 项目在主轴上排序顺序

4.1 flex

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto;

属性 描述
flex flex-grow 放大因子
flex flex-shrink 收缩因子
flex flex-basis 项目在主轴上的基准宽度
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>弹性项目在主轴的排列方式</title>
  7. <style>
  8. *{
  9. box-sizing: border-box;
  10. }
  11. .container{
  12. /* 转为flex弹性布局元素 */
  13. display: flex;
  14. border: 1px solid #333;
  15. height: 15em;
  16. margin: 1em;
  17. padding: 1em;
  18. }
  19. .container .item{
  20. background-color: yellow;
  21. width: 5em;
  22. margin-bottom: 1em;
  23. border: 1px solid #333;
  24. text-align: center;
  25. }
  26. /* 交叉轴的对齐方案 */
  27. .container{
  28. align-items: stretch;
  29. align-items: center;
  30. align-items: flex-end;
  31. align-items: flex-start;
  32. }
  33. /* 项目属性 flex */
  34. .container .item{
  35. flex: 0 1 auto;
  36. flex: inherit;
  37. /* 允许放大和收缩 */
  38. flex: 1 1 auto;
  39. flex: auto;
  40. /* 禁止放大和收缩 */
  41. flex: 0 0 auto;
  42. flex: none;
  43. /* 如果只有一个数值,省掉后面两个参数,表示放大基因 */
  44. flex: 1;
  45. flex: 2;
  46. flex: 3;
  47. /* flex通常不会用来设置所有项目的默认选项,通常用来设置某一个项目的特征 */
  48. }
  49. /* 写一个案例,要求第2个和第3个项目的宽度是第1个和第四个2倍 */
  50. .container .item:nth-child(2),.container .item:nth-child(3){
  51. flex: 2;
  52. }
  53. .container .item:nth-child(1),.container .item:nth-child(4){
  54. flex: 1;
  55. }
  56. </style>
  57. </head>
  58. <body>
  59. <div class="container">
  60. <div class="item">item1</div>
  61. <div class="item">item2</div>
  62. <div class="item">item3</div>
  63. <div class="item">item4</div>
  64. </body>
  65. </html>

4.2 align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性;

align-self

4.2 order
order属性定义项目的排列顺序,数值越小,排列越靠前,默认为0;
排序

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议