前回のパンくずをclassで装飾する件だけど、 rel="next"
みたいに、rel属性を使えばいいんじゃねーの?
というか使うべきじゃねーの。
<nav> <ul><li><a rel="start">Top</a> <ul><li><a rel="chapter">Web</a> <ul><li><a rel="section">Diary</a> <ul> <li><a rel="prev">Prev.</a></li> <li><a rel="next">Next</a></li> </ul> </li></ul></li></ul></li></ul> </nav>
とまぁ、こんな感じ(hrefとtitleは省略)なんだけどどうだろうか。
でまぁ、CSSの方はこんな感じで、地味に装飾した。
/* ナビゲーション */ nav ul { display:inline-block; margin:0 10px; padding:0px; line-height:2em; } nav li { display:inline-block; margin:0px; padding:0px; } nav a {text-decoration:none;} a[rel="chapter"]:before, a[rel="section"]:before {color:gray;content:"> ";} a[rel="prev"]:before {content:"←";} a[rel="prev"]:after {color:gray;content:" |";} a[rel="next"]:before {content:"→";}
結果はこんな感じ。
どうもtext-decorationは、beforeやafter疑似要素の中まで共通しているらしく、下線を丸っとはずすしかなかった。
仕様だとしたら、どうしてそうなったかよく分からん。
ん、もうrelで階層の意味を指定してるんだから、ul使った階層表現は過剰だな…
と思って、同じ階層に並べた。CSSはそのまま。
<a rel="start">Top</a> <a rel="chapter">Web</a> <a rel="section">Diary</a> <a rel="prev">Prev.</a> <a rel="next">Next</a>
ら…、指定したbefore疑似要素が後の要素にまで影響したり、適用されなかったり…うーん、意味不明。Safariで顕著でChromeでも起きたりする…WebKitのバグなのか?なんなのか。
ともかく、属性セレクタと:before、:after疑似要素は相性よくない。
tableタグは表を書くためのタグなんで、それをレイアウトのためだけに使うのは良くないけど、tableレイアウト自体はいいもんだと思うんだよね。
よーするにグリッドレイアウトな訳じゃないですか、大きな意味で。
ふと思い出したけど、Javaのレイアウトシステムは使いにくかったなー、ほんとプログラマが考えたレイアウトシステム、って感じだったよ。
エートなんだったっけ。そうそう、tableレイアウトでした。
CSSにはdisplay:tableって表示設定が用意してあって、他にもtable系の表示方法が指定できるようになっている。
display:tableと<table>、display:tabel-rowと<tr>、display:table-cellと<td>が対応している感じ。
で、テーブル用のタグじゃなくても、上記の対応のような指定をしてやれば、表示上はtable的にレンダリングしてくれる。
…素晴らしくね?
ナビゲーションとかリスト系タグで作ること多いと思いますが、ちょっとタグの無駄が多いような気もするんですわー。
ナビゲーションという性質上、既に<a>で括っているんだから、それをさらに<li>で括るのって、無駄っぽくねーすか。
で、display:table-cellって指定したヤツの外にdisplay:table-rowやdisplay:tableがないと、暗黙の<table>と<tr>を作る仕様だっていうじゃないですか。
<td>相当の要素さえ並べておけば、その外はなくても成立するって、タグが省略できてとてもステキ。
ちなみに、その逆でdisplay:tableやdisplay:table-rowの中には暗黙の<td>が作られるそうな。
:beforeや:afterはうまくいかなかったけど、疑似じゃないセレクタだとちゃんと動くっぽいので、その辺で装飾してやると良いと思う。
てなわけで、今回のページのパンくずナビゲーションは<nav>の中に<a>を入れといて、あたかもそれがテーブルのごときレンダリングで表示されるパターンで。
CSSは以下のごとくです。
nav a { display:table-cell; width:5em; line-height:2em; border:1px silver solid; text-align:center; } a[rel="start"], a[rel="prev"] { border-radius:1em 0 0 1em; } a[rel="prev"] { border-collapse:separate; border-spacing:1em; color:#66f; background-color:#f6f6f6; } a[rel="section"], a[rel="next"] { border-radius:0 1em 1em 0; }
あ、そういやtableはセルの間とかdisplay:blockとは別の指定方法だったなぁ、…そーいやtableをCSSで装飾とかあんまやった事なかった。
次回、もーちょっとそのへん突っ込んでみたい。
今日はここまで。