粘性页脚到底部,纯CSS解决方案

各位 Discourse 爱好者,大家好,

我想与大家分享我的粘性页脚解决方案,无需 JavaScript(作为对此请求的替代方案),前提是您需要知道页脚的高度。我为我的页脚额外预留了 100px,以便在内容和页脚之间留出一些空间。
如果您有一个包含多列的较大页脚,则应在您的移动选项卡中设置不同的固定高度。

步骤 1: 将此代码粘贴到您的通用 CSS 选项卡中

body {
  position: relative;
}

#main {
  margin-bottom: 350px; /* 等于页脚高度 - 请根据您的需要在通用选项卡和移动选项卡中修改此值 */
}

#sticky-footer {
  padding: 50px 0;
  background: var(--header_background);  /* 可选 */
  color: var(--primary-medium); /* 可选 */
  text-align: center; /* 可选 */
  position: absolute;
  bottom: 0;
  width: 100%;
  left: 0;
}

步骤 2: 进入您的 </body> 选项卡,并将您的页脚 HTML 粘贴进去

示例:

<div id="sticky-footer">
  <div class="wrap">
      <!-- 在此处放置您的页脚内容 -->
  </div>
</div>

就这样了 :slightly_smiling_face:。现在,即使是在内容较短的页面上,您的页脚也会固定在页面底部。

这是我们的页脚在内容较短的页面上的显示效果:

否则,它将会像这样放置在屏幕中间:

3 个赞

为什么要使用这个,而不是标准的 Discourse 页脚主题组件?

1 个赞

你告诉我,Jeff :slight_smile: .. 我们是否需要为每一段额外的 HTML 和 CSS 代码安装组件?
这并非“如何创建页脚”的教程,而是为那些希望自定义页脚的用户提供一种快速替代方案,使页脚始终固定在页面底部。

嗯,我们的想法是尽可能让人们使用主题组件,因为它们是我们“官方”提供的,因此能获得全面支持、自动更新等。@awesomerobot @Johani@jordan.vidrine 怎么看?

2 个赞

是的,如果官方页脚组件能满足你的需求,那当然很好,因为我们会帮你保持更新;但有些人可能想要不同的布局。

我之前做过类似的事情……流程与 OP 所述类似。你只需将 #main-outlet 的高度设置为视口高度(100vh)减去页脚和页眉的高度。这样,在较短的页面上,页脚就会自动固定在底部。

#main-outlet {
  box-sizing: border-box; // 将内边距包含在高度计算中
}
<script type="text/x-handlebars" data-template-name="/connectors/below-footer/my-footer">
  我的页脚内容
</script>

<script type="text/discourse-plugin" version="0.8">
    api.decoratePluginOutlet(
      "below-footer",
      (elem, args) => {
          let headerHeight = document.querySelector(".d-header").offsetHeight;
          let footerHeight = document.querySelector(".below-footer-outlet").offsetHeight;
          let mainOffset = headerHeight + footerHeight;
          
          document.querySelector("#main-outlet").style.minHeight = "calc(100vh - " + mainOffset + "px)";
      }
   );
</script>

这种情况出现得相当频繁,因此如果 footer.html 或两个页脚插件插槽中任一包含内容,核心功能中自动实现类似处理可能是值得的。

4 个赞

@cosdesign,请问您介意告诉我那个 CSS 选项卡在哪里吗? :slight_smile:

对于您的默认主题,您可以通过单击“编辑 CSS/HTML”按钮找到它:

不过,最好将其创建为主题组件。(单击安装按钮,然后从那里选择“创建新组件”)

您可以在 Developing Discourse Themes & Theme Components 找到更多信息 :+1:

2 个赞

太棒了 :slight_smile:

1 个赞