目录
在 wrapper 上用负的 margin-bottom
在 footer 上用负的 margin-top
通过 cacl() 减少 wrapper 高度
There is flexbox
使用 flexbox
使用 grid
首页 web前端 html教程 【译】粘连 Footer 的 5 种方法 | CSS-Tricks_html/css_WEB-ITnose

【译】粘连 Footer 的 5 种方法 | CSS-Tricks_html/css_WEB-ITnose

Jun 21, 2016 am 08:46 AM

原文: http://www.zcfy.cc/article/491

一个简短的历史,如果你愿意那样说的话。

粘连 footer 的目的是让它“支撑”在浏览器窗口的底部。但不总是在底部,如果有足够的内容将页面撑开,footer 可以被撑到网页下方去。但是,如果页面的内容很短,粘连 footer 仍然会出现在浏览器窗口的底部。

在 wrapper 上用负的 margin-bottom

用一个元素将除了 footer 之外的其他内容包起来。给它设一个负的 margin-bottom,让它正好等于 footer 的高度。这是一个最基本的方法( 例子 )。

例子: 用负 margin 粘连 footer

<body>  <div class="wrapper">      content    <div class="push"></div>  </div>  <footer class="footer"></footer></body>
登录后复制
html, body {  height: 100%;  margin: 0;}.wrapper {  min-height: 100%;  /* Equal to height of footer */  /* But also accounting for potential margin-bottom of last child */  margin-bottom: -50px;}.footer,.push {  height: 50px;}
登录后复制

这个方法需要在内容区域加一个额外的元素( .push 元素),这样确保不会因为负 margin 将 footer 提升上来而覆盖了任何实际内容。 .push 元素也最好不要有自己的 margin-bottom,如果有,那么它也得算在负 margin 中,而这又会使得 push 的 height 和 .wrapper 的 margin-bottom 的数字不一样,看起来也不是很好。

用 这个 技术不需要一个 push 元素,但是相应地,在内容外面需要额外再包一层元素来让它产生对应的 padding-bottom。这也是为了防止负 margin 导致 footer 覆盖任何实际内容。

例子: 用负 margin 粘连 footer 2

<body>  <div class="content">    <div class="content-inside">      content    </div>  </div>  <footer class="footer"></footer></body>
登录后复制
html, body {  height: 100%;  margin: 0;}.content {  min-height: 100%;}.content-inside {  padding: 20px;  padding-bottom: 50px;}.footer {  height: 50px;  margin-top: -50px;}
登录后复制

这个技术和前一个有一个同样的缺点,就是它们都需要添加额外的 HTML 元素。

通过 cacl() 减少 wrapper 高度

有一个不需要添加额外元素的 方法 ,那就是通过 cacl() 调整 wrapper 的高度。这样不需要任何附加的元素,只需要两个元素并排共用 100% 高度。

例子: Sticky Footer with calc();

<body>  <div class="content">    content  </div>  <footer class="footer"></footer></body>
登录后复制
登录后复制
登录后复制
.content {  min-height: calc(100vh - 70px);}.footer {  height: 50px;}
登录后复制

注意我这里用 calc() 扣除了 70px,把 footer 固定为 50px。这是假设内容中的最后一个元素有一个 20px 的 margin-bottom。这个 margin-bottom 和 footer 的高度要加在一起从 viewport 高度中扣除。而且,我们在这里还用了 viewport 单位( vh ——译者注),这是另外一个小技巧,能够避免在让 wrapper 高度为 100% 时还得先把 body 高度设为 100%。

There is flexbox

使用 flexbox

上面三种技术的大问题是它们需要 footer 的高度固定。Web 设计中固定高度通常都不好。内容可能改变。我们需要灵活性。固定高度通常要被亮红灯。 使用 flexbox 来实现粘连 footer 不仅不需要任何额外的元素,还可以支持 footer 可变高度。

例子: 用 Flexbox 粘连 Footer

<body>  <div class="content">    content  </div>  <footer class="footer"></footer></body>
登录后复制
登录后复制
登录后复制
html {  height: 100%;}body {  min-height: 100%;  display: flex;  flex-direction: column;}.content {  flex: 1;}
登录后复制

你甚至可以添加一个 header 到 .content 前面或者其他更多内容到后面。使用 flexbox 的诀窍是:

  • 设置 flex: 1 在你希望自动填充窗口空间的子元素上(在我们的例子里是 .content 元素)。
  • 或者,可以设置 margin-top:auto 来让子元素尽可能远离它前面的元素(或者根据需要选择任意一个方向的 margin)。(上面的 flex:1 也可以用 margin-bottom:auto ,内容垂直居中可以用 margin:auto 0 ,flex 布局很奇妙吧——译者注)

记得我们有一个关于一切 flexbox 相关内容的 完整的指南 。

使用 grid

Grid 布局是一种更新的技术(目前 支持它的浏览器比 flexbox 更少 )。我们也有一个关于它的 完整的指南 。用它实现粘连 footer 也相当容易。

例子: 用 Grid 粘连 footer

<body>  <div class="content">    content  </div>  <footer class="footer"></footer></body>
登录后复制
登录后复制
登录后复制
html {  height: 100%;}body {  min-height: 100%;  display: grid;  grid-template-rows: 1fr auto;}.footer {  grid-row-start: 2;  grid-row-end: 3;}
登录后复制

这个例子只能在 Chrome Canary 或者 Firefox 开发版上工作,并且可能在 Edge 下被降级到旧的 grid 布局版本。

英文原文: https://css-tricks.com/couple-takes-sticky-footer/

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:建立网页的结构 HTML:建立网页的结构 Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML与CSS和JavaScript:比较Web技术 HTML与CSS和JavaScript:比较Web技术 Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML:是编程语言还是其他? HTML:是编程语言还是其他? Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

See all articles