Blogger Information
Blog 13
fans 0
comment 0
visits 11191
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用 FlexBox(弹性布局)对 PC 端和移动端的布局方案
忠于原味
Original
957 people have browsed it

了解 FlexBox 的常用属性

属性 描述
flex-direction: 设置主轴方向默认水平方向:row
flex-wrap: 主轴上的项目是否换行默认不换行:nowrap
flex-flow: flex-direction:flex-wrap:的简写:flex-flow: flex-direction flex-wrap;
justify-content: 当主轴上存在剩余空间时,控制空间在项目上的分配方案
align-items: 控制所有项目在交叉轴上的对齐方式
align-content: 仅适用于多行容器,控制项目的对齐方式
align-self: 控制单个项目在交叉轴上的对齐方式
flex-grow: 设置项目在主轴空间上的增长因子默认为 0,不放大,作用:可控的让项目增长一定的尺寸填补剩余的空间;
flex-shrink: 收缩因子有效的前提是,所有项目宽度之和必须大于主轴上的当前空间大小,默认是 1
flex-basis: 设置基础尺寸大小,优先级为:min-width > flex-basis > width
flex: 增长因子,收缩因子,基础尺寸的简写例如:flex: 0 1 auto;//默认不放大,可收缩,尺寸使用原始大小

布局的大致思路

  • 如下布局思路,可见页面由导航栏,主体部分,底部三部分构成,所以设置主轴方向为列方向最优。

PC 端布局的通用的解决方案

  • 实例代码:
  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>PC端布局的通用的解决方案</title>
  7. <style>
  8. /* 初始化 */
  9. * {
  10. padding: 0;
  11. margin: 0;
  12. box-sizing: border-box;
  13. }
  14. a {
  15. text-decoration: none;
  16. color: #666;
  17. }
  18. body {
  19. min-width: 680px;
  20. display: flex;
  21. /* 主轴垂直方向,不换行 */
  22. flex-flow: column nowrap;
  23. }
  24. header,
  25. footer {
  26. height: 50px;
  27. border: 1px solid #000;
  28. }
  29. /* 将页眉转为弹性盒子 */
  30. header {
  31. display: flex;
  32. /* 所有项目在交叉轴方向上垂直居中显示 */
  33. align-items: center;
  34. }
  35. header > a {
  36. /* 不放大,可收缩,尺寸100px */
  37. flex: 0 1 100px;
  38. /* 文本内容水平居中 */
  39. text-align: center;
  40. }
  41. header > a:first-of-type {
  42. margin-right: 50px;
  43. }
  44. /* 登录/注册靠右 */
  45. header > a:last-of-type {
  46. margin-left: auto;
  47. }
  48. /* 鼠标悬停时忽略logo */
  49. header > a:hover:not(:first-of-type) {
  50. color: coral;
  51. }
  52. .container {
  53. min-height: 400px;
  54. margin: 10px auto;
  55. display: flex;
  56. justify-content: center;
  57. }
  58. .container > aside,
  59. .container > main {
  60. border: 1px solid #000;
  61. padding: 10px;
  62. }
  63. .container > aside {
  64. flex: 0 0 200px;
  65. }
  66. .container > main {
  67. flex: 0 0 600px;
  68. margin: 0 10px;
  69. }
  70. footer {
  71. display: flex;
  72. /* 主轴方向列方向,不换行 */
  73. flex-flow: column nowrap;
  74. /* 文字水平居中 */
  75. text-align: center;
  76. }
  77. </style>
  78. </head>
  79. <body>
  80. <!-- 页眉 -->
  81. <header>
  82. <a href="">Logo</a>
  83. <a href="">首页</a>
  84. <a href="">栏目1</a>
  85. <a href="">栏目2</a>
  86. <a href="">栏目3</a>
  87. <a href="">登录</a>
  88. </header>
  89. <!-- 主体 -->
  90. <div class="container">
  91. <aside>左边栏</aside>
  92. <main>主体内容</main>
  93. <aside>右边栏</aside>
  94. </div>
  95. <!-- 页脚 -->
  96. <footer>
  97. <p>
  98. php中文网 &copy;版权所有 &nbsp;&nbsp;(2018-2022) | 备案号:
  99. <a href="">皖ICP-18********</a>
  100. </p>
  101. <p>中国.合肥市政务新区999号 | 电话: 0551-888999**</p>
  102. </footer>
  103. </body>
  104. </html>
  • 效果图:

