当前位置:   article > 正文

【CSS3】flex布局实践篇 | 7种常见网页布局方案_使用flex布局,7种布局经典案例

使用flex布局,7种布局经典案例

1、垂直居中

截屏2023-03-17 21.13.49.png

垂直居中一度是前端面试时必问知识点。 目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧,包括全高的伪元素。这些方法是又复杂又难写。

不知道大家第一次使用flex布局做什么,反正我是用来做垂直居中,使用它实在是太简单了,两行代码搞定。

 
  1. <div class="main">
  2. <h2>我居中啦!</h2>
  3. <p>这个元素水平垂直居中了。</p>
  4. </div>

 

2、sticky footer布局

业务场景:

当页面内容少时,让页脚粘在底部;当内容超过一屏时,页脚跟在后面。

这一度也是一个CSS布局难题。但flex布局可以完美解决这个问题。

  1. <div class="container">
  2. <header>header</header>
  3. <main>
  4. <div class="content">
  5. 今夜我不会遇见你 </br>
  6. 今夜我遇见了世上的一切</br>
  7. 但不会遇见你。
  8. </div>
  9. </main>
  10. <footer>footer</footer>
  11. </div>
  12. .container {
  13. display: flex;
  14. flex-derection: column;
  15. }
  16. header, footer{
  17. height: 100px;
  18. }

截屏2023-03-17 21.52.13.png

头部和尾部定高,中间内容设置高度后,当内容少时,页脚会在上面,不会固定在底部。

这种效果显然不是我们期望的,要想实现业务要求,就需要使用到flex-grow属性,它的默认值是0。即当有空余空间时,也不放大。这时我们需要将中间main设置flex-grow为1,这样当有空余空间,他就会放大,填充剩余空间。

main { flex-grow: 1; }

内容少时-吸附在底部:

截屏2023-03-17 21.57.15.png

内容多时-跟随滚动:

截屏2023-03-17 22.01.28.png

这样我们就实现了这个经典布局了。

3、圣杯布局

这是一个经典的 CSS 布局挑战,历史上出现的方案都没有完美解决。直到 Flexbox 布局的出现,终于成为可能。

圣杯布局由页头 (header),中间部分 (center),页脚 (footer),和三栏组成。中间的一栏是主要内容,左边和右边提供如广告、导航的链接。

截屏2023-03-17 22.20.41.png

  1. <div class="HolyGrail">
  2. <header>header</header>
  3. <div class="HolyGrail-body">
  4. <main class="HolyGrail-content">content</main>
  5. <nav class="HolyGrail-nav">nav</nav>
  6. <aside class="HolyGrail-ads">ads</aside>
  7. </div>
  8. <footer>footer</footer>
  9. </div>
  10. .HolyGrail {
  11. min-height: 100vh;
  12. display: flex;
  13. flex-direction: column;
  14. }
  15. header,footer {
  16. height: 100px;
  17. }
  18. .HolyGrail-body {
  19. flex: 1;
  20. display: flex;
  21. justify-content: space-between;
  22. }
  23. .HolyGrail-nav, .HolyGrail-ads {
  24. flex: 0 0 100px;
  25. }
  26. .HolyGrail-content {
  27. flex: 1;
  28. }
  29. .HolyGrail-nav {
  30. /* 导航放置最左边 */
  31. order: -1;
  32. }

小屏幕时,中间内容自动成垂直布局,三列。

截屏2023-03-17 22.30.47.png

 
  1. /* 响应式 */
  2. @media (max-width: 768px) {
  3. .HolyGrail-body {
  4. flex-direction: column;
  5. }
  6. .HolyGrail-nav, .HolyGrail-ads, .HolyGrail-content {
  7. flex: 1;
  8. }
  9. }

4、经典导航栏布局

截屏2023-03-17 22.52.08.png

  1. <header>
  2. <div class="header-left">
  3. <div class="logo"></div>
  4. <nav>
  5. <a>首页</a>
  6. <a>档案</a>
  7. </nav>
  8. </div>
  9. <div class="header-right">
  10. <div class="user">echo</div>
  11. <div class="logout">退出</div>
  12. </div>
  13. </header>
  14. header {
  15. display: flex;
  16. justify-content: space-between;
  17. align-items: center;
  18. }
  19. .header-left,.header-right {
  20. display: flex;
  21. align-items: center;
  22. }
  23. .logo {
  24. flex: 0 0 32px;
  25. }
  26. .user {
  27. margin-right: 20px;
  28. }

5、栅格布局

基础栅格布局

最简单的网格布局就是平均分布。在容器中平均分配空间,需要设置项目的自动缩放。

截屏2023-03-17 23.11.39.png

  1. <div class="grid">
  2. <div class="cell"></div>
  3. ...
  4. </div>
  5. .grid {
  6. display: flex;
  7. }
  8. .cell {
  9. flex: 1;
  10. }

独立尺寸布局

当你的需求不是等宽栅格的时候,可以添加尺寸属性到特定的栅格中。没有尺寸属性的栅格将简单地继续平分剩下的可用空间。

下边加了 “auto” 标签的栅格没有指定任何尺寸属性。

截屏2023-03-17 23.27.49.png

  1. <div class="grid">
  2. <div class="cell u-1of2"></div>
  3. <div class="cell"></div>
  4. <div class="cell"></div>
  5. </div>
  6. .u-1of2 {
  7. flex: 0 0 50%;
  8. }
  9. .u-1of3 {
  10. flex: 0 0 33.33%;
  11. }
  12. .u-1of4 {
  13. flex: 0 0 25%;
  14. }

6、悬挂式布局

这种布局很普遍,当我们在做一个新闻列表模块时,通常它每一栏的的左侧或右侧,需要展示一个图片栏。

截屏2023-03-17 23.45.39.png

  1. <div class="list">
  2. <div class="item">
  3. <div class="img"></div>
  4. <div class="info"></div>
  5. </div>
  6. <div class="item">
  7. <div class="img"></div>
  8. <div class="info"></div>
  9. </div>
  10. </div>
  11. .list {
  12. display: flex;
  13. flex-direction: column;
  14. align-items: center;
  15. }
  16. .item {
  17. display: flex;
  18. gap: 10px;
  19. }
  20. .item:nth-of-type(2n) {
  21. flex-direction: row-reverse;
  22. }
  23. .img {
  24. width: 32px;
  25. height: 32px;
  26. }
  27. .info {
  28. flex: 1;
  29. }

7、输入框附加布局

我们常常需要在输入框的前方添加提示,后方添加按钮。

截屏2023-03-18 00.13.31.png

  1. <!-- 后置 -->
  2. <div class="InputAddOn next">
  3. <input class="InputAddOn-field" />
  4. <span class="InputAddOn-item">搜索</span>
  5. </div>
  6. .InputAddOn {
  7. display: flex;
  8. }
  9. .InputAddOn-field {
  10. flex: 1;
  11. }
  12. .InputAddOn-item {
  13. flex: 0 0 60px;
  14. }

结语

以上介绍的7种布局基本覆盖了大部分业务场景下的页面布局。或有不足之处,欢迎大家补充讨论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/851731
推荐阅读
相关标签
  

闽ICP备14008679号