Blogger Information
Blog 11
fans 0
comment 0
visits 12895
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
HTML flex弹性布局实战之PC端通用布局和移动端布局解决方案
写代码的张先森
Original
1898 people have browsed it

PC端通用布局解决方案


我们利用flex弹性布局来快速完成一个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. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. a {
  15. color: #666;
  16. text-decoration: none;
  17. }
  18. body {
  19. /* 设置最小宽度 */
  20. min-width: 680px;
  21. /* 将body转为flex弹性容器 */
  22. display: flex;
  23. /* 主轴垂直方向,不换行 因为body下的元素都需要垂直布局 */
  24. flex-flow: column nowrap;
  25. }
  26. header,
  27. footer {
  28. /* 添加页眉和页脚的公共样式 */
  29. height: 50px;
  30. border: 1px solid #000;
  31. }
  32. header {
  33. /* 将页眉转为flex 弹性容器*/
  34. display: flex;
  35. /* 所有项目在交叉轴方向上居中显示 因为页眉的导航栏需要居中显示*/
  36. align-items: center;
  37. }
  38. header > a {
  39. /* 给定每个header下的弹性项目 不增长 不收缩 基础宽度100px */
  40. flex: 0 1 100px;
  41. /* 文本居中 */
  42. text-align: center;
  43. }
  44. /* Logo */
  45. header > a:first-of-type {
  46. margin-right: 50px;
  47. }
  48. header > a:last-of-type {
  49. margin-left: auto;
  50. }
  51. /* 鼠标悬停时忽略logo */
  52. header > a:hover:not(:first-of-type) {
  53. color: coral;
  54. }
  55. .banner {
  56. width: 1020px;
  57. height: 180px;
  58. /* 转为弹性布局 */
  59. display: flex;
  60. margin: 10px auto;
  61. }
  62. .banner img {
  63. width: 100%;
  64. }
  65. .container {
  66. /* 主体这里为了显示方便给定最小高度为400px */
  67. min-height: 400px;
  68. margin: 10px auto;
  69. /* 转为弹性布局 */
  70. display: flex;
  71. /* 剩余空间给两端平均分配 达到主体居中效果 */
  72. justify-content: center;
  73. }
  74. .container > aside,
  75. .container > main {
  76. border: 1px solid #000;
  77. padding: 10px;
  78. }
  79. .container > aside {
  80. /* 给定两个侧边栏基础宽度为200px */
  81. flex: 0 0 200px;
  82. }
  83. .container > main {
  84. /* 主体基础宽度为600px */
  85. flex: 0 0 600px;
  86. margin: 0 10px;
  87. }
  88. footer {
  89. /* 将页脚转为弹性布局 */
  90. display: flex;
  91. /* 弹性项目主轴为垂直排列 */
  92. flex-flow: column nowrap;
  93. /* 文本居中显示 */
  94. text-align: center;
  95. }
  96. </style>
  97. </head>
  98. <body>
  99. <!-- 页眉 -->
  100. <header>
  101. <a href="">LOGO</a>
  102. <a href="">首页</a>
  103. <a href="">栏目1</a>
  104. <a href="">栏目2</a>
  105. <a href="">栏目3</a>
  106. <a href="">登录</a>
  107. </header>
  108. <!-- 轮播图 -->
  109. <div class="banner">
  110. <img src="static/images/banner_pc.jpg" alt="" />
  111. </div>
  112. <!-- 主体 -->
  113. <div class="container">
  114. <!-- 左边栏 -->
  115. <aside>左边栏</aside>
  116. <!-- 主体内容区 -->
  117. <main>主体内容区</main>
  118. <!-- 右边栏 -->
  119. <aside>右边栏</aside>
  120. </div>
  121. <!-- 页脚 -->
  122. <footer>
  123. <p>
  124. 北京xx公司 &copy;版权所有 &nbsp;&nbsp;(2018-2022) | 备案号:
  125. <a href="">京ICP-18********</a>
  126. </p>
  127. <p>中国.北京市通州区金融街园中园999号 | 电话: 0551-888999**</p>
  128. </footer>
  129. </body>
  130. </html>

效果:

PC端的通用布局大体上就这样,可以仿照这个flex自己动手试试
注:图中为了演示效果把高度都调低了 实际开发科根据自身需求调节高度大小

移动端布局解决方案


接下来我们利用flex弹性布局来快速完成一个移动端通用布局的解决方案,以后遇到类似布局可以直接仿照当前布局方案来做

代码:

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

效果图:

注:以上主要代码都在代码块重做了注释,请详细阅读代码,以上移动端布局示例都是采用flex弹性布局来做的。

小结:


1.请结合图中代码亲自动手试一下效果,用到的技术:阿里云字体图标的引用,flex弹性布局,css其他样式属性
2.以上两个示例只是大部分网站通用的格式,可根据自己的想法进行修改和重新布局

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
Author's latest blog post