脱ITエンジニアの海外滞在物語です。日本脱出7年目。

ブログ備忘録 ページ内リンクのジャンプ先ずれ対応

Blog
BlogIT
この記事は約3分で読めます。

こんにちはYoshiです。

今回は、Cocoonテーマで発生する「ページ内リンクのジャンプ先がずれる問題」の対処方法を紹介します。
Cocoon以外のテーマではテストしていませんが、おそらく同様の方法で対応できるはずです。

ページ内リンクや目次からのジャンプ先がずれる問題

目次やアンカーリンク(ページ内リンク)をクリックした際、ジャンプ先の表示がずれてしまうことがあります。
この記事では、実際に私が試して効果があった対処方法を紹介します。

Cocoonテーマでは、目次を設定すると自動でリンクが生成・表示されます。
しかし、このリンクをクリックすると

期待する動作では、クリックした内部リンクの見出し(hタグ)が適切な位置に表示されるはずです。

しかし、実際には見出しがヘッダーに隠れてしまったり、めり込んでしまう場合があります。

今回その表示ずれの問題を解決する方法を紹介します。

対応方法

以下のコードを「外観」→「テーマファイルエディター」→「style.css」に追加してください。

:target::before {
  content: "";
  display: block;
  height: 60px; /* ヘッダーの高さに合わせて変更 */
  margin: -60px 0 0; /* heightと同じ値に設定 */
}

コード内のheightの値は、使用しているヘッダーの高さに合わせて調整してください。

Cocoon ChildのStyle.cssに追加してください。

私の場合はヘッダーの実際の高さが60pxでしたが、90pxに変更すると見た目がちょうど良い位置に表示されました。

この記事を参考にしました。

注意点

marginheightの値が異なると、見出しの表示位置がずれたり、文字がめり込んでしまうことがあります。設定する際は、ヘッダーの高さに合わせて適切な値を指定してください。

また、環境によってはこの方法がうまく機能しない場合もあるようですが、一度試してみる価値はあります。

以下のようなケースでは正しく動作しない可能性があります。

  • display: table; が適用された要素には機能しない
  • Flexbox 内にターゲット要素がある場合、期待どおり動作しないことがある
https://stackoverflow.com/questions/4086107/fixed-page-header-overlaps-in-page-anchors

コメント

タイトルとURLをコピーしました