html - CSS 滚动填充顶部在 Safari 中不起作用

标签 html css

根据 caniuse.com,scroll-padding-top property is supported in the latest version of Safari ,但它根本不适合我。我设置了一个 reduced example Code Pen here确认它没有任何其他问题,即使只有 CSS 和 HTML,它似乎也不起作用。这是 CSS:

html {
      scroll-behavior: smooth;
      scroll-padding-top: 152px;
}

我可以确认我的 Safari 版本是 13.0.1,并且根据 caniuse.com 的说法,对这个属性的支持是在 11.0 中实现的。

它在 Firefox 和 Chrome 中都按预期工作。

是否有任何我遗漏的东西需要包含在内才能在 Safari 中运行?我想尽可能避免使用 jquery 和 javascript,但如果这是唯一的方法,我愿意使用它们来实现解决方案。

最佳答案

scroll-padding 属性是 CSS Scroll Snap Module 的一部分.最recent update该模块声明 scroll-padding 应该适用于所有滚动容器。然而,滚动填充的原始规范要求它只能与 滚动快照容器 一起使用,这是当前在 Safari 中实现的(因此,caniuse 将其列为受支持的原因)。 Safari 的新规范开发尚未开始(请参阅 WebKit bug)。

但是,在链接到页面上的元素时,您实际上并不需要滚动填充来实现“偏移”。相反,您可以只将 padding-top 应用于链接元素,然后为 margin-top 应用相应的负值,这样布局就不会发生变化。

html {
  scroll-behavior: smooth;
}

.glossary {
  margin-bottom: 100px;
}

.glossary__link {
  padding: 10px;
}

h3 {
  padding-top: 152px;
  margin-top: -152px;
}
<div class="glossary">
  <a href="#a" class="glossary__link">A</a>
  <a href="#b" class="glossary__link">B</a>
  <a href="#c" class="glossary__link">C</a>
  <a href="#d" class="glossary__link">D</a>
</div>

<hr>
<section>
  <h3 id="a">A</h3>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
</section>

<hr>
<section>
  <h3 id="b">B</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
</section>

<hr>
<section>
  <h3 id="c">C</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
</section>

<hr>
<section>
  <h3 id="d">D</h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
</section>

关于html - CSS 滚动填充顶部在 Safari 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58824570/

相关文章:

html - 将 2 列布局环绕图像

javascript - 使用 HTML5 读取/访问 AppData 文件夹

html - CSS 网格 - 图像上的文本框

html - 具有转换属性的 CSS 动画不应用最终状态

html - 如何避免 iframe 中的 anchor 滚动父页面

javascript - 将 Canvas 转换为 pdf

javascript - 更改嵌套 html 元素的颜色后,悬停效果将不起作用

CSS微优化

javascript - jQuery 在单击时对元素应用过渡

javascript - 骑在某个地方的风格?