CSS 3 セレクタ最終草案リリース
CSS 3 セレクタ最終草案がほぼ予定の1ヶ月遅れでリリースされたようです。勧告まであと一息ですね。セレクタが充実してくると、class や id をタグ内に埋め込む割合が激減するので、何とか頑張って IE 7 にも実装してもらいたいところです。
ちょっと実例を出してみましょう。ソースをご覧いただければ一目瞭然ですが、以下のリンクには img タグはもちろんのこと、class や id も一切使わずにリンク先がサイト内外のいずれであるかや、リンク先のファイルタイプを CSS だけで判別して、適切なアイコンを付けています。(残念ながら IE や Opera では未対応。)
- サイト内へのリンク
- サイト外へのリンク
- メールアドレスへのリンク(ダミー)
- PDF ファイルへのリンク(ダミー)
- MS Word ファイルへのリンク(ダミー)
- MS Excel ファイルへのリンク(ダミー)
- テキストファイルへのリンク(ダミー)
スクリーンショット (Windows XP SP2 + Firefox 1.5)
(X)HTML ソース
一応、(X)HTML ソースを掲げておくと、img 要素はもちろんのこと、ソースに class や id といった余計な属性が一切なく、とてもすっきりしているのが分かっていただけるかと思います。
<li><a href="http://www.google.com">サイト外へのリンク</a></li>
<li><a href="mailto:foo@bar.baz">メールアドレスへのリンク(ダミー)</a></li>
<li><a href="dummy.pdf">PDF ファイルへのリンク(ダミー)</a></li>
<li><a href="dummy.doc">MS Word ファイルへのリンク(ダミー)</a></li>
<li><a href="dummy.xls">MS Excel ファイルへのリンク(ダミー)</a></li>
<li><a href="dummy.txt">テキストファイルへのリンク(ダミー)</a></li>
CSS ソース
では、どうやってあの簡素な HTML からサイト内外の区別やファイルタイプの識別をしているのか?その答えが次ぎに掲げるソースにあります。
---------------------------------------- */
/* メインコンテンツのみに適用させるため、div.entry の孫要素のみを対象にしてあります。(でないと、カレンダーにまでアイコンがついちゃうので..。(^o^;;ゞ) */
div.entry a[href^="http://my-chunqiu.cocolog-nifty.com/"]:after {
margin: 0 0.5em;
div.entry a:not([href^="http://my-chunqiu.cocolog-nifty.com/"]):after {
margin: 0 0.5em;
div.entry a[href^="mailto"]:after {
margin: 0 0.5em;
div.entry a[href$=".pdf"]:after {
margin: 0 0.5em;
div.entry a[href$=".doc"]:after {
margin: 0 0.5em;
div.entry a[href$=".xls"]:after {
margin: 0 0.5em;
div.entry a[href$=".txt"]:after {
margin: 0 0.5em;
CSS をそこそこいじった経験のある方なら、何となく察しがつくと思いますが、強調表示されている部分が CSS Level 3 のセレクタ(のごく一部)です。これだけでスタイルの及ぶ全ての要素に対して、適正にアイコンが付与されてしまうわけです。(今、Firefox でこのページをご覧になってる方なら、このページの中央ペインのすべてのリンクにアイコンがついてるのがお分かりいただけるかと思います。)
ここで使っているセレクタは次の通り。
| Pattern | Meaning | Section | CSS level |
|---|---|---|---|
| E[ |
an E element whose " |
Attribute selectors | 3 |
| E[ |
an E element whose " |
Attribute selectors | 3 |
| E: |
an E element that does not match simple selector s | Negation
pseudo- |
3 |
これ以外にも便利なセレクタがたくさんあります。先日、見切り発車で紹介した :target 擬似クラスもその一つです。CSS 3 セレクタについては Lucky bag::blog でも簡単な紹介がすでに出ているようなので、日本語での説明が欲しい方は、そちらを参照されるといいでしょう。もちろん、この Blog でも引き続き便利な CSS Tips を紹介していくつもりです。
| 固定リンク
「日記・管理情報」カテゴリの記事
- みくだりはん?(2006.11.28)
- CSS 3 セレクタ最終草案リリース(2005.12.23)
- ココログ試用感(2005.12.23)
- コンテンツ カテゴリー再構築(2005.12.04)
- カテゴリー立てミス(2005.08.01)
「[Web]XHTML」カテゴリの記事
- HTML の見出しをめぐる議論(2007.07.11)
- Re: XHTML+CSS (r)evolution, 3rdの内容は信ずるに値するか?(2007.06.03)
- 論理構造を文脈に読み換えながら class 名を考える(2007.05.30)
- 定義リストの違和感(続)(2007.05.28)
- 定義リストの違和感(2007.05.26)
この記事へのコメントは終了しました。


コメント
CSS 3 拡張属性セレクタと否定擬似属性セレクタの Safari での動作を確認しました。
http://browsershots.org/website/633718/
それにしてもこのサイト、すげ~。(笑)
投稿: ゆう | 2005-12-24 15:37
うっかりしてましたが、以下のソースを div.entry a:not([href^="http://my-chunqiu.cocolog-nifty.com/"]):after... よりも後に追加する必要があります。(「 CSS は後に書かれているものほど優先順位が高い」というルールを利用します。)
div.entry a[name]:after, div.entry a[id]:after {
content: "";
}
なぜかというと、このままでは <a name="foo"> や <a id="bar"> にもアイコンがついちゃうからです。(^_^;;)
投稿: ゆう | 2005-12-23 22:07