【发布时间】:2020-12-31 07:01:23
【问题描述】:
在使用 Bootstrap (4.5) 网格进行两列布局并更改列顺序时,我遇到了高 CLS(内容布局移位)问题。
CLS 是 Core Web Vital 指标。基本上,当页面加载时网页的部分正在移动时,Google 会发现问题。据说这个指标会影响SEO。
在高分辨率上,我的布局由两列组成。右侧为主要内容,左侧为侧边栏。在较低分辨率下,侧边栏内容被推到主要内容下方。所以 HTML 看起来像这样:
<div class="container-fluid">
<div class="row">
<div class="col-lg-8 order-lg-2">
</div>
<div class="col-lg-4 order-lg-1">
</div>
</div>
</div>
问题在于,当页面在桌面上呈现的短暂时刻,主要内容出现在左侧,然后在几毫秒后它转移到右侧的正确位置。对于简单的页面(使用简单的 DOM 或没有外部资源),这种转变是不可察觉的。
我已准备好example of such page。 (source code is on github)。为了测量 CLS,我在 Chrome 中使用 Lighthouse。在我的情况下,当我刷新页面时,我可以看到列在移动,并且 Lighthouse 通知我 CLS 值为 0.326。结果可能取决于渲染资源,因此您可能会得到不同的结果。但似乎Google Page Insight 给出了类似的结果:
无论如何,有没有办法在页面呈现时避免这种转变?
【问题讨论】:
-
我不知道为什么会发生这种情况(这似乎与当合成器操作发生排列层时有关,如果您切换顺序,它必须是“后期操作” ) 但解决方案是以正确的顺序提供 HTML,而不是依赖 CSS 来改变顺序。如果这对您来说是一个可行的选择,那么我会这样做,它会纠正问题,但显然如果顺序在其他屏幕尺寸上是正确的,这可能不起作用。有趣的是,如果我使用 CPU 减速,这不会发生,最好的猜测似乎是一个多线程问题。
-
嗯,我们的想法是首先为单列布局(用于移动设备)提供主要内容。所以简单地改变顺序会带来新的问题。
-
是的,这就是我的怀疑,我很感兴趣在页面上有图像、更多 CSS、JavaScript 等的“现实世界”场景中是否会出现同样的问题,因为额外的计算时间可能解决问题。如果问题仍然存在,您唯一能做的就是在页面加载之前显示白色叠加层,这将是一个 hack,但至少可以解决 CLS 问题。
-
另外我想知道如果它从 flex 更改为布局的网格模型是否会出现同样的问题......就像我说的有趣的问题,因为 CSS 是内联的并且没有加载字体(我的东西通常会寻找 CLS 问题)
-
问题出现在真实网站上。我已经对其进行了条纹化,所以没有人说这是其他问题。实际上,剥离资源使问题不易被发现。您提到制作叠加层,但我认为您无法在适当的时候轻松检测并删除它。
标签: css bootstrap-4 flexbox lighthouse pagespeed-insights