The Opera 8 DOCTYPE Switches

Opera では標準に準拠したページを正しく表示できますが、すべてのWeb ページが標準に準拠しているとは限りません。全ての標準に準拠したページと、それ以外のページの両方とも正しく表示できるように、Opera 7.0では 二つの異なる表示モードを追加しました。それが、Standards モード (IE での呼称は標準準拠モード)と Quirks モード (原則としてInternet Explorerと互換性のある互換モード)です。二つのうちどちらのモードが選択されるかは、そのページがどのドキュメントタイプ宣言 (DOCTYPE) を使用しているかに依ります。

Internet Explorer ( Windows 版は ver.6.0 以上、Macintosh 版は ver.5.0 以上)および Mozilla/Netscape (ver.0.6/ver.6.0 以上)にも DOCTYPE スイッチ機能があります。 また、Mozilla/Netscape には 「準標準モード (Almost 標準 Mode)」という標準にほぼ準拠したモードがあります。Opera 7 および 8では Windows IE6 と同じルール設定を用い、Standards モードと Quirks モードが切り替わります。

Opera 7 ならびにそれ以降、IE6 for Windows、Netscape 7 にて標準準拠の振る舞いをする DOCTYPE
ドキュメント・タイプDOCTYPE宣言の例URLありURLなし
DOCTYPE 宣言なしQuirksQuirks
HTML (バージョンなし)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML//EN" "http://www.w3.org/TR/html/loose.dtd">QuirksQuirks
HTML 2.0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">QuirksQuirks
HTML 3.0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//">QuirksQuirks
HTML 3.2<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">QuirksQuirks
HTML 4.0<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">StandardsStandards
HTML 4.0 Frameset<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd">Standards [1]Quirks
HTML 4.0 Transitional<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">Standards [1]Quirks
HTML 4.0 Strict<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">StandardsStandards
XHTML<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "xhtml-basic10.dtd">Standards [2]Standards [2]
WML 2.0<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD WML 2.0//EN" "http://www.wapforum.org/DTD/wml20.dtd">Standards [3]Standards [3]
XMLStandardsStandards
Unrecognized DOCTYPEStandardsStandards

[1] Netscape で互換モードになります。
[2] XHTMLドキュメント が text/html として読み込まれ、 XML 宣言がある場合、IE と OPERA 7.0-7.03 では互換モードとなります。 Opera 7.1 以降では、XML 宣言、 PI、およびコメントを無視して表示モードを決定します。 XML ドキュメントの場合、 Opera と IE は標準モードで表示します。
[3] Opera でのみ WML ドキュメントタイプを認識します。

JavaScript によるモードの確定

IE 6.0 や Netscape 6 以上と同様、OPERA は JavaScript の document.compatMode プロパティをサポートしています。 互換モードでページが表示されるとき、このプロパティは "QuirksMode" (他ブラウザでは "BackCompat")に、 標準モードでは "CSS1Compat" となります。

互換モード および 標準モードでのデザイン

新たにページを作成する場合、最良の方法は標準に準拠させ、DOCTYPE を用いて確実に標準モードとすることですが、念の為に下記の"表示の非互換性" をお読みください。代替手段も考慮しなければならないかもしれません。

既存のページで IE と Netscape 4 のみでテストされている場合、最初は 互換モードになるようにしておくのが安全でしょう。それらのブラウザと Opera の標準モードで正しく表示されるかテストした後、安全に標準モードに切り替えられます。

互換モード(Quirks モード)と標準モード(Standards モード)における表示の相違点を網羅するリストはありません。 両モード間の相違は、その時々でどのような標準の多様性が普及しようとも、常に変化し続けるからです。 標準モードでの表示は、常に標準に準拠していくでしょう。 以下が、両モード間における最も重要な相違点であり、ほとんどの相違点は下記の2つのカテゴリーのうちのいずれかに分類されます:

記述エラーの補正
おそらく問題は発生しません。 記述エラーが発生しないかぎり、いずれのモードでも、またどのブラウザでも相違はありません。
表示の非互換性
注意が必要です。互換モード、および 古いブラウザでの表示は、標準に準拠した表示とは異なります。この非互換性の回避策として、クロスブラウザの代替手段があります。この代替手段を講じない場合、Netscape 4 および Windows 版 IE 4.0-5.5 では、OPERA や最新の NSIE の標準モード(Standards モード)とは異なる表示になります。互換モード(Quirks モード)では全て同じ振る舞いになりますが、その他の標準に準拠したブラウザで DOCTYPE スイッチがない場合は、標準モードで表示しようとします。

CSS の size と position プロパティに単位がない場合

CSS 中で 単位のない数値 (e.g.: "width: 300") は、互換モード(Quirks モード)では px と解釈され、標準モード(Standards モード)では無視されます。

