2005-06-17 アーカイブ

http://hxxk.jp/2005/06/17/

ページ内の特定の範囲へのリンクをするための tips

記事データ

投稿者

望月真琴

投稿日時

2005-06-17T01:16+09:00

タグ
概要

a 要素や name 属性にこだわらず、任意のブロックレベル要素に対して id 属性を指定すれば、サイトコンテンツの特定の範囲を指定する指標になるのではないでしょうか。

リプライ

2 件のリプライがあります。

記事本文

Musical Baton の泥臭いまとめ作業のペースを落とす

hxxk.jp - Musical Baton の泥臭いまとめはそろそろ広がりすぎたので、自分から振った人とか、ふだんやり取りをしている人の周りとかを中心にペースダウンして続けるように変更します。 またいつものように web 語りとか Movable Type 話とかに戻りますよ。

a 要素はインラインレベル要素

これはほんとにそのままアンカーであり、それでくくった場所にしるしを付けるタグです。 例えば、 <a name="aaa">ああああ</a> とHTML内でくくっておけば、

これを使って「http:www.example.org/index.html#aaa」とすると、index.html内のaaaの指定した位置にジャンプできます。

これを使って固定リンクを実現する方法もよく使われ、よく1つの日記に複数記事が掲載されたWeb日記サイト&ツールでは、このアンカーリンクを活用してPermalinkを実現しています。

で、これに足りないなあ〜と最近とみに思うのが、これ文章内の始めの位置を指定するだけなんすね。 ですから、これを使って場所指定でリンクすると、その部分にフォーカスされるわけですが、「範囲」は指定できない。

もし終端を指定することができたなら、ここから〜ここという指定がリンクでできるのにーと思った。

もしくはリンクタグのほうを拡張して、<a href="index.html#aaa-#bbb">リンク</a>とできたらいいのになあと思った。

a 要素や name 属性にこだわらなければ良いんじゃないでしょうか ? a 要素はインラインレベル要素である以上、通常書かれるであろう形態の文章全体をマークアップすることはできません。 よって、 a 要素の name 属性をアンカーの終点としてマークアップする場合は、文章内の任意のインライン部分がアンカーの終点となります。

また、 XHTML 1.0: The Extensible HyperText Markup Language (Second Edition) - 4.10. The elements with 'id' and 'name' attributes には、

Note that in XHTML 1.0, the name attribute of these elements is formally deprecated, and will be removed in a subsequent version of XHTML.

と、廃止予定であることが明言されています。 XHTML のほとんどの要素において、汎用属性として id 属性が使えるため、それを任意のブロックレベル要素に適宜割り振れば良いのではないでしょうか。

ブロックレベル要素に id 属性を割り当てる

<h2>中見出し</h2>
  <div class="section" id="id001">
    <h3>小見出し 001</h3>
      <p>
      文書 001
      </p>
  </div>
  <div class="section" id="id002">
    <h3>小見出し 002</h3>
      <p>
      文書 002
      </p>
  </div>

これは実際に hxxk.jp で用いている形式を簡単に表したものですが、このように見出し毎ではなくセクション毎に id を割り振ることで、各セクションに識別子を割り当てています。

<h2>中見出し</h2>
  <h3 id="id001">小見出し 001</h3>
    <p>
    文書 001
    </p>
  <h3 id="id002">小見出し 002</h3>
    <p>
    文書 002
    </p>

このように、 見出しに id 属性を割り振るケースも考えられますが、これは「リンク = ジャンプ」という誤解が根幹にあると思います。 例えば、上記の 2 つの例のような HTML に対し、 <a href="http:www.example.org/hoge.html#id001">id001</a> というリンクが向けられたとします。 現行の主なブラウザでは、どちらの例においても http:www.example.org/hoge.html の全体をレンダリングした後、 id001 部分が画面上に現れるように自動的に調節して表示します。

しかし、もし「フラグメント参照がなされたリンクをレンダリングする場合は、その参照がなされた部分 ( この場合、 id001 が割り振られた部分 ) しかレンダリングしない」というブラウザが登場すれば、前者の例では小見出し 001 および文書 001 の部分をレンダリングできますが、後者は小見出し 001 しかレンダリングせず、文書 001 の部分はレンダリングしてくれないでしょう。

「そんなブラウザなんて無いよ」と言われるかもしれませんが、フラグメント参照 - Personnel のような例も考えられていますので、そのうち登場する可能性は充分に考えられます。

よって、任意のブロックレベル要素に対して id 属性を指定すれば、 サイトコンテンツの位置等を指定する指標 となり得るのではないかと思います。

トラックバック送信先

アンカータグに先頭しかないのは欠陥説 : highbiscus -北国tv

a 要素や name 属性にこだわらず、任意のブロックレベル要素に対して id 属性を指定すれば、サイトコンテンツの特定の範囲を指定する指標になるのではないでしょうか。

リプライ

2 件のリプライが送られています。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

2005-06-18T10:25+09:00 - highbiscus

なるほど。別に普通にidとか使って範囲指定すりゃいいすよね。 ただ、「http:www.example.org/index.html#aaa」みたいな形で URLとして範囲指定できるといいなと思うわけなんです。 そのへんはまだこのあたりの機能の必要性の周知が広まって ブラウザとかが対応しなきゃいけないのでまだ遠そうですが そうなれば「範囲へのURL指定」というのができていろいろ活用法考えれていいなと思いました。 あと現状のnameみたいな先頭へのフォーカスと、ブロックレベル要素を使った範囲へのフォーカスは 別個に使い分けれたほうが便利な気がするので(あとは範囲末端へフォーカスもあってもいいか)、 そのへんも使い分けれるかたちで実装が進めばベストっすね。

2005-06-23T22:23+09:00 - 真琴

私の示した「ブロックレベルに id を割り当てて、特定の範囲全体を示す」という手法だと、その範囲の始点や終点を限定して示すことはできませんね。ちょっとスマートな方法を思いつきませんが、一定の範囲と、その始点・終点を効率的に示すマークアップができるようになると良いですね。たとえば、この範囲だけを読み飛ばしたい場合に「この範囲の終点」もしくは「次の範囲の始点」へのアンカーがあると便利かも。 ( 読み上げ系ブラウザはもちろん、視覚系ブラウザにおいてもそれが枷となることは恐らく無いでしょう。 )

補足情報

著作、講演、制作実績など