* img 要素・object 要素・input 要素 usemap 属性 (HTML, XHTML 1) [10] [[HTML]] の [CODE(HTMLe)[[[img]]]] 要素および [CODE(HTMLe)[[[object]]]] 要素および [CODE(HTMLe)[input]] 要素の [DFN[[CODE(HTMLa)[usemap]] 属性]]は、 [[画像写像]]を要素に関連付けます。 [11] 仕様書: - [[HTML 4]] -- --[CSECTION@en[B.6.2 Future projects]] - [[XHTML 2.0]] --[CITE@en[XHTML 2.0 - XHTML Image Map Attributes Module]] [[#comment]] ** 属性値 [12] この属性の値は [CODE(SGML)[%[[URI]]]] ([[URI参照]]) です。 HTML 4 仕様書には[Q[値は [CODE(HTMLe)[map]] 要素の [CODE(HTMLa)[[[name]]]] 属性と一致しなければならない]]とか書かれていますが、 無理です。 実際には、 [CODE(HTMLa)[name]] 値を[[素片識別子]]とした URI 参照とします。 [13] この属性は省略可能です。 省略するとクライアント側画像写像と結び付けられていないことになります。 [[#comment]] *** IDREF [15] [[XHTML m12n]] では属性値の型が URI 参照から [CODE(XML)[[[IDREF]]]] 改められました。 (ただし、 >>5 によれば修正することを検討中のようです。) [1] ''XHTML1.1のusemap属性の仕様変更'' [2] [[URI]] と [[IDREF]] ですから、 とりあえず区別は出来ますけど、非互換変更は嬉しくないですねぇ。 同じ[[名前空間]]で非互換変更はねぇ。 [7] >>2 やっぱり区別できないや。相対 URI で [CODE(URI)[foo]] みたいな場合。 もっとも[DEL[ほとんどの場合は]>>16][INS[必ず]>>16][[素片識別子]]付きの URI 参照になるでしょうから、 現実的には問題ないのですが。 [16] [Q[ほとんどの場合は]]と書いていましたが、[Q[必ず]]です。 といいますのは、 [CODE(HTMLa)[usemap]] の参照先は [CODE(HTMLe)[map]] と定義されているからです。仮に [CODE(HTMLe)[map]] を[[文書要素]]としたところで、それは文書全体ではなく文書要素に過ぎないので、 それを参照するためにはやはり素片識別子が必要です。 ですから、[Q[[CODE(HTMLe)[map]] を参照]]という制約の範囲内で素片識別子なしの URI で済ませられる可能性はありません。 ただし、独自拡張で例えば CERN 方式の鯖側画像写像定義ファイルを参照できるとか、 そういうのがある場合はこの限りではありません (が実際にはないと思います)。 [9] >>2 しまった! [CODE(char)[:]] が [CODE(XML)[[[ID]]]] に含まれていたら区別できない! と思いきや、 [[XHTML m12n]] を [[XML名前空間]]無しで使うのは不可能ですから、無問題なのでした。 [4] XHTML 1.1 の 1.0 との差異リストにも載ってないし、気づいてない人も多そう。 [22] [CITE[HTML Working Group Voyager Issue Tracking System - Modularization-abstractions/8502]] ([[名無しさん]]) [24] >>22 によれば、一度は[[URI]]に修正することに決めたものの、 ずっと放置した挙句、やっぱり[CODE(XML)@en[[[IDREF]]]]にしておいて、 [[XHTML 2.0]]ではまた[[URI]]に戻すそうですwwwwwwwww ;; 確かにその後 [[XHTML 2.0]] では [[URI]] になっています。 @@ いつ変わったか調べる。 [25] [CITE[[XHTMLMod] usemap="" attribute should be URI, not IDREF from Anne van Kesteren on 2006-08-04 (www-html-editor@w3.org from July to September 2006)]] 早く直せよねぇwww ([[名無しさん]] [WEAK[2006-08-06 05:16:43 +00:00]]) [26] [[XHTML m12n]] の [[DTD]] 内には次のような説明があります。 [PRE(XML code comment)[ ]PRE] ;; 実装されていないからといって、構文を変えてしまったら、 実装が零になってしまうわけですが・・・。 ([[名無しさん]]) [27] >>25 [CITE[Re: [XHTMLMod] usemap="" attribute should be URI, not IDREF (PR#9641) from Anne van Kesteren on 2006-10-17 (www-html-editor@w3.org from October to December 2006)]] ([[名無しさん]] [WEAK[2006-10-17 23:26:11 +00:00]]) [31] [CITE@en[Hixie's Natural Log: Fixing the "usemap" attribute]] ([CODE[2007-03-06 22:48:06 +09:00]] 版) [[W3C]] [[HTML WG]] は2000年 ([[勧告]]前) の時点で既に問題を承知していながら大した問題ではないと無視したり、 問題を指摘されて修正すると回答しながら放置したりを繰り返している。 ([[名無しさん]]) [32] >>31 [[www-html-editor]] はずっと無視されてたのかと思ったら、個人宛 & [[w3c-html-wg]] に返信していたのか・・・。 ([[名無しさん]]) [39] これは [[HTML 4]] の [Q@en[The value of usemap must match the value of the name attribute of the associated MAP element.]] という説明から [CODE(HTMLa)@en[[[usemap]]]] は [CODE(XML)@en[[[IDREF]]]] にできると [[XHTML m12n]] の中の人が誤解してしまったのでしょうかね? (その真上に [Q@en[[[uri]]]] と書いてあるのに。) あるいは、 [[HTML 4]] のこの部分の中の人も [[XHTML m12n]] の中の人も同じように勘違いしていたのでしょうかね? [41] [CITE@en[XHTML2 Working Group Teleconference -- 24 Oct 2008]] ([TIME[2008-10-24 23:33:09 +09:00]] 版) >SP: long ago, we said to anne van kestren that we would change IDREF on imagemaps when re-issued 1.1 ... should make sure we should do that > SM: where 1.2 or 2? > RM: 1.2 > SM: override def of module for m12n - not update m12n because then break all other languages [46] >>41 この Anne との話ってのは >>27 ですよね、2006年の。。。 なんていうか・・・ [[WHATWG]] があってよかった。。。 [47] [CITE[XHTML™ 1.2]] ([TIME[2008-12-24 06:07:11 +09:00]] 版) ** UA による利用 [[#comment]] *** object の場合 [17] [CODE(HTMLa)[usemap]] 属性が [CODE(HTMLe)[[[object]]]] 要素に指定されている場合は、その [CODE(HTMLe)[object]] は画像とみなされます。 UA は、その [CODE(HTMLe)[object]] との利用者[RUBYB[対話] [interaction]]を単なるクライアント側画像写像だけで実装して構いません。 音声ブラウザやロボットは [CODE(HTMLe)[object]] を処理せずに対話できます。 UA は物体を取出したり (処理したり) さえしなくても構いません。 著者はすべての UA が物体を取出したり処理したりすることを期待するべきではありません。 [SRC[HTML 4]] [18] ということは、 [CODE(HTMLe)[object]] 自体もその内容もレンダリングせずに、 代わりに結び付けられた画像写像の [CODE(HTMLe)[map]] だけをレンダリングしておいてもよいということでしょうか。 [[#comment]] * 歴史 ** [CODE(HTMLe)@en[input]] 要素での使用 [42] [[HTML 4]] では [CODE(HTMLa)@en[[[usemap]]]] [[属性]]は [CODE(HTMLe)@en[[[input]]]] [[要素]]でも定義されていました。 ;; ちなみに [CODE(HTMLa)@en[[[ismap]]]] [[属性]]も定義されていました。 [DEL[ [21] この属性は [CODE(HTMLe)[input]] 要素でも使えます。 説明がまったく無いのでなんともいえないのですが、おそらくは [CODE(HTMLa)[[[type]]]] が [CODE(HTML)[[[image]]]] の時だけ使えるものだと思われます。 しかし、 [CODE(HTML)[image]] は提出ボタンであり、 それそのものが[[鯖側画像写像]]として機能します。 [CODE(HTMLa)[usemap]] 属性が指定されていると何が起こるのか規定がないのは困ったことです。 ]DEL] [43] [[HTML 4]] 仕様書の規定部分にはこの[[属性]]の存在以外に何ら説明がないのですが、 実は将来の予定 (参考) にこんな記述がありました。 > Another possible extension would be to add the [CODE(HTMLa)@en[[[usemap]]]] attribute to [CODE(HTMLe)@en[[[INPUT]]]] for use as client-side image map when "[CODE(HTMLa)@en[[[type]]]]=[CODE(HTML)[[[image]]]]". The [CODE(HTMLe)@en[[[AREA]]]] element corresponding to the location clicked would contribute the value to be passed to the server. To avoid the need to modify server scripts, it may be appropriate to extend [CODE(HTMLe)@en[[[AREA]]]] to provide x and y values for use with the [CODE(HTMLe)@en[[[INPUT]]]] element. [SRC@en[HTML4 B.6.2]] [44] 既に[[属性]]が存在している本文の規定とは矛盾するのですが、将来的に [CODE(HTMLe)@en[[[input]]]] [[要素]]でも[[クライアント側画像写像]]を使えるように拡張する案があったようです。 (だとしても [CODE(HTMLa)@en[[[ismap]]]] [[属性]]があるのは謎ですがね。) [40] [[HTML 5]] でも当初[[画像写像]]に関する定義の一部として [CODE(HTMLe)@en[[[input]]]] [[要素]]の [CODE(HTMLa)@en[[[usemap]]]] [[属性]]に言及がありましたが (r985 で追加)、すぐに r997 で削除されました。 ;; [CITE@en[(X)HTML5 Tracking]] ([TIME[2008-10-06 21:38:03 +09:00]] 版) ;; [CITE@en[(X)HTML5 Tracking]] ([TIME[2008-10-06 21:39:21 +09:00]] 版) [33] [CITE[HTML5 IRC logs: freenode / #whatwg / 20070808]] ([CODE[2007-08-08 20:51:29 +09:00]] 版) > [07:19] in other news, only seems to work in opera and firefox, not in safari and IE > [07:25] according to some old data I have, 17% of usemap="" attributes on elements have the value "#Map" > [07:27] roughly 0.008% of elements have usemap="" attributes > [07:28] (it's less common than , , , , , etc) [35] [CITE[HTML5 IRC logs: freenode / #whatwg / 20070809]] ([CODE[2007-08-10 09:50:30 +09:00]] 版) [36] [CITE[ - Anne’s Weblog]] ([CODE[2007-08-10 18:30:58 +09:00]] 版) [37] [CITE[Re: (was: Re: ''''''[''''''html5'''''']'''''' HTMLMapElement.images)]] ([[Ian Hickson ]] 著, [CODE[2007-08-10 03:00:40 +09:00]] 版) [45] 削除されたのは実際 [[Firefox]] と [[Opera]] にしか実装されておらず (実装されていただけでも驚きですが)、 利用例を見ても不必要なものや間違っていて却って有害なものばかりなため、 仕様に含める ([[利用者エージェント]]が対応する) 意義がないと判断されたためです。 削除された際には一部反対する意見もありましたが、説得力のある主張はありませんでした。 * 実装 [14] [CODE(HTMLa)[usemap]] 属性と異なる文書にある [CODE(HTMLe)[map]] 要素を使うのに対応している [[WWWブラウザ]]は多くありません。 [CODE(XML)[[[IDREF]]]] による指定にも対応しているブラウザも少数あります。 (>>5 をみてください。) - [6] ''HTML image map test'' - [5] ''XHTML image map test - results'' [8] 素片識別子に [CODE(URI)[#]] をつけない間違いはクライアント側画像マップができたころからあったみたいです。 てことは当時の実装はそういうエラー処理をしていたんですか。 一方で当時の実装はちゃんと URI として外部参照にも対応していたものがあったという話もあります。 [28] [CITE[Bug 109445 – Referencing a client-side image map declared with id attribute doesn't work]] ([CODE[2007-02-10 14:21:53 +09:00]] 版) ([[名無しさん]]) [29] [[WinIE]] 6 も [[Firefox]] 1.5 も、 [[百分率符号化]]は理解しません。 [CODE(URI)[[[%]]]] は [CODE(char)[[[%]]]] という[[文字]]として解釈します。 (as specced in [[Web Applications 1.0]].) ([[名無しさん]]) [30] [[Firefox]] 1.5 は、 [CODE(HTMLa)@en[[[id]]]] との[[一致]]には[[大文字]]と[[小文字]]を区別''します''が、 [CODE(HTMLa)@en[[[name]]]] との[[一致]]には区別''しません''。 [[WinIE]] 6 はどちらの[[属性]]とも区別''しません''。 ([[名無しさん]]) [[#comment]] ** 他との関係 [13] 画像写像は [CODE(HTMLe)[[[map]]]] 要素で定義します。 [[#comment]] ** 例 [19] 簡単な画像写像の例 [SRC[HTML 4、改]] [PRE(HTML)[

navigation bar ]PRE] [34] [CITE[Mares Avanti Quattro Fins - Mares Adjustable Scuba Fins]] ([CODE[2007-08-09 08:11:10 +09:00]] 版) > [PRE(HTML example code)[ ]PRE] ([[名無しさん]]) [[#comment]] ** メモ [23] HTML 4 DTD の[[注釈]] (参考) には [Q[USEMAP points to a MAP element which may be in this document or an external document, although the latter is not widely supported]] ([CODE(HTMLa)[usemap]] はこの文書または外部文書の [CODE(HTMLe)[map]] 要素を指します。ただし後者はあまり広く実装されていません。) と書かれています。 [38] [CITE@ja-JP[クライアントサイド イメージマップ - Weblog]] ([CODE[2007-08-14 21:00:00 +09:00]] 版) [[#comment]] * メモ