CSS の size と position プロパティの数値と単位の間に空白がある場合

数値と単位の間に空白があるもの(e.g. "width: 45 em") は、CSS として正しくありません。 Opera は互換モード(Quirks モード)ではこれを許可しますが、標準モード(Standards モード)では無視します。

CSS の class および ID セレクタが数字で始まる場合

Class または ID は、 文字またはアンダースコアで始まらなければならず、数字で始まるもの (e.g. <div class="2"> )は正しくありません。 Opera は標準モード(Standards モード)ではこのようなセレクタを無視さしますが、互換モード(Quirks モード)では数字で始まる class 名を許可します。

テーブルの列の 'height' 属性 (7.0-7.11)

HTML の 'tr' 要素は 'height' 属性を持ちません。Opera 7.0-7.11 では互換モード(Quirks モード)でのみこれを許可しますが、Opera 7.2 以降のバージョンでは標準モード(Standards モード)でも'height' を許可します。

ブロック要素に高さが指定されている場合の 縦方向の overflow

互換モード(Quirks モード)では、内容に合わせてブロック要素が拡張されます。 標準モード(Standards モード)では、Opera は height を優先し、スタイルの指定が何もない場合は overflow:visible として処理します。

標準モードでの table 内への CSS プロパティの継承

Windows 版 IE と Netscape 4 には、table 内に CSS プロパティが継承されないというバグがあります。Opera は 互換モード(Quirks モード)ではこのバグをエミュレートしますが、標準モード(Standards モード)ではエミュレートしません。

互換モードでは、幅が指定されたインライン要素はインラインブロックに置き換えられる

CSS の 'width' プロパティは、インライン要素に対しては無視されるべきです。互換モード(Quirks モード)では、インライン要素に幅が指定されている場合、 display type を inline-block として処理します。

CSS の font sizes は 互換モードから標準モードで 一回り増加

Windows 版 Internet Explorer (IE6 の標準準拠モードを除く) では、 font-size: small がフォントサイズの初期値として使われます。Opera は 互換モード(Quirks モード)ではこの振る舞いをエミュレートしますが、標準(Standards モード)では font-size: medium を使用します。 すなわち、互換モードでは absolute font size keywords が "一回り大きい"ことになります。

Opera は標準モードでは CSS の class と ID セレクタ名の大文字/小文字を区別する

Strict モードでは、class="CLASS"class="class" は区別され、 CSS セレクタ *.CLASS を指定した場合、前者のみが選択されます。互換モード(Quirks モード)ではこの問題は発生しません。*.CLASS は両方と一致します。同様に、標準モード(Standards モード)では id="id"id="ID" は区別されますが、互換モードでは区別されません。

Box-sizing は Windows 版 IE 互換モードの border-box モデルに基づく

CSS の 'width' プロパティは幅を指定するものです。Windows 版 IE 3.0-5.5 では、内容の幅 + パディング幅 + ボーダー幅を決定されています。これは、'height' プロパティでも同様です。Opera の 互換モード(Quirks モード)では この振る舞いをエミュレートします。 Opera と Mac版 IE (Windows 版 IE はサポートしていません) では CSS 3 の box-sizingCSS プロパティをサポートしています。 Netscape と Mozilla は -moz-box-sizing プロパティとして同じ機能をサポートしています。

内容領域 (containing box) のマージンは計算された幅からひかれる

互換モード(Quirks モード)では、 CSS プロパティの 'margin-left' と'margin-right' は、計算された内容領域 (containing box) の幅から引かれますが、標準モード(Standards モード)では引かれません。

DOCTYPE スイッチ の無効化

通常は DOCTYPE によっていずれのモードかが選択されますが、Opera で常に標準モード(Standards モード)あるいは互換モード(Quirks モード)を使用するように設定することもできます。設定にあたっては、"opera6.ini" ファイルにて下記のいずれかの行を設定してください。

常に互換モード(Quirks モード)を使用する:
CompatMode Override=1
常に標準モード(Standards モード)を使用する:
CompatMode Override=2

Web ページのデザイン時に、Opera を常に標準モード(Standards モード)に設定しておくと、DOCTYPE スイッチをサポートしていないブラウザでそのページがどのように表示されるかをご確認いただけます。

WML 2.0 と DOCTYPE スイッチ

WML 2.0 は特別な形式の DOCTYPE スイッチを使用します。WML 2.0 は XHTML にいくつかの WML拡張を加えたものとほぼ同等で、XHTML Basic と同じ名前空間を使用しています。ごくまれに、WML 変数や $ エスケープの処理などの場合に、WMLXHTML と異なる振る舞いをします。詳細は WML 2.0 仕様書 をご覧ください。