SHU BLOG

News

BLOG NEWS

TITLE

【jQuery】HTMLのイメージマップのリンクがズレる原因と解決方法!

SHU[シュウ]

1991年生まれ九州の宮崎県育ち
高校卒業後、愛知県で自動車関係の
お仕事に5年間勤め、WEB業界に
転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画
基本インドアです!

サーバーとドメインの同時取得で.jpが無料

シュウ
シュウ
今回は【jQuery】HTMLのイメージマップのリンクがズレる原因
の解説になります!

  • HTMLのイメージマップを使用しているWeb制作者
  • スマートフォンのレスポンシブ対応で困っているコーダー
  • JavaScriptを使ってWebサイトの不具合を解決したい方

イメージマップとは

イメージマップとは

Webサイト制作で、1枚の画像に複数のリンクを設定できる「イメージマップ(image map)」。
地図や店舗一覧など、画像内の特定の場所から別のページへ遷移させたい場合に便利なHTMLの機能です。

しかし、レスポンシブ対応で画像を縮小すると、設定したリンクのクリック範囲がズレてしまうことがあります。
今回は、実際のWebサイト制作で発生したイメージマップのリンクのズレについて、
原因とJavaScriptライブラリ「imageMapResizer」を使った解決方法を紹介します。

イメージマップを作成

最初に、イメージマップを作成をしなけれなりません。
以下のサイトは初心者の方でも、簡単に作成できます。

Image-Map.net イメージマップジェネレーター

Image-Map.net は、ブラウザ上で誰でも簡単にHTMLイメージマップ(1枚の画像の中に複数のリンク領域を設定する記述)を作成できる無料のオンラインツールです。
専用ソフトのインストールや会員登録は一切不要で、サイトにアクセスして画像を読み込むだけで即座に使用できます。

公式サイト

Image-Map.netの使い方

Image-Map.netの使い方
●①画像を読み込む
トップ画面中央の緑のボタン「マイPCからイメージを選択」を押して手元の画像を選ぶか、「ウェブサイトから画像を読み込む」を押して画像URLを入力します。
●②ホットスポット(リンク領域)を作成する
画面上のツールで「長方形(Rect)」「円形(Circle)」「多角形(Poly)」のいずれかを選択し、画像上のリンクにしたい部分(ボタンや国名など)をマウスでクリック・ドラッグして囲みます。
●③リンク情報を入力する
作成した領域ごとに、遷移先のURL(Link)やタイトル(Title)を入力します。
●④HTMLコードを取得する
設定が終わったら画面下部の「コードを表示(Get Code)」ボタンを押します。
●⑤コードをコピーしてサイトに貼る
表示されたHTMLコード(map タグや area タグ)をコピーし、ご自身のWebサイトの該当箇所に貼り付けます。

イメージマップの基本的なHTML構成について

イメージマップの基本的なHTML構成について

イメージマップは、imgタグのusemap属性と、map・area タグを組み合わせて実装します。
以下のようになります。

<img src="sample.jpg" usemap="#image-map" alt="イメージマップ">
<map name="image-map">
 <area shape="rect" coords="516,151,666,227" href="" target="_blank" alt="" title="">
 <area shape="rect" coords="803,210,952,283" href="" target="_blank" alt="" title="">
 <area shape="rect" coords="803,316,953,389" href="" target="_blank" alt="" title="">
 <area shape="rect" coords="52,328,200,403" href="" target="_blank" alt="" title="">
</map>

それぞれの役割は以下のとおりです。

●img
イメージマップを設定する画像を指定します。
●usemap
画像とmapを紐づけます。
●map
クリック可能な領域を定義するマップを作成します。
●area
画像内のクリック範囲やリンク先を指定します。
●coords
クリック範囲の座標を指定します。

shape="rect" は四角形の範囲を指定する属性で、coords には左上と右下の座標を記述します。
このように、areaを複数設定することで、1枚の画像に複数のリンクを設置できます。

イメージマップのリンクがズレる原因とは

イメージマップのリンクがズレる原因とは

イメージマップのリンクがズレる原因の一つは、画像の表示サイズとリンク範囲の座標が一致しなくなることです。
HTMLのareaとareaで指定するcoordsは、基本的に元画像のピクセル単位の座標です。
例えば、以下の指定の場合、

