制作者の活動(PR)。

堀北真希ちゃんにうさぎの耳を付けたら可愛いだろうなと思って作った制作者の創作キャラクタ
主な作品

堀北真希うさぎ(うさ耳女子大生):昔のボシュロム『オプティマ』TVコマーシャルを真似てソフトコンタクトをつけている場面と仮想CM動画

CSSのインターネットエクスプローラでの問題。(平成18年 3月10日 更新)

インターネットエクスプローラは現在八割以上のシェアを占めていますが、その一方でCSSの実装に大きな問題点が多数見受けられます。

ここではインターネットエクスプローラでの問題点のうち、制作者が知る限りのものを解説します。

CSSのインターネットエクスプローラでの問題。(平成18年 3月10日 更新)・目次。

インターネットエクスプローラ 4.x以降共通の問題点。(平成17年 8月21日 更新)

以下、一部はインターネットエクスプローラ 7.0で改善されるものもあります。

インターネットエクスプローラ 4.xの問題点。

CSSを利用してサイトをデザインする場合、多くはインターネットエクスプローラ 4.x以降を基準にする事が多いのですが、4.xには実装上の不備があります。

displayプロパティで、block値を認識しません。
インライン要素にボーダ・パディング・マージンを付ける事が出来ません。

致命的な欠陥とは言えませんが、細かなサイト作りには支障が出るでしょう。

インターネットエクスプローラ 5.0x(ウィンドウズ版)の問題点。

ウィンドウズ版のインターネットエクスプローラ 5.0xにも不備があります。

インライン要素にボーダ・パディング・マージンを付ける事が出来ません。

4.xと違って、インライン要素でもdisplayプロパティでブロックレヴェル式の表示に切替える事が出来るようになり、その場合は反映されるようです。

逆にブロックレヴェル要素をdisplayプロパティでインライン式の表示にしてしまうとボーダ・パディング・マージンが付かなくなってしまいます。

インターネットエクスプローラ 6.x(ウィンドウズ版)の問題点。

現在特に最もシェアの高いウィンドウズ版インターネットエクスプローラ 6.xにも重大な不備があります。

widthプロパティで横幅が指定されていないブロックレヴェル要素内にfloatプロパティでフロートした要素を含むと、内容となるテキストが消えてしまう。

意外に厄介な問題です。

例えば左右にmarginプロパティでマージンを取ってセンタリングする場合、widthプロパティで横幅を指定出来ません。

この状況である要素をfloatプロパティでフロートさせると同居しているテキストが消えて読めなくなってしまうのです。

ウィンドウズ版一般の問題点。

ウィンドウズ版のインターネットエクスプローラはCSSの解釈がかなりバギーになっております。

具体的には子孫セレクタへのプロパティの継承が正しく行われない場合があるなどの問題があります。

標準モードと互換モード。

マッキントッシュ版のインターネットエクスプローラ 5.xとウィンドウズ版の6.xには、標準モード互換モードの二つの処理モードがあります。

インターネットエクスプローラ 4.xで実装されたCSSは、実は標準規格から見ると大きく懸け離れたものです。そこで、標準規格に合致した扱いをする標準モードと、従来のインターネットエクスプローラの実装に従う互換モードが用意された訳です。

標準モードと互換モードの切替えは、文書型宣言の書式に従います。原則的には文書型宣言を書いた文書は標準モードに、文書型宣言を書かなかった文書は互換モードになります。

ところで、XHTMLの場合、一行目に<?xml>宣言を入れなければなりません。ところが、ウィンドウズ版のインターネットエクスプローラ 6.xでは文書型宣言が文書の先頭に無いと、標準モードにならないのです(マッキントッシュ版の5.xでは問題無し)。

このため、ウィンドウズ版6.xでXHTMLを読込んだ場合、必ず互換モードになってしまいます

互換モードでの標準規格との相違点。

幾つかありますが、代表的なものを挙げておきます。

<html>要素にスタイルを当てる事が出来ない。

標準規格では、<html>要素にもスタイルが適用出来ますが、互換モードでは<html>要素に当てたスタイルは無効になります。

