使用过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 布局的小伙伴还需要自己下去好好学学。


总结


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


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



相关文章
|
1月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
1月前
|
前端开发 JavaScript 开发者
掌握 CSS 弹性布局(Flexbox):构建复杂页面布局的高效秘籍与实战案例
CSS弹性布局(Flexbox)是现代网页设计中构建复杂页面布局的高效工具。本文将深入浅出地介绍Flexbox的核心概念、使用技巧及实际应用案例,帮助读者快速掌握这一强大布局方法。
|
1月前
|
前端开发 容器
实现CSS品字布局
【10月更文挑战第27天】
|
2月前
|
前端开发 容器
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
69 4
|
2月前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
3月前
|
前端开发 容器
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等,解释了这些属性在弹性盒子布局中的作用和用法。
|
3月前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
4月前
|
前端开发 安全 容器
CSS如何优雅实现卡片多行排列布局?
【8月更文挑战第24天】CSS如何优雅实现卡片多行排列布局?
200 3
|
4月前
|
前端开发 开发者 容器
探索现代Web开发中的CSS Grid布局技术
【8月更文挑战第29天】在数字时代的浪潮中,网页设计不断进化以适应日新月异的用户需求。CSS Grid布局技术作为一项革新性的前端工具,为设计师和开发者提供了前所未有的布局能力。本文旨在通过深入浅出的方式介绍CSS Grid的核心概念、基本用法以及在实际项目中的应用,帮助读者快速掌握这一强大的网页布局工具。
65 3

热门文章

最新文章