tophee
(Christoph)
1
最近的一次升级破坏了我的顶部导航栏——更具体地说,导航栏会加载(仅闪现一瞬间),但随后标准的 Discourse 页头会覆盖在上面并将其隐藏。
我正试图弄清楚究竟发生了什么,以及如何修复它。能否有人给我指个方向?
通过在浏览器中检查页面,我发现设置
.d-header-wrap {
margin-top: 48px;
}
可以将页头向下移动以露出导航栏(高度为 48px),这似乎解决了问题。
但我不确定这是否是可持续的修复方式,同时也很好奇究竟发生了什么。
我还不得不从我的组件中移除
#main-outlet { margin-top: 48px; padding-top: 75px;}
以消除页头下方出现的额外空白空间。这段代码多年来一直运行正常,所以我很想知道是什么导致了它失效……
我还移除了其他一些内容,例如
#main-outlet.docked {
margin-top: 0px;
padding-top: 123px
}
因为它似乎没有产生任何影响。
编辑:上述情况适用于桌面端 CSS。在移动端,我不需要增加导航栏的 Z 值。
2 个赞
标题栏的布局已从 position: fixed 改为 position: sticky(https://github.com/discourse/discourse/commit/da5841de0b2b60ceaa2f2602d7231e7393a74e66)。这是我们自放弃支持 IE11 后能够实施的一项更新。
这一改动解决了 Discourse 自诞生以来标题栏存在的一些小问题。从功能上讲,标题栏不再处于固定位置(与页面其他元素的位置无关),而是融入了页面元素的自然流中。正因如此,主内容区域(main outlet)的填充(padding)和边距(margin)已不再需要。
在最初实施该改动时,默认 CSS 在移动端存在一些额外的填充,但在一两天后已修复。我猜您可能是在初始改动与修复之间的某一天进行了更新;如果您再次更新,该问题应该会消失。如果您不想再次更新,也可以手动添加以下规则:.mobile-view #main-outlet { padding-top: 0.25em; }。
您使用 .d-header-wrap 的修复方案在我看来是可持续的。
5 个赞
tophee
(Christoph)
4
在搁置了几个月后,我刚升级到最新版本(2.8.0.beta4),结果发现我的修复方案似乎并不那么有效(或者当前的问题可能与该修复无关)。我目前正在排查问题所在,一旦查明情况会在此更新。如果以下情况让任何人觉得眼熟,请告诉我。
基本上,这次发生的情况与原始帖子(OP)中描述的类似,只不过这次不是 Discourse 标题覆盖了顶部导航栏,而是顶部导航栏覆盖了 Discourse 标题。(编辑:我现在认为标题并非被覆盖,而是根本没有渲染出来。)当我通过安全模式禁用默认主题时,显示正常。
奇怪的是,当我导航到 /admin/customize/themes/11/desktop/scss/edit 时,Discourse 标题和顶部导航栏都能正确显示(无论是在安全模式还是正常模式下)。我认为在主题页面中安全模式和正常模式没有区别的原因是,安全模式并不适用于某些管理员页面。但我不明白的是,为什么在管理员页面上一切显示正常,而在其他地方却不行。
还有另一件我不理解的事:当我在手机上访问该网站时,即使我明确要求桌面版本,显示也是正确的……
我会进一步调查,但在此非常希望能得到任何提示。
编辑:以下是我在正常模式下检查公开页面时看到的情况:
以下是我在正常模式下检查管理员页面时看到的情况:
正如您所见,我的 CSS 修复在两种情况下都存在,但只有第二种情况能正确渲染页面……
tophee
(Christoph)
5
好的,我相信我已经修复了这个问题。标题消失并非由我的修复引起,而是由以下主题组件导致:
移除该组件后问题得以解决。或许 @Johani 了解导致此问题的原因?这是否与在 Discourse Version 2.6 - #2 by neil 中引入的“对 onebox 中 iframe 的额外控制”有关?