Open2

scroll-behavior:smooth と ScrollIntoView 関連

mimimimi

仕様のドキュメント

https://www.w3schools.com/cssref/pr_scroll-behavior.php
https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

Issue

https://stackoverflow.com/questions/73052119/scroll-behavior-smooth-doesnt-work-on-html-in-chrome

アンカーリンクで#指定の該当箇所に飛ぶ挙動が scroll-behavior: smooth; を付与するとChromeだけ飛ばなくなる。シンプルに該当CSSだけ付与したケースでは起こらないが、恐らく scrollIntoView などをJS等でコントロールしている場合に起こる。

恐らく関連するChromiumバグ

https://bugs.chromium.org/p/chromium/issues/detail?id=1299237&q=scrollIntoView&can=2
https://bugs.chromium.org/p/chromium/issues/detail?id=1121151
https://bugs.chromium.org/p/chromium/issues/detail?id=833617

対策

全体に付与すると起こるので、以下の様に一部に限定すると多分回避できる

window.addEventListener('load', () => {
  let links = document.querySelectorAll('a[href^="#"]');
  for (const link of links) {
    link.addEventListener('click', (e) => {
      e.preventDefault();
      const href = link.getAttribute('href');
      document.querySelector(href).scrollIntoView({
        behavior: 'smooth',
      });
    });
  }
});

参考

https://www.browserstack.com/guide/browser-compatible-smooth-scrolling-in-css-javascript
https://coding-memo.work/javascript/895/
https://www.jqueryscript.net/blog/Best-Smooth-Scroll-jQuery-Plugins.html