移动端的解决方案

  • 实例代码:
  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. <link rel="stylesheet" href="static/font/iconfont.css" />
  7. <title>移动端的解决方案</title>
  8. <style>
  9. /* 初始化 */
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. box-sizing: border-box;
  14. }
  15. a {
  16. text-decoration: none;
  17. }
  18. html {
  19. /* vw: 可视区宽度,100指100份 */
  20. /* vh: 可视区高度, 100指100份 */
  21. width: 100vw;
  22. height: 100vh;
  23. }
  24. body {
  25. display: flex;
  26. flex-flow: column nowrap;
  27. }
  28. body > header {
  29. color: white;
  30. background-color: #333;
  31. height: 30px;
  32. display: flex;
  33. /* 垂直居中 */
  34. align-items: center;
  35. /* 两端对齐 */
  36. justify-content: space-between;
  37. /* 固定定位 */
  38. position: fixed;
  39. width: 100vw;
  40. }
  41. /* 轮播图 */
  42. body > .slider {
  43. height: 180px;
  44. }
  45. body > .slider > img {
  46. height: 100%;
  47. width: 100%;
  48. }
  49. /* 主导航区 */
  50. nav {
  51. height: 200px;
  52. margin-bottom: 10px;
  53. display: flex;
  54. /* 转为多行容器 */
  55. flex-flow: row wrap;
  56. align-content: space-around;
  57. }
  58. nav > div {
  59. width: 25vw;
  60. display: flex;
  61. /* 主轴垂直,不换行 */
  62. flex-flow: column nowrap;
  63. /* 垂直居中 */
  64. align-items: center;
  65. }
  66. nav > div > a:first-of-type {
  67. text-align: center;
  68. }
  69. nav > div img {
  70. width: 50%;
  71. }
  72. /* 每个区域的标题样式 */
  73. .title {
  74. margin-top: 10px;
  75. font-size: 1.2rem;
  76. font-weight: normal;
  77. text-align: center;
  78. }
  79. /* 热销商品区 */
  80. .hot-goods {
  81. border-top: 1px solid #cdcdcd;
  82. margin-top: 10px;
  83. font-size: 0.8rem;
  84. display: flex;
  85. /* 水平多行容器 */
  86. flex-flow: row wrap;
  87. }
  88. .hot-goods img {
  89. width: 100%;
  90. }
  91. .hot-goods > .goods-img {
  92. /* 内边距并重置大小 */
  93. padding: 10px;
  94. box-sizing: border-box;
  95. /* 允许放大不允许缩小,否则项目不会换行,多行容器失效 */
  96. flex: 1 0 30vw;
  97. /* 再将每个商品描述转为flex */
  98. display: flex;
  99. /* 主轴垂直且不允许换行 */
  100. flex-flow: column nowrap;
  101. justify-content: center;
  102. }
  103. /* 商品描述的最后一个区域转flex,并设置项目在主轴上排列对齐方式 */
  104. .hot-goods > .goods-img > div {
  105. display: flex;
  106. /* 分散对齐 */
  107. justify-content: space-around;
  108. }
  109. /* 热销样式 */
  110. .hot {
  111. color: coral;
  112. }
  113. /* 商品列表区 */
  114. .list-goods {
  115. padding: 10px;
  116. border-top: 1px solid #cdcdcd;
  117. margin-top: 10px;
  118. font-size: 0.8rem;
  119. display: flex;
  120. /* 主轴必须是垂直 */
  121. flex-flow: column nowrap;
  122. }
  123. /* 每个项目也转为flex */
  124. .list-goods > .goods-desc {
  125. margin: 10px 0;
  126. display: flex;
  127. }
  128. /* 列表中每个项目的样式,加些间距 */
  129. .list-goods > .goods-desc > a {
  130. padding: 10px;
  131. box-sizing: border-box;
  132. }
  133. .list-goods > .goods-desc > a:last-of-type:hover {
  134. color: lightseagreen;
  135. }
  136. /* 图片全部适应项目空间 */
  137. .list-goods img {
  138. width: 100%;
  139. }
  140. body > footer {
  141. color: #666;
  142. background-color: #efefef;
  143. border-top: 1px solid #ccc;
  144. height: 55px;
  145. position: fixed;
  146. bottom: 0;
  147. width: 100vw;
  148. display: flex;
  149. justify-content: space-evenly;
  150. }
  151. body > footer a {
  152. margin-top: 10px;
  153. font-size: 0.8rem;
  154. display: flex;
  155. /* 垂直排列不换行 */
  156. flex-flow: column nowrap;
  157. /* 交叉轴项目居中显示 */
  158. align-items: center;
  159. }
  160. body > footer a > span:first-of-type {
  161. /* 图标字体应该大一些 */
  162. font-size: 1.6rem;
  163. }
  164. </style>
  165. </head>
  166. <body>
  167. <header>
  168. <a href="">LOGO</a> <span class="iconfont icon-icon"></span>
  169. </header>
  170. <!-- 轮播图 -->
  171. <div class="slider"><img src="static/images/banner.jpg" alt="" /></div>
  172. <!-- 主导航区 -->
  173. <nav>
  174. <div>
  175. <a href=""><img src="static/images/link1.webp" alt="" /></a>
  176. <a href="">京东超市</a>
  177. </div>
  178. <div>
  179. <a href=""><img src="static/images/link2.webp" alt="" /></a>
  180. <a href="">服装百货</a>
  181. </div>
  182. <div>
  183. <a href=""><img src="static/images/link3.webp" alt="" /></a>
  184. <a href="">数码精品</a>
  185. </div>
  186. <div>
  187. <a href=""><img src="static/images/link4.webp" alt="" /></a>
  188. <a href="">优惠劵</a>
  189. </div>
  190. <div>
  191. <a href=""><img src="static/images/link1.webp" alt="" /></a>
  192. <a href="">超市精选</a>
  193. </div>
  194. <div>
  195. <a href=""><img src="static/images/link2.webp" alt="" /></a>
  196. <a href="">服装百货</a>
  197. </div>
  198. <div>
  199. <a href=""><img src="static/images/link3.webp" alt="" /></a>
  200. <a href="">数码精品</a>
  201. </div>
  202. <div>
  203. <a href=""><img src="static/images/link4.webp" alt="" /></a>
  204. <a href="">优惠劵</a>
  205. </div>
  206. </nav>
  207. <!-- 热销商品 -->
  208. <h2>热销商品<span class="iconfont icon-huoremen"></span></h2>
  209. <div class="hot-goods">
  210. <div class="goods-img">
  211. <a href=""><img src="static/images/goods1.jpg" alt="" /></a>
  212. <p>Apple iPhone 11 128G</p>
  213. <div>
  214. <span>6299&nbsp;元</span>
  215. <span class="iconfont icon-gouwuche"></span>
  216. </div>
  217. </div>
  218. <div class="goods-img">
  219. <a href=""><img src="static/images/goods1.jpg" alt="" /></a>
  220. <p>Apple iPhone X 512G</p>
  221. <div>
  222. <span>8299&nbsp;元</span>
  223. <span class="iconfont icon-gouwuche"></span>
  224. </div>
  225. </div>
  226. <div class="goods-img">
  227. <a href=""><img src="static/images/goods2.jpg" alt="" /></a>
  228. <p>华为笔记本电脑</p>
  229. <div>
  230. <span>5699&nbsp;元</span>
  231. <span class="iconfont icon-gouwuche"></span>
  232. </div>
  233. </div>
  234. <div class="goods-img">
  235. <a href=""><img src="static/images/goods2.jpg" alt="" /></a>
  236. <p>小米笔记本电脑</p>
  237. <div>
  238. <span>3999&nbsp;元</span>
  239. <span class="iconfont icon-gouwuche"></span>
  240. </div>
  241. </div>
  242. <div class="goods-img">
  243. <a href=""><img src="static/images/goods2.jpg" alt="" /></a>
  244. <p>联想笔记本电脑</p>
  245. <div>
  246. <span>4399&nbsp;元</span>
  247. <span class="iconfont icon-gouwuche"></span>
  248. </div>
  249. </div>
  250. </div>
  251. <!-- 商品列表区 -->
  252. <h2 class="title">
  253. 商品列表<span class="iconfont icon-fenlei1 hot"></span>
  254. </h2>
  255. <div class="list-goods">
  256. <div class="goods-desc">
  257. <a href=""><img src="static/images/goods4.jpg" alt="" /></a>
  258. <a href=""
  259. >[白条24期免息]Apple苹果iPhone 11 手机 128G 全网通, 免费领取500元话费,
  260. 今天17:00下单,明晨12:00之前送达,7天无理由退货,官方提供售后,
  261. 以上都是我瞎编的<span class="iconfont icon-yanjing"></span
  262. ></a>
  263. </div>
  264. <div class="goods-desc">
  265. <a href=""><img src="static/images/goods3.jpg" alt="" /></a>
  266. <a href=""
  267. >[白条24期免息]Apple洗衣机,专业清洗苹果手机,
  268. 苹果电脑,iPad,洗好保证不能用, 免费领取500元保险费,
  269. 今天17:00下单,明晨12:00之前送达,7天无理由退货,官方提供售后,
  270. 以上都是我瞎编的<span class="iconfont icon-yanjing"></span
  271. ></a>
  272. </div>
  273. <div class="goods-desc">
  274. <a href=""><img src="static/images/goods5.png" alt="" /></a>
  275. <a href=""
  276. >[白条24期免息]Apple苹果iPhone 11 手机 128G 全网通, 免费领取500元话费,
  277. 今天17:00下单,明晨12:00之前送达,7天无理由退货,官方提供售后,
  278. 以上都是我瞎编的<span class="iconfont icon-yanjing"></span
  279. ></a>
  280. </div>
  281. <div class="goods-desc">
  282. <a href=""><img src="static/images/goods2.jpg" alt="" /></a>
  283. <a href=""
  284. >[白条24期免息]华为笔记本MateBook 14 全面屏轻薄性能笔记本电脑
  285. 十代酷睿(i5 16G 512G MX250 触控屏 多屏协同)灰, 以上都是我瞎编的<span
  286. class="iconfont icon-yanjing"
  287. ></span
  288. ></a>
  289. </div>
  290. </div>
  291. <footer>
  292. <a href=""
  293. ><span class="iconfont icon-shouye1"></span> <span>首页</span></a
  294. >
  295. <a href=""
  296. ><span class="iconfont icon-fenlei"></span> <span>分类</span></a
  297. >
  298. <a href=""
  299. ><span class="iconfont icon-gouwuche"></span> <span>购物车</span></a
  300. >
  301. <a href=""
  302. ><span class="iconfont icon-weidenglu-touxiang"></span
  303. ><span>未登录</span></a
  304. >
  305. </footer>
  306. </body>
  307. </html>
  • 效果图:
Correcting teacher:天蓬老师天蓬老师

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