博客列表 >弹性盒子flex的常用6个属性

弹性盒子flex的常用6个属性

吴长清
吴长清原创
2022年07月14日 10:49:031530浏览

1.flex容器上的三个必知属性

序号 属性 描述
1 flex-flow 控制主轴方向与项目是否允许换行
2 place-content 容器剩余空间在项目之间进行分配
3 place-items 项目在交叉轴上的对齐方式

1.1 flex-flow

flex-flow: value1 value2其中value1控制主轴上的方向,row:水平排列(默认)或column垂直排列;value2控制是否允许换行,nowrap不换行(默认)或wrap换行

例如:flex-flow: row wrap则表示flex容器内的项目水平排列且允许换行,如下:

  1. <div class="container">
  2. <div class="item">iten1</div>
  3. <div class="item">iten2</div>
  4. <div class="item">iten3</div>
  5. <div class="item">iten4</div>
  6. <div class="item">iten5</div>
  7. </div>
  8. <style>
  9. body .container {
  10. /* 转为弹性盒子flex */
  11. display: flex;
  12. /* 容器内的项目水平排列且允许换行 */
  13. flex-flow: row wrap;
  14. }
  15. </style>

1.2 flex-content

flex-content在主轴(横轴)方向的六个常用的属性(水平排列)

序号 属性 描述
1 start 左对齐 剩余空间在项目的右侧(默认值)
2 end 右对齐 剩余空间在项目的左侧
3 center 水平居中 剩余空间平均分配在项目两侧
4 space-between 两端对齐 剩余空间在除首尾两个项目外平均分配
5 space-around 分散对齐 剩余空间在每个项目的两侧平均分配
6 space-evenly 平均对齐/等间距 剩余空间在每个项目之间平均分配

例如:flex-content:space-evenly项目之间的剩余空间相等,换句话说项目之间的距离相等,如下

  1. <div class="container">
  2. <div class="item">iten1</div>
  3. <div class="item">iten2</div>
  4. <div class="item">iten3</div>
  5. <div class="item">iten4</div>
  6. <div class="item">iten5</div>
  7. </div>
  8. <style>
  9. body .container {
  10. /* 转为弹性盒子flex */
  11. display: flex;
  12. /* 平均对齐/等间距 */
  13. place-content: space-evenly ;
  14. }
  15. </style>

1.3 flex-items

flex-items在交叉轴(竖轴)方向的四个常用的属性(垂直排列)

序号 属性 描述
1 stretch 拉伸: 默认值, 自动拉伸成等高列
2 start 顶对齐: 项目从交叉轴起始线开始排列
3 end 底对齐: 项目从交叉轴终止线开始排列
4 center 居中对齐: 项目在交叉轴中居中显示

例如:flex-items:center项目在交叉轴方向上居中显示,如下

  1. <div class="container">
  2. <div class="item">iten1</div>
  3. <div class="item">iten2</div>
  4. <div class="item">iten3</div>
  5. <div class="item">iten4</div>
  6. <div class="item">iten5</div>
  7. </div>
  8. <style>
  9. body .container {
  10. /* 转为弹性盒子flex */
  11. display: flex;
  12. /* 项目在交叉轴方向居中对齐 */
  13. place-items: center;
  14. }
  15. </style>

2.flex项目上的三个必知属性

序号 属性 描述
1 flex 项目在主轴中的缩放因子与宽度
2 order 项目在主轴上的顺序
3 place-self 控制某一个项目在交叉轴上的对齐方式

2.1 flex

语法:flex:放大因子(0/1),缩小因子(0/1),计算宽度

序号 属性 描述
1 inital 默认值,等价于flex:0 1 auto ,禁止放大、允许缩小和自动计算宽度
2 auto 等价于flex:1 1 auto 完全响应式,允许放大和缩小且自动计算宽度
3 none 等价于flex:0 0 auto 非响应式,禁止放大和缩小且自动计算宽度

例如:flex:inital项目属性flex的默认值,等价于flex:0 1 auto,表示禁止放大,允许缩小,宽度自动计算;若当前项目没有设置宽度,则自动计算内容的宽度,如下

  1. <div class="container">
  2. <div class="item">iten1</div>
  3. <div class="item">iten2</div>
  4. <div class="item">iten3</div>
  5. <div class="item">iten4</div>
  6. <div class="item">iten5</div>
  7. </div>
  8. <style>
  9. body .container {
  10. /* 转为弹性盒子flex */
  11. display: flex;
  12. }
  13. body .container .item {
  14. flex: initial;
  15. }
  16. </style>

2.2 order

改变项目在主轴方向的排列顺序(书写顺序/文档流顺序),值越小项目就越靠前,且支持负数,默认值是0,显示顺序即书写顺序

序号 属性 描述
1 order 0 默认值, 显示顺序与源码顺序一致
2 order: 2 显示在<2的右侧
3 order: -2 允许负数

