博客列表 >【CSS】布局技术一:Flex 布局技术(一维)

【CSS】布局技术一:Flex 布局技术(一维)

可乐随笔
可乐随笔原创
2022年11月27日 20:21:48660浏览

Flex 布局(一维)

flex: 弹性盒布局

Flex 术语

  1. flex 容器: display: flex / inline-flex
  2. flex 项目: flex 容器的子元素(仅限子元素,可嵌套)
  3. flex 主轴: 项目排列参考线
  4. flex 交叉轴: 与主轴垂直的参考线

主轴,交叉轴不可见, 仅供布局参考

Flex 属性

(一) 容器属性

  1. display: 容器类型(块或行内)
  2. flex-flow: 主轴方向与是否换行
  3. place-content: 项目在”主轴”上的排列方式
  4. place-items: 项目在”交叉轴”上的排列方式

(二) 项目属性

  1. flex: 项目在”主轴”上的缩放比例与宽度
  2. place-self 某项目在”交叉轴”上的排列方式
  3. order: 项目在”主轴”上的排列顺序

更多: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout

示例代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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属性简介</title>
  8. </head>
  9. <body>
  10. <div class="container">
  11. <div class="item">item1</div>
  12. <div class="item">item2</div>
  13. <div class="item">item3</div>
  14. </div>
  15. <style>
  16. /* flex容器 */
  17. .container {
  18. width: 450px;
  19. height: 50px;
  20. /* flex: 行内块 */
  21. display: flex;
  22. /* 1. 默认状态 */
  23. /* 主轴方向 */
  24. /* flex-direction: row; */
  25. /* 是否换行 */
  26. /* flex-wrap: nowrap; */
  27. /* 主轴排列 */
  28. /* justify-content: start; */
  29. /* 单行(不换行) */
  30. align-items: stretch;
  31. /* 多行(换行) */
  32. align-content: start;
  33. /* ---------------------------- */
  34. /* flex-flow: flex-direction flex-wrap; */
  35. flex-flow: row nowrap;
  36. /* 为了与grid统一记忆,使用`place-`为前缀的属性替换原来flex- */
  37. /* justify-content -> place-content 替换; */
  38. place-content: start;
  39. /* ( align-items, align-content ) -> place-items 替换; */
  40. place-items: stretch;
  41. /* 将 5 个 容器属性 , 减少到 3 个 */
  42. /* ---------------------------- */
  43. /* 3. 自定义属性值 */
  44. /* (1) flex-flow:主轴方向, 多行容器 */
  45. /* flex-flow: row nowrap;
  46. flex-flow: column nowrap;
  47. flex-flow: column wrap; */
  48. /* (2) place-content: 主轴排列与"对齐"(通过分配剩余空间实现) */
  49. place-content: start;
  50. /* 居右 */
  51. place-content: end;
  52. /* 居中 */
  53. place-content: center;
  54. /* 二端对齐 */
  55. place-content: space-between;
  56. /* 分散对齐 */
  57. place-content: space-around;
  58. /* 平均对齐 */
  59. place-content: space-evenly;
  60. /* (3) place-items: 交叉轴排列 */
  61. place-items: stretch;
  62. /* place-items: start;
  63. place-items: end;
  64. place-items: center; */
  65. /* 因为是单行容器,所以不涉及对齐方式 */
  66. }
  67. /* flex项目 */
  68. .container > .item {
  69. /* width: 100px; */
  70. background-color: lightgreen;
  71. /* 项目属性 */
  72. /* (1) flex : 项目缩放比例与宽度 */
  73. /* flex: flex-grow flex-shrink flex-basis */
  74. /* flex: 放大比例 缩小比例 计算宽度 */
  75. /* 1. 默认状态(部分响应): 不放大,允许缩小,宽高自动 */
  76. flex: 0 1 auto;
  77. flex: initial;
  78. /* 2. 完全响应: 允许放大,允许缩小,宽高自动 */
  79. flex: 1 1 auto;
  80. flex: auto;
  81. /* 3. 完全不响应: 禁止放大,禁止缩小,宽高自动 */
  82. flex: 0 0 auto;
  83. /* flex: 0 0 200px; */
  84. /* min-width > flex-basis > width */
  85. /* min-width: 250px; */
  86. flex: none;
  87. /* 常用缩写 */
  88. flex: 1;
  89. /* 完整 */
  90. /* flex: 1 1 auto;
  91. flex: auto; */
  92. /* flex: 1; */
  93. /* flex: 2; */
  94. /* flex: 9; */
  95. }
  96. /* 例如, 有一个三列布局, 中间一列的宽度,是二边的3倍 */
  97. .container .item:first-of-type,
  98. .container .item:last-of-type {
  99. flex: 1;
  100. background-color: yellow;
  101. }
  102. .container .item:first-of-type + * {
  103. background-color: wheat;
  104. flex: 3;
  105. /* 自定义某个项目在交叉轴上的排列 */
  106. /* place-self: start;
  107. place-self: end; */
  108. }
  109. /* 第一个 */
  110. .container .item:first-of-type {
  111. order: -1;
  112. background-color: violet;
  113. }
  114. /* 第二个 */
  115. .container .item:first-of-type + * {
  116. order: 1;
  117. }
  118. /* 第三个 */
  119. .container .item:last-of-type {
  120. order: 0;
  121. }
  122. </style>
  123. </body>
  124. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议