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


总结


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


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



相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
技术心得记录:瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
26 0
|
15天前
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
46 8
|
2月前
|
前端开发
CSS中的display属性:布局控制的关键
CSS中的display属性:布局控制的关键
135 42
|
5天前
|
前端开发
CSS Grid 布局:span 关键字
CSS Grid 布局:span 关键字
16 0
|
8天前
|
前端开发 容器
css中弹性布局使用方法
css中弹性布局使用方法
17 0
|
8天前
|
编解码 前端开发 容器
CSS弹性布局:打造响应式与灵活的网页设计
CSS弹性布局:打造响应式与灵活的网页设计
19 0
|
1月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
1月前
|
前端开发
css 十字分割线(含四等分布局)
css 十字分割线(含四等分布局)
28 2
|
1月前
|
移动开发 前端开发 HTML5
CSS 【实战】 “四合院”布局
CSS 【实战】 “四合院”布局
25 0
CSS 【实战】 “四合院”布局
|
1月前
|
前端开发
css的flex布局中使用margin:auto智能分配剩余空间
css的flex布局中使用margin:auto智能分配剩余空间
30 1