1. ホーム
  2. Web プログラミング
  3. CSS/HTML

CSSハックの使用例について解説

2022-01-17 20:32:27

私はこれまでCSSハックに対して非常に狭量な偏見を持っていて、標準的なコードを書くのにこうした"邪道"を使うべきとは思っていませんでしたが、最近ある製品のリリースで小さな問題が発生し、長い間頭を抱えていましたが、ようやく情報を調べたらCSSハックで簡単に解決することが出来ました。こういうツールは使いましょう。

CSSハックとは何ですか?

ブラウザが異なると、あるいは同じブラウザでもバージョンが異なると、CSSの解析の認識が異なり、ページの結果に一貫性がなくなるため、異なるブラウザ用にCSSコードを記述することをCSSハッキングと呼びます。

CSSをハックする方法には、一般的に3つの方法があります。CSS内部ハック、セレクタハック、HTMLヘッダ参照の3つですが、最もよく使われるのは最初の方法です。

CSS内部ハック

正しいCSSは次のように記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <style type="text/css" >
            .test
            {
                background-color:green;
            }
        </style>
    </head>
    <body>
        <div class="test" style="height:100px; width:100px; line-height:100px; margin:50px; border:1px solid #000;">< /div>
    </body>
<html>

このコードは、現在使用されているすべてのブラウザで問題なく動作し、次のように表示されます。

しかし、CSS3で書かれたこのようなものはよく見かけます。

/*Mozilla kernel browser: firefox3.5+*/
  -moz-transform: rotate | scale | skew | translate ;
 /*Webkit kernel browsers: Safari and Chrome*/
  -webkit-transform: rotate | scale | skew | translate ;
 /*Opera*/
  -o-transform: rotate | scale | skew | translate ;
 /*IE9*/
  -ms-transform: rotate | scale | skew | translate ;
 /*W3C standard*/
  transform: rotate | scale | skew | translate ;

一見すると、コメントなしで、このコードは動くと思うでしょう!?このようなコードは動作しません、CSS3の規格はまだ統一されていない、各ブラウザは、表現の独自の方法を持っている、とさえいくつかの実装は、いくつかのない、特定のブラウザのサポートを示すためにいくつかの接頭辞の前に、これもCSS内部ハックの基本原理は、上記のこれらの単純で理解しやすいに、本当のCSSハックは、死んだIE6とその様々な変な兄弟のバージョンではないので、それよりもはるかに多くのです。

CSS内部ハックの構文はselector{<hack>?property:value<hack>? ;}といったもので、上記のコードではプロパティ名の前にハックを示していますが、もちろんこのようなものもあります。

*background-color:green;

属性の前に "*"を付けると、このような書き方は IE6, 7 でのみ有効で、他のバージョンの IE やモダンブラウザはこのディレクティブを無視します(特に説明はありません、この記事のすべてのハックは DOCTYPE の宣言における文書の効果に言及しています)。

-background-color:green;

属性の前に"-"が付いているものはIE6でしか認識されず、後ろにハクが付くことがある

background-color:green!important;

重要" 属性値がIE6だけでは認識されず、他のバージョンのIEやモダンブラウザでも認識され、"+", "\0", "\9" など、面倒なので表を描画してください。

だいぶわかりやすくなったでしょ?IEで上のテストDIVにアクセスしたときに緑色の背景を追加したいだけなら、次のように書けばいい。

background-color:green\9;

[...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...] [...]