Opera 9.0tp1 の CSS 3 の Attribute selectors の実装

http://hxxk.jp/2005/11/12/1628

記事データ

投稿者

望月真琴

投稿日時

2005-11-12T16:28+09:00

タグ
概要

Opera 9.0tp1 では、 URI を属性セレクタのマッチパターンにしている場合に正しくマッチしない可能性があるという実装になっています。

リプライ

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

記事本文

Opera の実装が変だと思う

はてなリング - はてなCSSリング経由で trashcan+green (beta) - OperaとfirefoxのCSSでのhref属性値の扱いが違う。 これって後々気を付けなければならなくなりそうなのでメモ。 リンク先では href 属性値が http:// で始まるアンカーを外部リンクとしていますが、サイトによっては必ずしもそうではないことは覚えておいた方が良いかも。 ( hxxk.jp の場合は Copy URL+ を使ってアンカーを記述するので、自サイト内へのリンクでも http:// から始まります。 )

リンク先の記事を見て思った感想が、 operaは相対パスを絶対パスに変換してからhref属性値を扱い、firefoxは相対パスのままhref属性値を扱っているようだった というのは Opera の実装が変じゃない ? ということ。 quaa さん ( trashcan+green (beta) ) が 印刷用なんかにhref属性値を表示させたいときはoperaのように絶対パスが出る方がいい と仰る通り、絶対パスが出た方が便利な場面は確かにあります。

しかし、 CSS 3 Candidate Recommendation - Selectors を見ると、 E[foo^="bar"] というセレクタは an E element whose "foo" attribute value begins exactly with the string "bar" というように、 bar で始まる属性値にマッチするというセレクタですから、仮に絶対パスに変換するのなら href 属性値を扱った後に行うべきだと思います。 Opera 9.0tp1 の現状では、 http:// で始まっていない href 属性値も ( 絶対パスへの変換によって ) http:// で始まる属性値としてみなされてしまっているのですから。

逆の例を考えてみましょう。 quaa さんが trashcan+green (beta) における内部リンク ( この場合、 href 属性値が /quaa/ で始まるアンカーを指します ) にのみ特定のスタイルを反映させたいという場合も、 Opera 9.0tp1 では http://d.hatena.ne.jp/quaa/ という属性値として扱われ、内部リンクを指すはずのセレクタ ( 例 : a[href^="/quaa/"]::after{ content : "[in]"; } ) にマッチしないことになります。

Opera 9.0tp2 ではこの実装が改善されています。

ついでに content プロパティ関連の各ブラウザの実装の簡易まとめ

  IE Firefox 1.0.7 Opera 9.0tp1
content プロパティによる文字列をコピーできるかどうか そもそも未対応なので文字列自体が表示されない コピーできない コピーできる
content プロパティによる URI 文字列の表示 ( 相対パスの場合 ) そのまま表示 絶対パスに変換して表示
content プロパティによる URI 文字列の表示 ( 絶対パスの場合 ) そのまま表示

Opera は content プロパティによる文字列をコピーできるが Firefox はコピーできないので content プロパティによる文字列の扱いは Opera の方が好みなんですが、勝手に相対パスを絶対パスとして扱われるのは困ります……。 単純に content プロパティにて出力される際に変換されるならともかく、属性セレクタのマッチを調べる時点で変換というのは、 CSS を書く方にとっては煩わしいことうけあい。

トラックバック送信先

trashcan+green (beta) - OperaとfirefoxのCSSでのhref属性値の扱いが違う

パターンマッチを行う前に絶対パスに変換するのは、正しくない実装だと思います。

リプライ

2 件のリプライが送られています。

2005-11-13T13:39+09:00 - quaa

やっぱり「厳密に」、だからoperaが駄目ですね。operaばっかり使っていたので最近まで特に問題だと思っていなかったんですが、operaは確か前(少なくとも僕が使い始めたver7の頃)からcontentでhref属性値を表示させるスタイル指定をすると絶対パスに変換したのを出してたんですよね。これはoperaに改善してもらわないと。

2005-11-14T21:23+09:00 - 真琴

私は逆に Firefox を常用していたので、 Opera がこういった実装だったのは知りませんでした。 content プロパティの文字列をコピーできるのは便利で嬉しいんですけどねえ。

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

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