Safari はスクリプトで動的に与えた id へのスタイルが効かない?

説明

スクリプトにて動的に、ある要素に対して id 値を与える、もしくは id 値を持つ要素そのものを生成しているとする。そこで設定される id に対して CSS でスタイルを定義してても、なぜかそのスタイルが効かないという現象が Safari は発生しがち。ていうわけでテスト。

このページには以下のような CSS が設定されとります。

#p1, #p2, #p3, #p4, #p5 { background-color: aqua }

例1

HTML 直書きの <p id="p1">

<p id="p1">

HTML 直書きの <p> にスクリプトで id="p2" を設定

<p>

スクリプトで <p id="p3"> そのものを生成

v51 では、既存の要素に id プロパティ値を設定するケースでスタイルが反映しなかった。 v60 ではさらに、 id 付きの要素そのものを生成するケースでもスタイルが反映しなくなった。

例2

ちなみにスタイルが反映しないのはは id プロパティ値しか設定しなかった場合で、別のプロパティ値も同時に与えるとなぜかスタイルが反映するようになる。 v51, v60 共に。たとえば obj.id='fuga'; obj.className='hoge'; みたいにする。

HTML 直書きの <p> にスクリプトで id="p4" と class="hoge" を設定

<p>

スクリプトで <p id="p5" class="hoge"> そのものを生成

なんじゃこりゃ。

補記

Safari の隠し機能の Debug メニューを有効にして、Show DOM Tree で様子を見てみると、スクリプトで動的に付加された id 値が DOM ツリーにちゃんと反映されてるのが分かる。つまり、動的生成の id 値に対するスタイル付けのバグくさい。

このバグ(?)は v73 (beta2) 以降、解消したっぽいです。


Copyright © 1998-2006 ALIMIKA SATOMI/NYAN-NYAN-HANTEN.