使用过CSS粘连布局吗?如何实现?

简介: 前言这个问题考察的是大家对 CSS 基础知识的掌握程度。粘连布局是众多 CSS 中布局方式中的一种,比如常见的还有单列布局、三栏布局等等,今天我们主要将的是粘连布局。因为在我们平常的页面布局中,粘连布局使用的地方还是挺多的,有些小伙伴明明都在项目中用过这种布局方式了,但是却不知它叫粘连布局,如果面试的时候没有回答上来就很亏。所以今天我们就讲一讲 CSS 众多布局中的一种:粘连布局。

1.什么是粘连布局?


粘连布局可能有些小伙伴没有听过,但是我相信很多小伙伴即使没有听过粘连布局,但是在项目中可能已经用到过了。


我们可以给粘连布局一个简单的定义:

所谓粘连布局(也可以叫做 sticky footer 布局),就是当内容区域元素没有超出容器时,网页底部 footer 紧贴在网页底部,当内容区域超长时,底部 footer 就会紧跟在内容区域底部,而不是紧贴在网页底部。


上面的定义中有好几个关键词:内容区域、footer、超长等等。可能小伙伴们只看定义还不一定能理解粘连布局是什么,接下来我们看一张图就能够很好理解了。


粘连布局示意图:

14.png

看了上面那张图大家应该就能理解什么叫做粘连布局,其实说白了粘连布局就是解决网页 footer 的问题。


上面图中所示的问题在我们项目开发中很容易遇到,比如我们下面的网页:15.png


上图中我们发现 footer 跟在内容区域后面,这个时候网页留下了一大片空白,这一般不是我们想要的,我们希望 footer 此时紧贴在网页的底部。


想要实现这种效果,就用到了我们的粘连布局。


2.实现粘连布局的方式


既然我们知道了粘连布局主要解决了什么问题,那么我们接下来就该想一想如何实现粘连布局。实现粘连布局的方式不只一种,我们一起来学习一下。


我们先来理一理思路,粘连布局主要就是解决两个问题:

  • 第一个问题:内容区域不够时,footer 紧贴底部
  • 第二个问题:内容区域超长时,footer 紧贴内容区


2.1 负 margin-top


我们可以想一想第一个问题出现的原因是什么?无非就是内容区域的高度不够,那么我们把内容区域的高度变大一点岂不是就解决了这个问题了,至于第二个问题,内容超长后,在我们不做任何处理的情况下,footer 本来就是更在内容区域后面的。


实现原理:

  • 给内容区添加额外的包裹元素
  • 设置包裹元素的 padding-bottom
  • 设置 footer 元素的 margin-top


代码如下:

<head>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    html,
    body {
      height: 100%;
    }
    .content-wrap {
      min-height: 100%;
    }
    .content {
      height: 50vh;
      width: 100%;
      background-color: #ccc;
      display: flex;
      align-items: center;
      justify-content: center;
      padding-bottom: 60px;
    }
    .footer {
      height: 60px;
      width: 100%;
      background-color: rgb(47, 46, 46);
      display: flex;
      align-items: center;
      justify-content: center;
      color: #fff;
      margin-top: -60px;
    }
  </style>
</head>
<body>
  <!-- 内容区域 -->
  <div class="content-wrap">
    <div class="content">
      <h1>我是内容区域</h1>
    </div>
  </div>
  <!-- footer -->
  <div class="footer">
    <h1>我是 footer</h1>
  </div>
</body>


实现效果:


15.png


上段代码主要分为了两部分:内容区域、footer 区域。我们给内容区域外层设置了包裹元素,并且将该包裹元素的最小高度设置为了 100%,这样就相当于内容区域就填充满了整个屏幕,footer 区域自然就跟随在内容区域后面。然后我们将 footer 的上外边距设置为了负的 footer 高度,这样就可以让 footer 感很好出现在屏幕的底部,然后我们给 content 设置了一个 padding,避免 footer 遮挡内容。


我们试试当内容区域超长是什么效果,效果如下:

16.png


2.2 负 margin-bottom


上面我们利用了 margin-top 来实现了粘连布局,那么同理,我们也可以利用 margin-bottom 来实现粘连布局。


实现原理:

  • 将所有内容元素添加一个包裹元素
  • 将包裹元素高度设置为 100%
  • 通过设置包裹元素的 margin-bottomfooter 显现出来


代码如下:

