Blogger Information
Blog 48
fans 3
comment 1
visits 30313
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
弹性盒子flex的常用6个属性
吴长清
Original
1529 people have browsed it

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------------- */

效果预览

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post