そろそろ IE6 のことは忘れて、
IE7からのクロスブラウザを目指せばいいのかなーという気がしています。CSS のプラパティーの中には、今まで IE6 のことを考えて使わなかったものがたくさんあったりします。それらを改めて確認してみると、コーディングの幅が広がるなーという気になったりもします。
これから使う事が増えるかもしれない、CSS のセレクタやプロパティを、もう一度振り返ってみると同時に、IE7 で注意したい事などを簡単にまとめてみました。
IE6 ではサポートされていませんでしたが、IE7 からは使ってもOKなセレクタやプロパティには、どんなものがあるのか確認してみます。後半は IE7 でも使えない、残念なセレクタやプロパティになっています。
目次に ○ がついてるものは、IE7 から使えるもの。x がついてるのは、IE7 でも使えないものです。
いきなりきました …。あまり使った事がない人も、たくさんいそうなセレクタですねー。チャイルドセレクタは、子要素だけにスタイルを指定できるセレクタです。
「ん?それのどこが便利なの?普通に書いてもいいんじゃない?」って聞こえそうですが、子要素だけってところがポイントです。
例えば id="sample"
の中、子要素の <p>
タグだけ(孫要素は除く)フォントカラーをピンクにしたいときにはどうしますか?
これは div の子要素の <p> タグです。チャイルドセレクタを使ってスタイルを指定しています。
孫要素の <p> タグには、スタイルは反映されません。
<div id="sample"> <p>このパラグラフは子要素です!</p> <div> <p>このパラグラフは孫要素です!</p> </div> </div>
こんな HTML があって、子要素の <p> だけ、スタイルを指定したいときに、チャイルドセレクタを使います。
/* これだと孫までスタイルが適応される */ #sample p { color: pink; } /* チャイルドセレクタを使えば簡単! */ #sample > p { color: pink; }
チャイルドセレクタを使えば、子要素だけ(孫要素を除く) にスタイルを指定できるので、余分なクラスを付けなくて済みますね!HTML も CSS もスッキリです。
これも IE6 は未対応でしたね。どんな事ができるかって言うと …
など、属性を指定して、スタイルを指定することができます。
a[name] { /* Style */ } a[target="_blank"] { /* Style */ } input[type="text"] { /* Style */ } img[alt~="Hello"]{ /* Style */ }
これらは結構おなじみですね。
隣接セレクタとは、親要素が同じで、隣同士になった時だけスタイルを指定する事ができるセレクタ。どんな時に使えるかっていうと … 例えば見出し。
普段はパラグラフなどとの間に、十分な余白をとったりして読みやすくしてある見出しも、連続して使った時には、余白が大きすぎる場合がありますよね。そんな時には隣接セレクタが使えます!
間に段落 <p> が入ります。
h4 と h5 が隣り合ったときにだけ、スタイルを反映させることができます!今回は、h5 見出しの margin-top
の値を変更して、余白を少なくしています。
<h4>これはh4タグです</h4> <h5>すぐ隣にh5タグです</h5>
h4 + h5{ margin-top:-20px; }
こうすると、<h4> タグと <h5> タグが並んだ時だけ、<h4> タグのマージンを減らすことができます。もちろん見出し以外にもいろいろ使えるので、有効活用してくださいね。
隣接セレクタと似てるんですけど、間接セレクタは、親要素が同じなら隣通しでなくても(間に別の要素が入っていても)スタイルを適用できます。ちょっと説明しにくいので、サンプルを見てくださいね。
<h4> タグには margin-top: 0
を指定しています。
間接セレクタによって、マージントップが 40px に変更されています。2番目以降の弟分には、全て間接セレクタが適応されます。間接セレクタは、親要素が同じであること(兄弟であること)が条件です!
h4 { margin-top: 0; } h4 ~ h4 { margin-top: 40px; }
一番始めにでてくる <h4> タグには、通常のスタイルが適応されますが、それ以降にでてくる弟分の <h4> タグには、間接でレクタで指定したスタイルが適応されます。上の例で言えば、2番目以降に出てくる <h4> タグには、全て margin-top: 40px
が適応されるという訳です。
隣り合ってなくてもOKですし、隣り合ってても適応されます。親要素が同じである事が条件です!
IE6 では、<a>タグ以外の要素に、:hover 疑似クラスを指定できませんでした。csshover などの、Javascriptライブラリ使って IE6 にも対応させたりしてました。
IE7 以降なら、<li>
タグでも、<img>
タグでも、<div>
タグでも、:hover 疑似クラスが使えるので表現が広がりますね!
ちなみに <a> タグの疑似クラスの書き順には、決まりがあるので注意が必要です。
a:link
(未訪問リンク)a:visited
(訪問済み)a:hover
(マウスオーバー)a:active
(クリック時)順番間違えるとうまく動かないので、これは暗記しちゃいましょう!
IE7 以降では、次のようなスタイルの書き方ができるようになってます。
a:hover span{ /* Style */ }
微妙に便利です!IE6 ではできなかったんですねー。
なかなか便利な疑似クラス。:first-child 疑似クラスを使えば、不要なクラスを付けなくて済んだりするので XHTML がクリーンになったりします。
基本的には、一番最初の子要素だけにスタイルを指定できます。
リストには border-top
を指定していますが、1番目のリストにだけボーダーがありません。
li { border-top:1px solid #111; } ul li:first-child { border-top: none; }
こんな感じで、一番最初の子要素だけにスタイルを指定できます。<li>
タグの子要素 … という意味じゃなくて、<ul>
タグの一番最初の子要素という意味なので混乱しないように注意です!
上の例では <li> タグに限定して指定していますが、要素を問わずに一番最初の子要素だけ … というようにも指定できます。
ちなみに :last-child
疑似クラスというのもあるんですけど、IE7 と IE8 ではサポートされていません … 何なのよ …。
div.example > :first-child { /* Style */ }
こうすると、div.example
の最初の子要素にスタイルが指定できます。<p>タグでも、<img>タグでも、<a>タグでも要素は問いません。私はあんまり使ってないかも…。
要素の最小、最大の幅や高さを指定できるこれらのプロパティも、IE7 からは使えるようになりました!これはけっこう助かりますね!
ここからは、IE7 でも使えないシリーズです。残念ながら IE7 でも未対応なのが :before
、
どんな事ができるかっていうと、指定した要素の直前や、直後のスタイルを指定できます。でもそれだけじゃなくって、コンテンツも挿入できる優れものなんです!簡単な例で説明すると…
この文章の左にある、ダブルクォーテーションのアイコンは、:bofore 疑似クラスを利用して表示しています。
<blockquote>これは引用です!</blockquote>
blockquote:before { display: block; float: left; font-size: 100px; content: open-quote; color: #ccc; text-shadow: 0 1px #fff; margin-top: -50px; margin-right: 10px; }
こうすると、余分なマークアップをしなくても、引用にクォートマークをつけることができました!注意事項としては、元の要素がインライン要素だった場合、:before、:after疑似クラスでブロックレベル要素を指定できないという事。便利なのに … 残念です。
これも IE7 ではダメだったんですねー。要素をフォーカスした時に、スタイルを指定する疑似クラスです。よく使われるのがフォームをフォーカスした時に、スタイルを変えるとかですね。
テキストボックスをクリック(フォーカス)すると、背景が白くなります。
input[type="text"]:focus { background: #fff; }
主に行の折り返しをコントロールする white-space
プロパティ。単語の途中で折り返したくないんだよねー … という時に重宝しますが、残念ながらIE7では使えないんです。
Web Design Art PHP 日本語の場合 Javascript 日本語の場合 XHTML CSS Photo 日本語の場合 日本語の場合 MySQL 日本語の場合 WordPress 日本語の場合 日本語の場合 JQuery 日本語の場合 Photoshop
Web Design Art PHP 日本語の場合 Javascript 日本語の場合 XHTML CSS Photo 日本語の場合 日本語の場合 MySQL 日本語の場合 WordPress 日本語の場合 日本語の場合 JQuery 日本語の場合 Photoshop
span { white-space: nowrap; }
コーディングしていて、時々遭遇する IE7 の変な挙動をまとめてみました。
どうしてか分からないけれど、時々 <li> タグを縦に並べた時に、IE7 だけ隙間ができちゃうことがあります。下の写真は margin: 0
の<li>タグに border-top
、border-bottom
を 1px ずつ指定しているんですけど…なぜか隙間がでてる状態。
こんな時は vertical-align: bottom
を指定すると隙間が消えます!大体はリセット CSS などで、vertical-align: baseline
にしてますもんねー …。落とし穴でした。
li { border-top: 1px solid #111; border-bottom: 1px solid #333; vertical-align: bottom; }
フッターの下に Javascript のコードを詰め込んだりした時に、ときどきなるんですけど、IE7 だけフッターの下に隙間ができちゃう事があります…。何なのよー!
html,body { height:100%; }
height: 100%
… こうすると隙間が無くなります。
下の画像のように、シャドウがついたりしたアルファチャンネルの 透過PNG。例えばマウスオーバー時に、opacity
で透明度を変更したとします。
img.opacity:hover { opacity: 0.75; filter: alpha(opacity=75); }
でも残念な事に IE7、IE8 では、黒くなってしまうんですよね … X(
背景色が決まっているなら、塗りつぶした画像を使った方が良さそうです。
最後に … IE7 の z-index
には要注意というお話です。どーも IE7 だけ z-index の解釈が違います。単純な親、子孫要素間では問題ないのですが、DOM が複雑化してくると他のブラウザと差異が出てくるので要注意です。
これは IE7 には z-index: auto
を指定しても、z-index: 1
と同じになってしまう … というバグに起因するもの。詳しいことは、別の記事で書いたので、参考にしてみてください。
他にも IE7 で注意した方がいい事があったら、教えて頂けると嬉しいです!