* [CODE(HTMLe)[a]] 要素型 (HTML, XHTML 1) [8] [[HTML]] の [DFN[[CODE(HTMLe)[a]] [[要素]]]]は、 [DFN[[[アンカー]]]] ([DFN[[[錨]]]]) を定義します。[[アンカー]]とは、 [[リンク]]の端点 ([[始点]]や[[終点]]) のことです。 元々 [CODE(HTMLe)[a]] [[要素]]は[[始点]]にも[[終点]]にも使えるように定義されましたが、 現在は[[始点]]として使う [WEAK[([[終点]]には [CODE(HTMLa)[[[id]]]] 属性を使う)]] のが普通になっています。 [22] 仕様書: - [[HTML 4]] -- [CSECTION[12.2 The [CODE(HTMLe)[A]] element]] [2] :状態:[[W3C]] [[勧告]] :[[名前空間URI]]:[CODE(URI)@en[[[http://www.w3.org/1999/xhtml]]]] :[[局所名]]:[CODE(HTMLe)@en[a]] ([Q@en[anchor]] ([[錨]]) より) :[[開始タグ]]:必須 :[[終了タグ]]:必須 :[[内容模型]]:[CODE(SGML)@en[(%[[inline]];)* −([CODE(HTMLe)[a]])]] (歴史的変遷 ) :出現できる文脈:[CODE(SGML)@en[%inline]] な文脈 (歴史的変遷 ) :[[属性]]: ,属性名 ,属性値型 ,既定値 ,意味 ,典拠 ,[CODE(HTMLa)[[[accesskey]]]] ,[CODE(SGML)[%[[Character]]]] , , ,[HTML 4] ,[CODE(HTMLa)[[[appl]]]] , , ,[[Macintosh]] [[creator]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[background]]]] , , ,背景実行モードで起動 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[bgcolor]]]] , , ,[[背景色]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[caption]]]] ,[CODE(SGML)[%[[Text]]]] , ,題 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[charset]]]] ,[CODE(SGML)[%[[Charset]]]] , , ,[HTML 4] ,[CODE(HTMLa)[[[charspace]]]] , , ,[[字間]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,[HTML4] %[[coreattr]] ,[CODE(HTMLa)[[[cmd]]]] , , ,[[命令]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[coords]]]] ,[CODE(SGML)[%[[Coords]]]] , , ,[HTML 4] ,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,[HTML4] %[[i18n]] ,[CODE(HTMLa)@en[[[directkey]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)[[[entireword]]]] , , ,完全一致・部分一致 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[exe]]]] ,[[ファイル名]] , ,[[Windows]] [[実行可能ファイル]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[href]]]] ,[CODE(SGML)[%[[URI]]]] , ,終点 ,[HTML 4] ,[CODE(HTMLa)[[[hreflang]]]] ,[CODE(SGML)[%[[LanguageCode]]]] , , ,[HTML 4] ,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[indexstring]]]] , ,(なし) ,索引項目群 ,[[NC4]] ,[CODE(HTMLa)[[[key]]]] , , ,[[鍵語]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,[HTML4] %i18n ,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML1] ,[CODE(HTMLa)[[[linkcolor]]]] , , ,リンク色 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[linespace]]]] , , ,[[行間]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)@en[[[loop]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)@en[[[mailbody]]]] , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)@en[[[memoryname]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)[[[name]]]] , , ,終点アンカー名 ,[HTML 4] ,[CODE(HTMLa)[[[newwindow]]]] ,([[真偽値属性]]) ,([[偽]]) ,新窓で開く ,"非標準, 非推奨 → [CODE(HTMLa)[[[target]]]]" ,[[T-Time]] ,[CODE(HTMLa)@en[[[nonumber]]]] , , ,番号なし ,非標準 ,[Vodafone] ,[CODE(HTMLa)[[[onblur]]]] , , , ,[HTML 4] ,[CODE(HTMLa)[[[onclick]]]] , , , ,[HTML4] %[[events]] ,[CODE(HTMLa)[[[ondblclick]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onfocus]]]] , , , ,[HTML 4] ,[CODE(HTMLa)[[[onkeydown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeypress]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onkeyup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousedown]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmousemove]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseout]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseover]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onmouseup]]]] , , , ,[HTML4] %events ,[CODE(HTMLa)[[[onto]]]] , , , ,非標準 ,[CODE(HTMLa)[[[pointercolor]]]] , , ,現在頁指示子色 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[prop]]]] , , ,[[特性]]適用対象 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[rel]]]] ,[CODE(SGML)[%[[LinkTypes]]]] , ,関係 (順) ,[HTML 4] ,[CODE(HTMLa)[[[rev]]]] ,[CODE(SGML)[%[[LinkTypes]]]] , ,関係 (逆) ,[HTML 4] ,[CODE(HTMLa)[[[shadowcolor]]]] , , ,[[影]]の[[色]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[shake]]]] , , ,揺れ表示 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[shape]]]] ,[CODE(SGML)[%[[Shape]]]] ,[CODE(HTML)[[[rect]]]] , ,[HTML 4] ,[CODE(HTMLa)@en[[[src]]]] ,[CODE(SGML)[%[[URI]]]] , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)@en[[[soundstart]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[subpointercolor]]]] , , ,前頁指示子色 ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[tabindex]]]] ,[CODE(SGML)[[[NUMBER]]]] , , ,[HTML 4] ,[CODE(HTMLa)[[[target]]]] , , , ,[HTML 4] 非推奨 ,[CODE(HTMLa)[[[textcolor]]]] , , ,[[文字色]] ,非標準 ,[[T-Time]] ,[CODE(HTMLa)[[[title]]]] , , ,注釈的題・連結の性質 ,[HTML4] %coreattr ,[CODE(HTMLa)[[[tocstring]]]] , ,(なし) ,目次での標示 ,NC4 ,[CODE(HTMLa)[[[type]]]] ,[CODE(SGML)[%[[ContentType]]]] , , ,[HTML 4] ,[CODE(HTMLa)@en[[[viblength]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)@en[[[vibration]]]] , , , ,非標準 ,[Vodafone] ,[CODE(HTMLa)@en[[[volume]]]] , , , ,非標準 ,[Vodafone] ,[CODE(XMLa)[[[xmlns]]]] ,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] ,== ,[[名前空間名]] ,[[W3C]] [[勧告]] ,[XHTML 1] ,[CODE(HTMLa)[[[xsize]]]] , , ,[[文字]]の大きさ ,非標準 ,[[T-Time]] ,[CODE(HTMLa)@en[[[z]]]] ,([[真偽値属性]]) ,([[偽]]) , ,非標準 ,[Vodafone] [11] [CODE(HTMLe)[a]] 要素はアンカーを定義します。 [CODE(HTMLa)[name]] 属性や [CODE(HTMLa)[id]] 属性を使うと、 終点アンカーにすることができます。 [CODE(HTMLa)[href]] 属性を使うと、始点アンカーにすることができます。 この3つの属性は、1つも使わなくても構いませんし、3つとも使っても構いません。 [[#comment]] ** 内容 [1] [CODE(HTML)[a]] 要素の子孫要素に [CODE(HTML)[a]] 要素は存在できません [SRC[XHTML 1.0]]。 [2] つまり、[CODE(HTML)[a]] 要素の入れ子は禁止されています。なのにした場合の挙動は未定義ですが、可能性としては - [3] 両方とも「意図したように」扱う。内側の [CODE(HTML)[a]] 要素の部分はリンク先が外側と違う、みたいな。 - [4] 外側の [CODE(HTML)[a]] 要素を無視する。 - [5] 内側の [CODE(HTML)[a]] 要素を無視する。 - [6] 外側の [CODE(HTML)[a]] 要素を、内側の [CODE(HTML)[a]] 要素の[[開始タグ]]直前で閉じる。 辺りがあるでしょう。 [7] [[WinIE 6.0]] の動作は >>4 です。 [20] [CODE(HTMLe)[a]] を入れ子にすることはできません。 [27] 仕様書: - [[HTML 4]] 12.2.2 Nested links are illegal - [[XHTML 1.0]] [28] '''文書中で一意であること''': [[文書]]中で複数の [CODE(HTMLa)@en[[[href]]]] [[属性]]付き [CODE(HTMLe)@en[[[a]]]] [[要素]]の[[内容]]の[[文字列]]が等しい時は、 その [CODE(HTMLa)@en[[[href]]]] [[属性]]の値 ([[リンク先]]) も等しいのが望ましいとする考え方があります。 この考え方に従うと、例えば [PRE(HTML bad example code)[ あれの使い方や、 これの使い方。 ]PRE] は''好ましくない''ことになります。 この考え方の背景には、 [Q[同じように見えるものは同じように機能するべきだ (その方が分かりやすい)]] という考察があります。 先の例は [PRE(HTML example code)[ あれの使い方や、 これの使い方。 ]PRE] とした方がより分かりやすいと思われます。 [29] ''注意'': >>28 は絶対そうでなければならないというほどのことでもありません。 その場その場で文脈に応じて何が一番好ましいのか考える必要があります。 例えば、 [PRE(HTML example code)[

あれ: 使い方実例

これ: 使い方実例

]PRE] は >>28 の例と内容は似ていますが、同じ対処法を採ることはできません。 無理に同じ方法を適用すると、 [PRE(HTML example code)[

あれの使い方あれの実例

これの使い方これの実例

]PRE] とでもなるのでしょうが、かえって分かりにくいように思えます。 [30] >>28-29 のような場合の別の対処法として、 [CODE(HTMLa)@en[[[title]]]] [[属性]]によって説明を加えるのがよいとも言われます。 例えば >>29 の例では [PRE(HTML example code)[

あれ: 使い方実例

これ: 使い方実例

]PRE] となります。 これなら悪くはなさそうです。 [31] '''始点リンク内容は自己完結している方が良いか''': [CODE(HTMLa)@en[[[href]]]] [[属性]]付き [CODE(HTMLe)@en[[[a]]]] [[要素]]の[[内容]]の[[文字列]]はそれだけで[[リンク先]]がわかる方が良いと言われることがあります。 そしてその根拠として、[[文書]]中の[[リンク]]の一覧を抽出した時に良く分からないものが沢山出てきて困るというのが挙げられます。 (この[Q[根拠]]は >>28 の主張の根拠にも使われます。) [32] >>31 のような主張は元々 [[here症候群]]への (誤った) 反論として生じたのではないかと考えられますが、 しばしば絶対的な基準であるかのように語られます。 確かに[[リンク]]一覧に [Q@en[[[here]]]] が20個も並んでいたり、 [Q[例]]が数十個あってそれぞれリンク先が違っていたりすると、 [[リンク]]一覧を抽出した意味も無くなります。 しかし [[HTML]] [[文書]]に対する[[リンク]]一覧はあくまで本来の表示に対する補助的な機能であるべきで、 それだけで完結させられるようにしろというのは主張に無理があります。 [CODE(HTMLe)@en[[[link]]]] [[要素]]ならともかく、 [CODE(HTMLe)@en[[[a]]]] [[要素]]は普通の[[文章]]中で[[リンク]]するための[[要素]]です。 [CODE(HTMLe)@en[[[a]]]] [[要素]]の[[リンク]]は元々[[文脈]]の中に存在しているのです。 適当な[[文]]から適当な[[単語]]を1つや2つ抜き出しても必ずしも意味のある使い方が期待できないのと同様、 [[リンク]]を[[文脈]]なしで抜き出してもさして役に立たなくて当然なのです。 (それを鑑みると、 [[Webブラウザ]]の[[リンク]]一覧は、 一覧中の項目を選ぶと本文中の対応する部分がどこか表示されるくらいの機能を備えているくらいでないと駄目でしょう。) [[#comment]] ** レンダリング [14] HTML 4 仕様書の触れるレンダリング例: - 始点アンカー -- 下線を引く -- 色反転させる -- 既読かどうかでレンダリング方法を変える -- 活性化 (マウスで[[かちっ]], 鍵盤や音声で指示など) すると終点資源を取出す (設定によってはそれを表示する) - 終点アンカー -- 特別にレンダリング方法を変えることはしないのが普通 [21] [CODE(HTMLe)[a]] 要素によって定義されたリンクを[DFN[[[活性化]]]]すると、 UA は通常リンクをたどります [SRC[HTML 4 17.11.2]]。 [[#comment]] ** 不思議解釈 [9] 今更不思議マーク付けの説明なんて読んでも驚きはしないと 思っていたのですが、 [SAMP(HTML)[]] で[Q[閉じタグ]] [SAMP[]] は無いのが普通とかいうのを読んで驚いてしまいました:-) [23] > 裏技大公開 > title属性を使って説明をいれることが簡単にできるようになります。 HTMLの話をするとtitle要素というものもありますが、 これとは別にtitle属性というものもあり、共通の属性ということで どの要素でも持っている属性です。 どの要素でもと言いながら、なぜ [CODE(HTMLe)[[[a]]]] 要素型を使っているのか。 そしてなぜ空の[[素片識別子]]の[[同文書参照]]への[[リンク]]としているのか。 不思議マークアッパーの行動はまさに不思議。 出典: [CITE[マウスを重ねたときに説明をつける - Webデザインの教科書 :: オシャレチップス]] (2005年4月付け、2005年4月現在) [24] 歴史的にはともかく、 [CODE(HTMLe)[[[a]]]] の中に入れることができるのは[[行内要素]]だけです。 にもかかわらず、 [CODE(HTMLe)[[[li]]]] とかを入れられるという解説が未だに後を絶ちません・・・。 リスト項目をリンクにしたいと思うのはもっともですが、 できないものはできないのでしてね・・・。 [25] '''終了タグの省略''': [[終点アンカー]]として (つまり [CODE(HTMLa)@en[[[name]]]] 属性と共に) 使われている [CODE(HTMLe)@en[[[a]]]] 要素で[[終了タグ]]を省略したものがよく見られます。 (もちろん'''間違い'''です。) 解釈は実装依存になりますが、 [[Gecko]] だと[[ブロック要素]]の[[開始タグ]]が見つかるとそこでいったん中断し、 [[開始タグ]]の後に再度元の [CODE(HTMLe)@en[[[a]]]] [[開始タグ]]があるかのように扱われます。 [WEAK[(他の[[行内要素]]でも同じような感じ。)]] だから同じ [CODE(HTMLa)@en[[[name]]]] が複数 (たぶん大量に) 出現したりしてしまいまして、おかしなことになります。 ちなみに [[W3C]] の仕様書で [[XMLspec]] から [[XHTML]] に変換したものの中に [[XML]] の[[空要素]]の構文を使ったものが登場しまして、 [[Gecko]] が [[HTML]] として構文解析すると [CODE(XML)[/]] はごみとみなされるので同じ現象が発生します。 [[#comment]] ** 歴史 [34] [CODE(HTMLe)@en[[[a]]]][[要素型]]は、[[HTML]]の最大の特徴の一つですから、 [[HTML]]の一番初めから存在した[[要素型]]だと考えられます。 [35] [[Line Mode Browser]]には、1991年2月の段階で既に [CODE(HTMLa)@en[[[href]]]][[属性]]と[CODE(HTMLa)@en[[[name]]]][[属性]]が実装されています。 2月27日には[[要素]]内で[[タグ]]が使えるようになりました。 ;; [CITE@en[Change History of Line Mode Browser]] [[#comment]] ** 実装 [17] [CODE(HTMLa)[a]] 要素は (意味的に適切かという問題はあるにせよ、 構文的に) 空にもなり得るので、 UA は空の終点アンカーを探すこともできるべきですが、 そうでない UA もあると HTML 4 仕様書は言っています。 UA によってはうまく機能しない例 [PRE(HTML)[ ...some HTML... Link to empty anchor ]PRE] (HTML 4 仕様書より、改) [[#comment]] ** 例 [12] 単純な始点アンカーの例 [PRE(HTML)[ For more information about W3C, please consult the W3C Web site. ]PRE] (HTML 4 仕様書より) レンダリング例: [PRE[ For more information about W3C, please consult the W3C Web site. ~~~~~~~~~~~~ ]PRE] [15] [PRE(HTML)[ ...text before the link... For more information, please consult anchor one. ...text after the link... ]PRE] (HTML 4 仕様書より、改) 同じ階層の [SAMP(URI)[one.html]] (>>13) の終点アンカー [SAMP[ANCHOR-ONE]] への連結の例。 [13] 単純な終点アンカーの例 [PRE(HTML)[ ...text before the anchor... This is the location of anchor one. ...text after the anchor... ]PRE] (HTML 4 仕様書より、改) [16] 始点アンカーかつ終点アンカーな例 [PRE(HTML)[ I just returned from vacation! Here's a photo of my family at the lake.. ]PRE] (HTML 4 仕様書より、改) [18] 目次の例 [PRE(HTML)[

Table of Contents

Introduction
Some background
On a more personal note
...the rest of the table of contents... ...the document body...

Introduction

...section 1...

Some background

...section 2...

On a more personal note

...section 2.1... ]PRE] [19] >>18 を [CODE(HTMLa)[id]] に書き換えた例 [PRE(HTML)[

Table of Contents

Introduction
Some background
On a more personal note
...the rest of the table of contents... ...the document body...

Introduction

...section 1...

Some background

...section 2...

On a more personal note

...section 2.1... ]PRE] (HTML 4 仕様書より) [[#comment]] ** メモ [33] [CITE[ステータスバー偽装 | Okumura's Blog]] ([[名無しさん]] [WEAK[2005-11-25 07:33:22 +00:00]]) [[#comment]] * メモ