カテゴリー:CSSハック

表示タイプ
リスト表示へ
ボックス表示中

CSSの1行でできるIE6対策(ハック)

2008年3月 5日 17:33

Internet Qualityさんの所の紹介エントリーにあったサイトで、IE6だけにうまくCSSを適用しているサイトがあったので、自分のメモとしてもエントリー。

Example: margin: 20px !important; margin: 10px;

サンプルを見ると、ごく簡単な処理になってます。
通常、importantを指定したスタイルが適用されますが、どうやらIE6の場合、同じセレクタ内の場合はimportantで書かれていても、そのあとに書かれた同じスタイルが適用されてしまうようです。

なので、IE6だけに適用したいものなんかは、ハックを使わずにこんな感じで適用するとスマートかも。ただし、imporantを使ってるので、他のところで上書きしようとしてもできないので、通常のハック同様、乱用は禁物ですが・・・。

IE7を対象としたハック

2007年5月22日 14:13

今回はCSSハックのお話。
というのも、IEだけがどうしても言うことを聞いてくれず、
なんとかハックを使わずに処置したいなーと思って試行錯誤してたんだけど
どうやらそれもつらくなってきたのでしかたなくハックを使ってみた。
IE(7も含む)をはじきたいなーと思って調べてみたらわりとあっさり見つかりました。

ただ、実際自分で書いて置かないと忘れてしまうのでメモ兼エントリー。

ちなみにLucky bag::blogさんの記事を参考にしました。

今回参考にしたのは下の5つ。
1) IE6以下にのみ適用
* html body
2) IE7のみ適用
*+html body
3) IE7を含む全てのIEにのみ適用
*+html body, * html body
4) IE7を含むモダンブラウザにのみ適用(IE6以下を除外)
html>body
5) IE7を除くモダンブラウザにのみ適用
html>/**/body

IE7を含めるのかそうじゃないのか、でわりと振り分けの必要が出てくると思いますが、
とりあえずこれだけ覚えておけばIE対策としてはなんとかなるかもしれません。

Safari用 CSSハック

2007年1月11日 11:26

ということで、なんか案件でSafariだけ挙動がおかしい部分があり、
急ぎだったのでSafariだけに適用できるハックがないか探していたら見つけました。
内容はこんな感じ。

  1. /* safari only \*/
  2. html:\66irst-child div {
  3. margin: 0 0 0 18px;
  4. }

/* xxxx \*/でコメントアウトし、さらに「html:\66irst-child」を適用させたいCSSの前に追加することでSarariだけにCSSを読み込ませることができるみたいです。
\66が「f」に該当するんだろうか。
文字参照(だっけ?)でもCSSがちゃんと動くってことかな?

どんなブラウザでもクリアするワザ【最終版?】

2006年11月21日 11:53

クリアするウラワザで書いた、ひとつのボックスで完結するfloatクリアワザの、IE7対応版です。
内容としては、前回とほぼ同じ。
ただ、IE用に、IE独自拡張CSSの「zoom」プロパティを使うところ。

  1. div {
  2. zoom: 1;/*for IE 5.5-7*/
  3. }
  4. div:after {/*for modern browser*/
  5. content: ".";
  6. clear: both;
  7. display: block;
  8. height: 0;
  9. visibility: hidden;
  10. }

とすることでIE7でも大丈夫なようです。
細かい内容については、前回の記事を参照くださいw

ちなみにこちらのサイトが元ネタです。
STOP'N LISTEN

クリアするウラワザ

2006年11月 7日 17:27

float、結構思惑通りに動かなくて苦労しますよね。
CSS触り立てで陥るのが、floatによって親ボックスが正常にしたまで伸びない、ということ。
(まぁ、動作的にはそれで正しいですが、直感的に言うとやや違和感ありますよね)
しかし、最初は「なにごと?!」と思ってしまいます。

自分のイメージで簡単に説明します。
まず、輪ゴムを想像してください。(え? とか思わないでw)
さらに、タバコとかなんでもいいので箱(ボックス)を想像してください。
さて、その輪ゴムをその想像した箱にくくり付けてください。
輪ゴムは、箱の形になって伸びますよね?
これが、いわゆる通常時の親ボックスの形です。

さて、今度はその箱から輪ゴムをとってください。
すると輪ゴムは元の形にもどって小さくなりますよね?
これが、float(浮いた)したボックス(タバコの箱)と親ボックス(輪ゴム)の関係です。
つまり、子ボックスが浮いてしまったために、親ボックスの中には何もない状態となってしまった、というわけです。

だから、いきなりボーダーが変になったーと思っても、それが正常の動作(輪ゴムが元に戻るのと同じ)なのです。

さて、ではどう対処したらいいか?

floatしたボックスのあとに、floatをclearするボックスを挿入しても解決されますが、ただそれだとHTML的に汚くなってしまうので、CSSだけで解決しましょう。

floatを囲っている親ボックスに対して以下のプロパティを追加してください。
  1. #box:after { /* for modern brouser */
  2. content: ".";
  3. clear: both;
  4. display: block;
  5. height: 0;
  6. visibility: hidden;
  7. }
  8. * html #box { /* for IE */
  9. /*\*/height:1%;/* for WinIE*/
  10. display: inline-table;/* for MacIE*/
  11. }
さて、簡単に上記を説明すると、まず:after疑似クラスを認識するブラウザに色々と読み込ませます。content: "."; でボックスの最後にドットを表示させ、かつそれをblock要素に変換します。(display:block;)

さらに、それを画面上に表示してしまうと都合が悪いので、色々保険をかけて非表示にします。
(height:0;、visibility: hidden;)

最後に、そのblock要素に対してclearを指定すれば完成です。
こうすることで、floatして正常に見えなくなったボックスの最後にclearを追加し、ボックスを正常に表示させる、というものです。

ただ、いくつか問題があるので、そのあとに続くハックでそれを回避しています。
まず、:after疑似クラスがIEでは認識されないので、IEに対してのハックを行います。
まず、Win、Mac双方のIEにのみ読み込ませるように「* html #box」と指定して他のモダンブラウザを排除します。
その上で、WinIEにのみ「height: 1%;」を、MacIEに「display: inline-table;」をそれぞれ追加します。
これで完成です。

スターハック

2006年7月10日 10:50

IE4〜6、MacIE4〜5にCSSを適用するハックです。
色々組み合わせることで個別にスタイルを分けることも可能です。

スター7・ハック

2006年7月 7日 16:33

NescapgeやIEにだけCSSを読み込ませたい場合に使えます。
ただし、これはバグを利用した技です。
また、今後のIEではこれを読み込まなくなる可能性もあります。

ホーリー・ハック

2006年7月 7日 16:31

Mac IEを"はじく"CSSハックです。
このハック内のCSSプロパティは、Mac IEには読み込まれません。
簡単に言うと、コメントのバグを利用したハックです。