none
IE9のスタイルシートfilterとpositionの併用について

    質問

  • ドキュメントモードがIE9標準の場合、positionが設定されている要素にfilter:Gray()が効きません。

    (1)効かない原因と、(2)考えた対策案でなぜ解決できるのか、
    またはこれからも調査を継続するあたって、ヒントになる情報がいただければ思い、投稿させていただきます。

    以下に再現用の例を載せます。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN">
    <html lang="ja" style="filter:Gray();">
    <body style="position: relative;">
    <div>
     <img src="http://www.metro.tokyo.jp/IMG/top_logo.gif" />
    </div>
    </body>
    </html>


    例はシンプルにしていますが、目的はコンテンツすべてに対して、filter:Gray()を適用したいと考えています。

    現象が発生する具体的な各値は、下記です。
     position:relative, fixed, absolute
     filter:Gray()


    (1)
    なぜ、filter:Gray()が効かないのでしょうか。
    Invert()やXRay()は正常に効いています。


    (2)
    対策案はいくつか(※)あると思いますが、<html>タグのfilterに、「Gray()」の代わりに「progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)」を使用することを検討しています。

    ※)bodyタグにfilter:Gray()を指定するなど。

    「Gray()」と「progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)」は、実行される機能/結果は同じであると考えているのですが、なぜ今回の場合は、問題が解決できたのでしょうか。


    ----
    position, filter, DXImageTransformなどをキーワードにして検索してみましたが、有用な情報は得られていません。
    類似現象と思わしきものは、以下のサイトで見つかりましたが、少々今回とは異なった現象かと考えています。
    http://bbs.blueidea.com/thread-2836842-1-1.html
     ↑は中国語サイトです。しかもその問題は解決していません。。。

    2012年2月7日 8:37

回答

  • 質問に含まれていない点もまとめて指摘します。

    1. <html>タグにはstyle属性は存在しません。DOM的には存在するので、CSSファイルで指定したり、JavaScriptから操作することは可能ですが、HTMLタグには記述できません。動作しなくても不思議ではありません。ちなみにHTML5でstyle属性が追加されたのでIE10では記述してもいいのかもしれません。(IE9でもHTML5に一部対応と言っていましたが、リンク先の属性一覧にはないので。)

    2. filterはIE8から-ms-filterが定義され、IE9から非推奨、IE10で廃止だったと思います。動作しなくても不思議ではありません。

    3. filterはいつだったかのバージョンからDXImage~の書式に移行しています。動作しなくても不思議ではありません。

    4. Visual Filters and Transitions ReferenceにGray()がそもそも記載されていません。これが本命でしょうか。

    2012年2月7日 12:34

すべての返信

  • 質問に含まれていない点もまとめて指摘します。

    1. <html>タグにはstyle属性は存在しません。DOM的には存在するので、CSSファイルで指定したり、JavaScriptから操作することは可能ですが、HTMLタグには記述できません。動作しなくても不思議ではありません。ちなみにHTML5でstyle属性が追加されたのでIE10では記述してもいいのかもしれません。(IE9でもHTML5に一部対応と言っていましたが、リンク先の属性一覧にはないので。)

    2. filterはIE8から-ms-filterが定義され、IE9から非推奨、IE10で廃止だったと思います。動作しなくても不思議ではありません。

    3. filterはいつだったかのバージョンからDXImage~の書式に移行しています。動作しなくても不思議ではありません。

    4. Visual Filters and Transitions ReferenceにGray()がそもそも記載されていません。これが本命でしょうか。

    2012年2月7日 12:34
  • ご回答、ありがとうございます。

    MSDNなどでも確認したつもりでいましたが、確認の仕方が不十分だった気がします。

    大変参考になりました。ありがとうございます。

    2012年2月8日 5:04