<img src="sample.jpg" usemap="#image-map" alt="イメージマップ">
<map name="image-map">
 <area shape="rect" coords="516,151,666,227" href="" target="_blank" alt="" title="">
</map>

coords="516,151,666,227"は、画像の左上を基準に、
左から516px、上から151pxの位置を起点とした範囲を指定しています。
※元画像が 1000px 幅の場合のイメージ

ところが、スマートフォンなどで画像をCSSによって縮小表示すると、画像そのものは小さくなりますが、areaの座標は元のピクセル値のままです。

例えば、元画像が幅1000pxで、画面上では幅320pxに縮小されている場合、
画像は約0.32倍になっているのに、リンク範囲は元の座標を基準にしているため、実際の表示位置とクリック範囲が一致せず、ズレが発生します。

レスポンシブ対応で画像を縮小するとズレが発生する原因

PCでは正常にリンクが動作していても、スマートフォンでは画像が画面幅に合わせて縮小されることがあります。
例えば、元画像の横幅が1000pxで、スマートフォンでの表示幅が320pxの場合、画像は元の約32%の大きさになります。

img { 
 width: 100%; 
 height: auto; 
}

このようにCSSで画像を縮小しても、areaに設定した座標は自動的には変更されません。
そのため、画像だけが縮小され、リンクのクリック範囲が元の座標のまま残ることで、画像上のリンク位置と実際のクリック範囲がズレてしまいます。

imageMapResizerを使ってリンクのズレを解決する方法

imageMapResizerを使ってリンクのズレを解決する方法

イメージマップのリンクのズレを解決するために、今回はJavaScriptライブラリの「imageMapResizer」を使用しました。
imageMapResizerは、画像の表示サイズに合わせてイメージマップの座標を調整できるライブラリです。
まずは、CDNを利用してimageMapResizerを読み込みます。

<script src="https://cdnjs.cloudflare.com/ajax/libs/image-map-resizer/1.0.10/js/imageMapResizer.min.js"></script>

このコードをHTMLの/body直前などに記述します。
ライブラリを読み込んだら、以下のJavaScriptを記述します。

<script src="https://cdnjs.cloudflare.com/ajax/libs/image-map-resizer/1.0.10/js/imageMapResizer.min.js"></script>
<script>
window.addEventListener('DOMContentLoaded', function() {
    imageMapResize();
});
</script>

DOMContentLoadedはHTMLの解析が完了したタイミングで処理を実行するイベントです。
そのタイミングでimageMapResize() を呼び出すことで、ページ内のイメージマップの座標を画像の表示サイズに合わせて調整します。

これで、画像の表示サイズに合わせてイメージマップのクリック範囲が調整されるようになります。
なお、画像のサイズが後から変更される場合などは、再調整が必要になることがあります。
また、ライブラリの読み込みが正常に完了していることも確認してください。

PCのブラウザで表示を確認するだけでなく、スマートフォンの実機でもリンクのクリック範囲が正しいか確認することが大切です。
画面幅によって画像の表示サイズが変わるため、複数の画面幅でリンクの動作をチェックしてください。

まとめ

今回はこれで以上です。
HTMLのイメージマップは、1枚の画像に複数のリンクを設定できる便利な機能ですが、レスポンシブ対応で画像を縮小すると、リンクのクリック範囲がズレることがあります。
今回のような問題は、JavaScriptライブラリの「imageMapResizer」を使用することで、画像の表示サイズに合わせて座標を調整し、解決できます。

POINT
  • イメージマップは、1枚の画像に複数のリンクを設定できるHTMLの機能です。
  • coords属性で、画像内のクリック範囲を指定します。
  • レスポンシブ対応で画像を縮小すると、リンクの位置がズレることがあります。
  • imageMapResizerを使用すると、画像の表示サイズに合わせて座標を調整できます。
  • JavaScriptでimageMapResize()を実行して、イメージマップを調整します。
  • PCとスマートフォンの両方で、リンクが正しい位置で動作するか確認します。

テンプレートを見る

Web・デザインの本棚

Web・デザインの本棚を見る

スポンサーリンク

SHU

1991年生まれ九州の宮崎県育ち高校卒業後、愛知県で自動車関係のお仕事に5年間勤め、WEB業界に転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画基本インドアです!笑
つくる、しあわせをテーマとして主にWEBに関する様々な情報を発信しています。

オススメ記事

カテゴリー

月別アーカイブ

Others Posts記事

NEW
本の紹介