IE6のfirst-letterの謎バグ

IE6のfirst-letterに関する不可解なCSSバグを発見してしまった…。
ちょっと特殊な複合バグだけど、軽くぐぐっても出てこなかったので、一応ポストしておきます。

first-letterを指定したテキストがhidden状態になるバグ。

以下の条件の時に発生。

  • ブロック要素内のテキストがインライン要素で囲まれている
  • ブロック要素のIDに対してwidthを指定している
  • ブロック要素のIDに対してfirst-letterを指定している
    (この場合、タグをセレクターに含めない。#idという指定)
  • xml宣言をしている

以下サンプル

HTML
  1. <h1 id="siteId" title="BlurBlue-Note"><strong>BlurBlue-Note</strong></h1>

この場合、ブロック要素はH1以外のPなどでも同じくバグる。

CSS
  1. #siteId {
  2. width: 100%;
  3. font-size: 300%;
  4. background: #ccc;
  5. }
  6.  
  7. #siteId:first-letter {
  8. color: #336699;
  9. }

結果こんな感じになる。

IEバグ実証
前面がバグが起こっている様子。背面は下記のいずれか実行した場合。

上記条件が崩れれば問題は起こらない。

  • インライン要素(この場合strong)を抜く
  • セレクタを「h1#siteId」のようにする
  • 該当ブロック要素にwidthを指定しない
  • first-letterを指定しない
  • xml宣言をしない

いずれかを実行すれば良い。
とは言え、どれもこれも理由があってやっていることなので、どれをやめるとか迫られても困るわけで…。

追記

これはひどい…ひどすぎる。

IE、Firefox、Operaの複合バグに遭遇しました。

上記ソースのようにH1に対してfirst-letterを充てていたのですが、やっぱりH1にリンクを付けたくなったわけです。
さぁ、ここで罠。そう。上記バグ対象の一つ、ブロック要素内にインライン要素を入れるとIEでhidden化される!

なんてこった!これではリンクを付けられないではないか。
否、解除方法がありましたね。
タグのセレクタ(タイプセレクタ)を付ける。つまりh1#siteIdというセレクタにすれば良いわけです。

が!まだここでしつこくIEのバグが発生。インラインのほうのフォントサイズを継承して、小さくなりました…。

まぁ、これは無理矢理!importantを用いて解除可能です。が、ここでさらに問題発生。Firefoxでは擬似クラスがかぶるとfirst-letterのほうのスタイルが解除されるという謎のバグ。
調べたらやっぱりお困りの方がおられました。

というわけで、h1#siteId a:hover:after { content: "";}(contentの中身は空でもOK)なんて書き方をしてみました。
見事Firefoxのバグは解消。ちゃんとクリックできて、スタイルも維持されます。

さぁここでOperaチェック… アッー!

なんとIEと同様のhidden状態に…。contentプロパティが挿入されたせいで発生するようです。
と、まぁここまで必死にやってきましたけど、さすがにこれだけ連鎖的にバグが発生するともう回避できないんじゃないかと思い始めました。

ていうか、もうsiteIdのリンクは諦めます! orz くやしいなー…。

どなたか回避方法教えてください。。。help me! X-(

  • コメント(0)
  • トラックバック(0)
  • はてなブックマーク数 はてなブックマークコメント

Track back

このエントリーのトラックバックURL

Your Comment





Tag Cloud

About

drop

Author:飴(drop)

web技術に関するtipsや主にweb関連のニュースなどをメモ的に記していきます。
08年1月にWeb制作会社を退職して、現在無職。色々考え中。

このサイトについて

RSS購読