例如:将item3放在item2之前,且item1排在最后,分别使用了order:-1order:6,如下:

  1. <div class="container">
  2. <div class="item">item1</div>
  3. <div class="item">item2</div>
  4. <div class="item">item3</div>
  5. <div class="item">item4</div>
  6. <div class="item">item5</div>
  7. </div>
  8. <style>
  9. body .container .item:first-of-type {
  10. background-color: aqua;
  11. /* 排序 */
  12. order: 6;
  13. }
  14. body .container .item:nth-of-type(3) {
  15. background-color: yellow;
  16. /* 排序 */
  17. order: -1;
  18. }
  19. </style>

2.3 place-self

控制某一个项目在交叉轴的对齐方式(垂直方向)

序号 属性 描述
1 stretch 拉伸: 默认值, 自动拉伸成等高列
2 start 顶对齐: 项目从交叉轴起始线开始排列
3 end 底对齐: 项目从交叉轴终止线开始排列
4 center 居中对齐: 项目在交叉轴中居中显示

例如:将item1设置为自动拉伸,item2和item3顶对齐,item4底对齐,item5居中对齐,如下:

  1. <div class="container">
  2. <div class="item">item1</div>
  3. <div class="item">item2</div>
  4. <div class="item">item3</div>
  5. <div class="item">item4</div>
  6. <div class="item">item5</div>
  7. </div>
  8. <style>
  9. body .container .item:first-of-type {
  10. background-color: aqua;
  11. /* 拉伸 */
  12. place-self: stretch;
  13. }
  14. body .container .item:first-of-type + .item {
  15. background-color: lightskyblue;
  16. /* 顶对齐 */
  17. place-self: start;
  18. }
  19. body .container .item:nth-of-type(3) {
  20. background-color: yellow;
  21. /* 顶对齐 */
  22. place-self: start;
  23. }
  24. body .container .item:nth-of-type(4) {
  25. background-color: lightpink;
  26. /* 底对齐 */
  27. place-self: end;
  28. }
  29. body .container .item:last-of-type {
  30. background-color: lightskyblue;
  31. /* 居中对齐 */
  32. place-self: center;
  33. }
  34. </style>

3.使用flex布局的小案例

html代码

  1. <!-- 页眉 -->
  2. <header>
  3. <div class="headerTop">
  4. <div class="content">
  5. <div class="text">php中文网-程序员梦开始的地方</div>
  6. <div class="loginRigister">
  7. <a href="#" class="login">登录</a>
  8. <span style="color: white">/</span>
  9. <a href="#" class="register">注册</a>
  10. </div>
  11. </div>
  12. </div>
  13. <div class="herderNav">
  14. <div class="navs">
  15. <a href="#"><img src="images/logo.png" alt="" /></a>
  16. <ul>
  17. <li class="item">首页</li>
  18. <li class="item">视频教程</li>
  19. <li class="item">php培训</li>
  20. <li class="item">资源下载</li>
  21. <li class="item">技术文章</li>
  22. <li class="item">社区交流</li>
  23. <li class="item">App下载</li>
  24. </ul>
  25. </div>
  26. </div>
  27. </header>
  28. <!-- 主体 -->
  29. <div class="wrap">
  30. <!-- 左侧 -->
  31. <aside class="left">
  32. <a href="">php开发</a>
  33. <a href="">大前端</a>
  34. <a href="">后端开发</a>
  35. <a href="">数据库</a>
  36. <a href="">移动端</a>
  37. <a href="">运维开发</a>
  38. <a href="">UI设计</a>
  39. <a href="">计算机基础</a>
  40. </aside>
  41. <!-- 主体内容区 -->
  42. <main class="main">
  43. <a href="#"><img src="images/123.jpeg" alt="" /></a>
  44. </main>
  45. <!-- 右侧 -->
  46. <aside class="right">
  47. <div class="rightTop">
  48. <div class="top">
  49. <img src="images/tlbb.png" alt="头像" />
  50. <span>同步app学习</span>
  51. </div>
  52. <div class="bottom">
  53. <button class="login">登录</button>
  54. <button class="register">注册</button>
  55. </div>
  56. </div>
  57. <hr />
  58. <div class="rightBottom">
  59. <!-- <span>问答社区</span><span>答疑</span>
  60. <span>头条</span><a href="#">200年最新前段</a> -->
  61. </div>
  62. </aside>
  63. </div>
  64. <!-- 页脚 -->
  65. <footer>页脚</footer>

