Redmineのアンカーリンクでの画面遷移時の表示不具合の原因と対策

IT
この記事は約3分で読めます。
スポンサーリンク

導入

RedmineのWikiを運用していると、アンカーリンクの遷移位置がズレるという現象に遭遇することがあります。
特に、画像を多用したナレッジページでは再現しやすく、「リンク先に飛んだはずなのに少し下にズレている」という違和感が発生します。

本記事では、この現象の原因と、実務で取り得る対策を整理します。

環境

Redmine:5.0.0~6.1.0(執筆時点最新)

用語の定義

アンカーリンク:見出しなど、ページ内の特定位置へジャンプするリンク

遅延表示:画面表示時にすべての画像を読み込まず、必要になったタイミングで読み込むことで、初期表示速度を向上させる技術

概要

RedmineのWikiでは、見出しごとに自動でアンカーリンクが生成されます。
しかし、遷移先より上部に画像が配置されている場合、別ページからアンカーリンクで遷移すると表示位置がズレることがあります。

原因

Redmine 5.0.0以降では、埋め込み画像に対して loading=”lazy” が付与されるようになりました。

その結果、以下の順序で処理が進みます。

  1. ページ読み込み時点では画像の高さが確定していない。
  2. ブラウザがアンカー位置までスクロールする。
  3. その後、画像が読み込まれてレイアウトが再計算される。
  4. 結果として、表示位置が下方向にズレる。
  5. 詳細は以下のサイトをご参照ください。

対策

対策法1:Wiki管理者が可能な対策

方法①:imgタグを直接記述する

Wiki記法(![]())を使わず、画像添付後にパスを取得し、HTMLで記述します。

<img src="/attachments/.../image.png">

これにより loading=”lazy” が付与されず、従来通りの挙動になります。

方法②:画像サイズを明示する

マクロでサイズ指定を行い、レイアウトを事前確定させます。

{{thumbnail(image.png, size=300, title=Thumbnail)}}

この方法は、「遅延読み込みは維持しつつズレを抑える」バランス型になります。

対策法2:サーバ管理者が可能な対策

方法③:Wiki記法を定義している以下を修正してRedmineを再起動する。

Rubyファイルを編集します。この対応は確実ですが、アップデート時の差分管理が必要になる点は注意が必要になります。

  • スクリプトファイル:
app/helpers/application_helper.rb
  • 対象メソッド:
def parse_inline_attachments(text, project, obj, attr, only_path, options)
  • 対象行:
src=\"#{image_url}\"#{title_and_alt_attrs} loading=\"lazy\"#{other_attrs}
  • 対応内容:loading=\”lazy\”を削除する、lazyをeagerに書き換える等

まとめ

RedmineのWikiはナレッジ蓄積の中核になりやすいため、アンカーリンクの信頼性は意外と重要なUX要素です。

初期表示速度とのトレードオフではありますが、用途に応じて適切にチューニングする必要があります。

原因と対策を知ることにより、ユーザが対応することも可能となりますので、本記事が役に立つと嬉しいです。

IT
スポンサーリンク
シェアする
jumborinをフォローする
タイトルとURLをコピーしました