クリッカブルマップ(イメージマップ)とは、画像の特定の箇所を他のリソースと関連付けたものです。
よく、地図の特定の地域を指定すると、当該地区の店舗情報を表示するようになっているウェブページがありますが、それらは多くの場合クリッカブルマップの機能を利用しております。
尚、クリッカブルマップは携帯電話などでは使えません。
クリッカブルマップには、二つの方法があります。
ここでは前者のクライアント側クリッカブルマップのみについて解説します。
クライアント側クリッカブルマップを実現するに当たって注意すべき事を挙げておきます。
クライアント側クリッカブルマップを実現するには、XHTML 1.0以前の規格を利用する必要があります。
クライアント側クリッカブルマップを実現するには、以下の要素・属性を用います。
画像をクライアント側クリッカブルマップにするには、当該画像を埋め込む<img>要素にusemap属性を用いて後述の<map>要素と関連付けます。
例えば、<map id="MAP1" name="MAP1">要素と対応させる場合は、以下のようになります。
… <img alt="国内の支店マップ" src="Japan.GIF" width="320" height="200" usemap="#MAP1" /> …
このとき、属性値の前には「#」が付く事を忘れないで下さい。
尚、usemap属性は、<object>要素でも利用出来ます。この場合、後述の<map>要素は当該<object>要素の内容にしても構いません。
<map>要素は、クライアント側クリッカブルマップの定義です。
内容としては、領域とリンク先の関係を明示する内容となっており、具体的には、
のどちらか片方をを取ります(XHTML 1.0の場合)。
<area>要素はネットスケープ 4.x以前などの旧いウェブブラウザでも問題無く処理出来ますが、クリッカブルマップそのものが全く利用出来ない環境への配慮が難しくなり、別にそう言う環境用のテキストメニューを用意する必要があります。
<a>要素を含んだブロックレヴェル要素はクリッカブルマップが全く利用出来ない環境へは<map>要素の内容がそのまま利用出来るようになり便利ですが、ネットスケープ 4.x以前などの旧いウェブブラウザでは<map>要素内は<area>以外認識しないため、クリッカブルマップとして機能しません。
このため、旧いウェブブラウザとの互換性を守るために<area>要素
を用いて、クリッカブルマップに対応出来ない環境向けの代替コンテンツを別に記述すると良いでしょう。
HTML 4.01では<map>要素に対して、仕様書、DTD(文書型定義)共に<area>要素とブロックレヴェル要素の双方を含める事を認めておりますが、XHTML 1.0からはDTD(文書型定義)で<map>要素にはどちらか片方のみを入れる事が出来ると言う制限が加わりました。
具体的には、以下のようになります。
<map name="マップ名" id="マップ名"><area alt="代替文字列" shape="領域の形" coords="座標列" href="リンク先URL" />…</map>… <!-- クリッカブルマップが使えない環境への代替コンテンツ --><ul><li><a href="リンク先URL" />代替文字列</a></li>…</ul>
尚、後半の<ul>要素が代替コンテンツとなっております。
基本的に、<map>要素はクライアント側クリッカブルマップとなる<img>要素が埋め込まれているHTML文書の<body>要素内であれば、当該<img>要素より前に置いても後ろに置いても構いません。
但し、<map>要素はインライン要素となっておりますので、必ず何らかのブロックレヴェル要素内に置く必要があります。
<map>要素には属性として、name属性とid属性が定義されます。
旧式のウェブブラウザではname属性のみを認識しますが、XHTMLではid属性を使う事を推奨しており、このため併記する事となります。
<map要素>の直下には領域の数だけこの<area>要素を記述する事になります。
書式は<map要素>で書いた通りですが、改めて説明します。
<area alt="代替文字列" href="リンク先URL" shape="領域の形" coords="座標列" accesskey="アクセスキー" tabindex="タブ移動優先順位" />
<area>要素の属性は以下の通りとなります。
<area>要素のalt属性は、<img>要素でのalt属性同様必須の属性で、クリッカブルマップが使えない場合の代替文字列を指定します。
クリッカブルマップが使えない場合は、この属性値をアンカーとする事が求められております。
ですから、必ずリンク先の意味が分かるように書くべきでしょう。
alt="埼玉県の支店"」などと書く事になるでしょう。尚、<area>要素などクリッカブルマップそのものに対応出来ない環境もあるため、alt属性だけでなく、クリッカブルマップを用いないメニューを代替コンテンツとして用意しなければいけない事は言うまでもありません。
リンク先のURLを指定します。
仕様上は必須ではありませんが、このURLが無いと意味がありません。
領域の形を指定します。
値としては以下のようになっております。
領域の座標などを指します。
shape属性の値により以下のようになります。
"default"の場合"circle"の場合coords="中心のX座標,同Y座標,半径"」となります。"rect"の場合coords="左上X座標,同Y座標,右下X座標,同Y座標"」となります。"poly"の場合「coords="一番目のX座標,同Y座標,二番目のX座標,同Y座標, … ,n番目のX座標,同Y座標"」となります。
これらの点を線分で結んで行った領域が指定されます。
座標はクリッカブルマップとなる画像の左上を(0,0)とした座標となります。従ってマイナスはあり得ません
キーボードで直接アクセス出来るキーを指定します。<a>要素のaccesskey属性と同じです。
タブキーを押した際のフォーカス移動の優先順位を指定します。<a>要素のtabindex属性と同じです。
尚、同じクリッカブルマップ内で指定領域が重なってしまう場合は、仕様上前の方を優先する事になっております。
さて、今まで仕様について解説しましたが、実際のクリッカブルマップを具体的に挙げて見ましょう。
このコンテンツの『HTML&CSS入門』の目次をクリッカブルマップで作ったものです。
HTML文書では以下のように書かれております。
<img>要素にusemap属性が使われ、その後に<map>要素でイメージマップが定義され、<area>要素でイメージマップが定義されているのが分かります。
<div class="contents"><img alt="『HTML&CSS入門』目次" src="ClickableMap.GIF" width="232" height="89" usemap="#SAMPLE" /></div><div class="defMap"><map id="SAMPLE" name="SAMPLE"><area alt="HTML入門" href="../Introduction/HTML5/index.html" shape="circle" coords="41,45,30" /><area alt="CSS入門" href="../Introduction/CSS/index.html" shape="poly" coords="115,17,81,74,149,74" /><area alt="制作作法" href="../Introduction/index-WEB.html" shape="rect" coords="159,17,218,75" /></map></div><dl><dt>『<a href="index.html">HTML&CSS入門</a>』目次。</dt><dd><ul><li><a href="../Introduction/HTML5/index.html">HTML入門</a></li><li><a href="../Introduction/CSS/index.html">CSS入門</a></li><li><a href="../Introduction/index-WEB.html">制作作法</a></li></ul></dd></dl>