親要素のtext-alignプロパティに値を当てると内容のブロックレヴェル要素までも影響を受けてしまう。

標準規格ではtext-alignプロパティは内容となっているインライン要素に限り有効で、ブロックレヴェル要素には機能しません。

しかし、互換モードでは内容となるブロックレヴェル要素までも影響を受けてしまいます。これを利用してブロックレヴェルのセンタリングを行う事も出来ますが他のブラウザでは逆にセンタリングしません。

ブロックレヴェル要素をセンタリングしたい時に、marginプロパティの左右の値に「auto」値を当ててもセンタリング出来ない。

標準規格ではこの様にしてブロックレヴェル要素をセンタリングする事になっておりますが、この方法が使えないのです。

このため、marginプロパティで左右にマージンを取る事でセンタリングさせたくなるのですが、そうするとウィンドウズ版6.xでの欠陥に嵌まる事になります。

詳しくはボックスの概念とプロパティ応用例1・ブロックレヴェル要素のセンタリングをご覧下さい。

ボックスの幅や高さには、ボーダ及びパディングの幅も含まれる。

標準規格では、ボーダ及びパディングの幅は、ボックスの幅には含みません。

つまり、インターネットエクスプローラの互換モードだとブロックの大きさが一廻り小さく表示される事になります。

精密に大きさを指定したブロックを並べようものなら、インターネットエクスプローラではブロック間に隙間が空く等の弊害が目に付く事でしょう。

インターネットエクスプローラでの問題を回避するには。(平成18年10月29日 更新)

インターネットエクスプローラは、ネットスケープ 4.xよりは標準に近いだけに厄介なものです。

ですが、この対策は実は簡単で、幾つかの方法があります。

CSSの記述で問題を回避する方法は、CSSの小技内の特定のユーザエージェントで適用しないスタイルに纏めておきました。

この他にも、HTML文書側の記述で対応する事も可能です。

マイクロソフト独自の注釈宣言で振り分ける。(平成18年 3月10日)

ウィンドウズ版のインターネットエクスプローラ 5.0以降には、独自の注釈宣言がサポートされております。

この宣言を用いる事で、ウィンドウズ版インターネットエクスプローラのCSSの問題を回避出来ます。

3.1. ウィンドウズ版インターネットエクスプローラでのみ読み込ませたいCSSをリンクするには。(平成18年 2月 2日)

ウィンドウズ版インターネットエクスプローラの特定のヴァージョンでのみ読み込ませたいCSSのスタイル定義ファイルをリンクするには、具体的には、以下のようにします。

前者は指定されたヴァージョン以降のインターネットエクスプローラでのみ有効なコンテンツを記述します。

よく見ると分かると思いますが、インターネットエクスプローラ以外では、以下のように両端を強調すればお分かりになると思いますが、ただの注釈宣言と見なされて無視される事になります。

<!--[if gte IE 対応するIEのヴァージョン ]>
    指定ヴァージョン以降のIEでのみ有効なコンテンツ
    <![endif]-->

後者は指定されたヴァージョンのインターネットエクスプローラでのみ有効なコンテンツを記述します。

これも対応しない環境ではただの注釈宣言です。

例えば、インターネットエクスプローラ 6.0 以降でのみ有効なスタイル定義ファイルをリンクするには、以下のようにします。

<!--[if gte IE 6.0 ]>
    <link rel="stylesheet" type="text/css" href="CSSのURI" />
    <![endif]-->

3.2. ウィンドウズ版インターネットエクスプローラ以外で読み込ませたいCSSをリンクするには。(平成18年 3月10日)

逆にインターネットエクスプローラ以外でのみ読ませたいスタイル定義ファイルのリンクには幾つかの方法がありますが、以下のようにすれば良いでしょう。

<!--[if lte IE 4.000 ]><!-->
    <link rel="stylesheet" type="text/css" href="CSSのURI" />
    <!--<![endif]-->

ここでは、

をそれぞれ入れたのがポイントです。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com