CSS代码

  1. /* 设置公共样式 */
  2. * {
  3. padding: 0;
  4. margin: 0;
  5. /* outline: 1px dashed red; */
  6. }
  7. /* 改变a标签的公共样式 */
  8. body a {
  9. text-decoration: none;
  10. color: black;
  11. }
  12. /* 去掉ul的小圆点 */
  13. body ul {
  14. list-style-type: none;
  15. }
  16. /* 使用flex初始化布局 */
  17. /* -----------------start------------- */
  18. body header,
  19. body footer {
  20. background-color: lawngreen;
  21. }
  22. body {
  23. display: flex;
  24. flex-flow: column nowrap;
  25. background-color: rgba(226, 222, 222, 0.384);
  26. }
  27. body .wrap {
  28. display: flex;
  29. /* 设置外边距 上下10px 左右居中*/
  30. margin: 10px auto;
  31. width: 80%;
  32. /* 设置最小宽度 防止变形 */
  33. min-width: 1000px;
  34. }
  35. body .wrap .left,
  36. body .wrap .right {
  37. width: 200px;
  38. }
  39. body .wrap .main {
  40. margin: 10px auto;
  41. }
  42. /* -----------------end------------- */
  43. /* 设置头部顶部的样式 */
  44. /* -----------------start------------- */
  45. body header .headerTop {
  46. width: 100%;
  47. height: 30px;
  48. /* 文本上下居中 */
  49. line-height: 30px;
  50. background-color: #343434;
  51. }
  52. body header .headerTop .content {
  53. width: 80%;
  54. margin: auto;
  55. /* 转为弹性盒子 */
  56. display: flex;
  57. /* 在主轴方向两端对齐 */
  58. place-content: space-between;
  59. }
  60. body header .headerTop .content .text {
  61. color: gainsboro;
  62. }
  63. body header .headerTop .content .loginRigister a {
  64. color: white;
  65. }
  66. /* -----------------end------------- */
  67. /* 设置头部底部的样式 */
  68. /* -----------------start------------- */
  69. body header .herderNav {
  70. width: 100%;
  71. height: 80px;
  72. line-height: 80px;
  73. background-color: #fff;
  74. /* box-shadow: *水平阴影 *垂直阴影 模糊距离 阴影大小 阴影颜色 向内阴影; */
  75. box-shadow: 0 4px 8px 0 rgba(7, 17, 27, 0.1);
  76. }
  77. body header .herderNav .navs {
  78. width: 80%;
  79. height: 80px;
  80. margin: auto;
  81. display: flex;
  82. /* background-color: blue; */
  83. }
  84. body header .herderNav .navs img {
  85. width: 140px;
  86. margin: 5px;
  87. }
  88. body header .herderNav .navs ul {
  89. width: 60%;
  90. display: flex;
  91. place-content: space-evenly;
  92. }
  93. body header .herderNav .navs ul li {
  94. width: 100px;
  95. min-width: 70px;
  96. text-align: center;
  97. }
  98. body header .herderNav .navs ul li:first-of-type {
  99. color: red;
  100. font-weight: bold;
  101. }
  102. /* -----------------end------------- */
  103. /* 设置主体左侧的样式 */
  104. /* -----------------start------------- */
  105. body .wrap .left {
  106. display: flex;
  107. background-color: #fff;
  108. flex-flow: column nowrap;
  109. height: 500px;
  110. place-content: space-evenly;
  111. border-radius: 20px;
  112. box-shadow: 0 4px 8px 0 rgba(7, 17, 27, 0.1);
  113. }
  114. body .wrap .left a {
  115. width: 150px;
  116. height: 40px;
  117. text-align: center;
  118. line-height: 40px;
  119. margin: 0 auto;
  120. }
  121. body .wrap .left a:hover {
  122. background-color: lightpink;
  123. border-radius: 20px;
  124. color: red;
  125. font-weight: bold;
  126. /* 设置透明度 */
  127. opacity: 0.8;
  128. }
  129. /* -----------------end------------- */
  130. /* 设置主体内容区的样式 */
  131. /* -----------------start------------- */
  132. body .wrap .main img {
  133. width: 100%;
  134. border-radius: 20px;
  135. }
  136. /* -----------------end------------- */
  137. /* 设置主体右侧的样式 */
  138. /* -----------------start------------- */
  139. body .wrap .right {
  140. background-color: white;
  141. border-radius: 20px;
  142. box-shadow: 0 4px 8px 0 rgba(7, 17, 27, 0.1);
  143. }
  144. body .wrap .right .rightTop .top {
  145. display: flex;
  146. width: 100%;
  147. height: 80px;
  148. place-content: space-between;
  149. }
  150. body .wrap .right .rightTop .top img {
  151. width: 50px;
  152. height: 50px;
  153. border-radius: 50px;
  154. margin-left: 15px;
  155. place-self: center;
  156. }
  157. body .wrap .right .rightTop .top span {
  158. margin-right: 15px;
  159. place-self: center;
  160. opacity: 0.7;
  161. }
  162. body .wrap .right .rightTop .bottom {
  163. width: 100%;
  164. display: flex;
  165. height: 60px;
  166. place-content: space-evenly;
  167. }
  168. body .wrap .right .rightTop .bottom .login,
  169. body .wrap .right .rightTop .bottom .register {
  170. width: 80px;
  171. height: 30px;
  172. place-self: center;
  173. cursor: pointer;
  174. color: #fff;
  175. border: none;
  176. border-radius: 20px;
  177. }
  178. body .wrap .right .rightTop .bottom .login {
  179. background-color: red;
  180. }
  181. body .wrap .right .rightTop .bottom .register {
  182. background-color: lavender;
  183. color: #343434;
  184. }
  185. /* -----------------end------------- */
  186. /* 设置页脚的样式 */
  187. /* -----------------start------------- */
  188. body footer{
  189. background-color: antiquewhite;
  190. height: 50px;
  191. text-align: center;
  192. line-height: 50px;
  193. color: red;
  194. }
  195. /* -----------------end------------- */

效果预览

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