ライン要素に関するメモ
XHTML 2.0のライン要素(The l element)についてだが、私はてっきりbr要素が変形しただけのただの物理要素だと思い込んでいた。しかし原文をよく見返してみると、The l element represents a semantic line of text.
ともあるように、わりとセマンティックな要素らしい。
意味的な行要素というのがいまいちピンとこないが、ドラフトには“コンピュータコード”や“詩”のマークアップに用いられるとのこと。Basic系などのプログラミング言語では改行が重要な意味を持つので、それには一応納得できる。
しかし「コンピュータコードと詩」と聞いて、ぱっと思いつくのは “pre要素” と新しく提案された “blockcode要素” である。それらは慣習的にpre要素によってマーク付けされていたし、今後はbloclcode要素も大いに用いられるだろう。それらを用いずして、わざわざ物理的概念寄りな“行”という名を冠した要素を使うだろうか。手間の面でも、毎行毎行ライン要素をマーク付けしていくほうがより煩雑な作業である事は議論に値しない。
で、ライン要素を用いるメリットはというと、例文にも挙げられているが CSS2 の counterプロパティ との相性がひどく良い。
1: Option Explicit 2 3: Private Sub Form_Load() 4: dim Greet as string 5: Greet = "Hello World" 6: MsgBox Greet 7: End Sub
このように、CSSを用いてプログラムコード行番号を付けることができる。
l要素はblockquoteとquoteの関係のように、blockcode要素のインライン版とも考えてみたが、あいにくそのポジションにはcode要素という先輩がいる。やはり意味を持たない行要素と捉える方が良いらしい。となると、blockcodeとl要素を共存させるマーク付けにしてみたらどうだろうか。
<blockcode>
<l> Option Explicit</l>
<l></l>
<l> Private Sub Form_Load()</l>
<l> dim Greet as string</l>
<l> Greet = "Hello World"</l>
<l> MsgBox Greet</l>
<l> End Sub</l>
</blockcode>
プログラムコード群をグループ化するのなら、p要素よりもこちらのほうが意味的にも妥当だろう。blockcodeはデフォルトで改行してくれるが、わざわざこうやって明示しても問題は無いはずだ。個人的にはblockcodeで済ませると思うが。
すると、物理的な用途のために(例えばaddress要素内での改行)ライン要素を使うことは間違いなのだろうか。だんだんよくわからなくなってきた。
ところでl要素における、white-saceプロパティのデフォルト値は何なんだろう。nowrapでも別におかしくないような気もするが。改行された時点で“行”では無くなるし。まあ、“セマンティックな行”なのだから、恐らく途中で自動折り返しが入っても問題無いのだろうけれど。ちなみにドラフトには Whether the line should wrap or not depends on styling properties of the element.
とある。
どうやら説明を読む限りでは display: block
では無いらしい。どちらかというと
l:before{ content: "\a" }
l:after{ content: "\a" }
というかたちに近いのではなかろうか。ちなみにこれをOperaでやると、2行分改行が開いてしまったけれども。