<head>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    html,
    body {
      height: 100%;
    }
    .content-wrap {
      min-height: 100%;
      margin-bottom: -60px;
    }
    .content {
      height: 50vh;
      width: 100%;
      background-color: #ccc;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .footer {
      height: 60px;
      width: 100%;
      background-color: rgb(47, 46, 46);
      display: flex;
      align-items: center;
      justify-content: center;
      color: #fff;
    }
  </style>
</head>
<body>
  <!-- 内容区域 -->
  <div class="content-wrap">
    <div class="content">
      <h1>我是内容区域</h1>
    </div>
  </div>
  <!-- footer -->
  <div class="footer">
    <h1>我是 footer</h1>
  </div>
</body>


实现效果:17.png


上段代码和我们前面使用负 margin-top 的方式非常的类似,其实实现原理都是一样的,总之就是为了让 footer 出现在页面底部。


2.3 flex 布局


flex 布局基本上可以解决网页布局中90%以上的问题,这其中当然包括粘连布局了。我们前面两种方法虽然可以实现粘连布局,但是还是有一个弊端的:我们需要固定底部高度。而使用了 flex 布局,这些就都不是问题了,而且实现起来也很简单。


代码如下:

<head>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    html,
    body {
      height: 100%;
      display: flex;
      flex-direction: column;
    }
    .content {
      flex: 1;
      height: 50vh;
      width: 100%;
      background-color: #ccc;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .footer {
      width: 100%;
      background-color: rgb(47, 46, 46);
      display: flex;
      align-items: center;
      justify-content: center;
      color: #fff;
    }
  </style>
</head>
<body>
  <!-- 内容区域 -->
  <div class="content">
    <h1>我是内容区域</h1>
  </div>
  <!-- footer -->
  <div class="footer">
    <h1>我是 footer</h1>
  </div>
</body>


实现效果:17.png


上段代码中我们没有给 footer 设置高度,也没有设置任何的 margin,我们只是利用了 flex:1 这个属性就让内容区域填充满了页面。不熟悉 flex 布局的小伙伴还需要自己下去好好学学。


总结


网页的布局有很多种,我们每天都会浏览各种各样的网页,你不妨静下心来,仔细分析一下该网页的布局采用的时哪种方式,我们今天讲的粘连布局只是冰山一下,更为丰富的布局方式还需要小伙伴们自行下来开采。


如果觉得文章太繁琐或者没看懂,可以观看视频: 小猪课堂



相关文章
|
8天前
|
前端开发 容器
css布局-弹性布局学习笔记
这篇文章是关于CSS弹性布局的学习笔记,详细介绍了flex容器和元素的相关属性,包括flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content以及order、flex-grow、flex-shrink、flex-basis、flex和align-self等,解释了这些属性在弹性盒子布局中的作用和用法。
|
8天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
2月前
|
前端开发 安全 容器
CSS如何优雅实现卡片多行排列布局?
【8月更文挑战第24天】CSS如何优雅实现卡片多行排列布局?
43 3
|
2月前
|
前端开发 开发者 容器
探索现代Web开发中的CSS Grid布局技术
【8月更文挑战第29天】在数字时代的浪潮中,网页设计不断进化以适应日新月异的用户需求。CSS Grid布局技术作为一项革新性的前端工具,为设计师和开发者提供了前所未有的布局能力。本文旨在通过深入浅出的方式介绍CSS Grid的核心概念、基本用法以及在实际项目中的应用,帮助读者快速掌握这一强大的网页布局工具。
41 3
|
2月前
|
前端开发 开发者 容器
【Web布局的革命】探索CSS Grid栅格系统,打造未来网页设计!
【8月更文挑战第25天】在网页设计领域,布局至关重要。传统的布局方法难以满足复杂需求,CSS Grid 栅格系统因此诞生。它是一种二维布局模式,能直接控制行和列,简化复杂网格的设计。通过定义 `display: grid;` 创建网格容器,并利用 `grid-template-columns` 和 `grid-template-rows` 设置行列尺寸,轻松实现响应式布局。此外,CSS Grid 支持高级功能,如网格区域划分和对齐设置,极大提升了布局的灵活性和创意空间。随着浏览器兼容性的增强,CSS Grid 必将成为未来网页设计的关键技术之一。
52 1
|
2月前
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
166 8
|
2月前
|
前端开发
CSS Grid 布局:span 关键字
CSS Grid 布局:span 关键字
44 0
|
2月前
|
前端开发 容器
css中弹性布局使用方法
css中弹性布局使用方法
37 0
|
2月前
|
编解码 前端开发 容器
CSS弹性布局:打造响应式与灵活的网页设计
CSS弹性布局:打造响应式与灵活的网页设计
80 0
|
3月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。