博客列表 >使用 FlexBox(弹性布局)对 PC 端和移动端的布局方案

使用 FlexBox(弹性布局)对 PC 端和移动端的布局方案

忠于原味
忠于原味原创
2020年06月25日 22:39:33964浏览

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