- ベストアンサー
html 「DOCTYPE記述」について
こんにちは。 タイトルの件ですが html4.01 Transitionalで宣言する場合、 <1> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> のように記述しますね。 上記に「http://www.w3.org/TR/html4/loose.dtd」を付け加えて <2> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">とも書きますね。 <1>と<2>差異は何でしょうか? <1>はスタンダードモード、<2>は互換モードであるとは理解していますが、そうだとすれば、<2>はStrictで宣言した場合と同じ結果になるのでしょうか? 詳しい方、教えていただけますか。 どうぞ宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
再び失礼します。 補足読みました。 まず、システム識別子を省略したHTML文書は、正しいHTML文書ではなくなるかどうかという疑問に付いて。 これは、DOCTYPE宣言で明示したDTDに則って記述してあれば、システム識別子を省略しても、正しいHTMLと言えると思います。 HTMLでは、システム識別子は省略することが可能です。 HTMLにおいては、DTDはW3Cによって規定されていて、それが個別に異なることはないため(たとえばDTD HTML 4.01 Transitionalで宣言を行った場合は、その参照するべきDTDはW3Cが規定したものただ一つですので、他のバリエーションはありません)、DTDがどこに保管されているのかを宣言しなくても、参照するべきDTDを特定することができます。 システム識別子は、宣言したDTDの定義をまとめたものがどこにあるのかを明示するものですので、HTMLの場合はこのシステム識別子を省略することができるはずです。 > デザインを重視したウェブページで、W3Cの仕様をきちんと守れなかったら > (守る自信がなかったら)、「システム識別子」は省いたほうが安全とい > うことになるのでしょうか。 この点については、どちらがどうとはいえないところがあります。 確かに、W3Cの仕様に準拠した記述法に自信がない場合には、互換モードで解釈された時に狙い通りの表示を「一発で出す」ことが期待できる、システム識別子を省いた文書の方が良いかもしれません。 ただし、そのような場合でも、逐一表示確認をして狙い通りになるように適宜修正を加える作業を積み重ねれば、システム識別子を省略せずとも問題のない標準モードで解釈されるHTML文書を作ることが可能と思います。 デザインを整えるという観点から行くと、ブラウザの表示モードの違いで基準とするものが変わってしまうわけで、システム識別子を省くことで安全マージンを確保できるとは、一概にはいえないと思いますよ。 デザイン重視のページで複数の環境において共通して狙い通りのデザインを確保する上では、いずれのモードで表示させるか(システム識別子を省くかどうか)よりも、そのモードで狙い通りの表示を得られているのかを綿密に確認・修正する作業ができているかが、一番重要と思います。 > やはり省いても良い「システム識別子」を(わざわざ)つけちゃって問題 > を起こすよりは、最初からつけないほうが安全なのでしょうか。 大手企業の例を引かれていますが、これはデザイン側の技術的問題というよりはむしろ閲覧者への配慮の問題で、古いバージョンのブラウザを利用しているユーザへの配慮という側面が強いと思われます。 企業などは、不特定多数の閲覧者に情報を提供することを目的としてページを公開しています。 このとき、企業としては、閲覧している人の環境の差異によって正常に表示されなくなるリスクを負うのは、ネット上で不特定多数の人々に向けて情報公開をする、という目的に反することになります。 閲覧する人が、必ずしも最新の仕様に沿ったブラウザを利用しているとはいえません。 それを前提とすると、最新のブラウザ向けの標準モードでのみ正常に解釈される記述法をとった場合、標準モードに相当するような解釈のできない古いブラウザでは、レイアウトが崩れてしまう可能性があります。 そのような事態を避けるために、古いブラウザで閲覧されても狙い通りのレイアウトで表示されるように、後方互換モードで対処しているのだと思います。 この点については、公開側として閲覧者の状況をどのように想定するのかの問題になると思います。 標準モードに相当する解釈のできないブラウザ(IE5以前、Netscape4.xx以前など)がいまだ利用されている可能性が高いと判断するのであれば、後方互換モードで解釈されるようにしておいたほうが、同一のHTML文書でどのブラウザでも同じレイアウトを確保する上ではより堅実だと思います。 もし、そういったブラウザを過去のものと考えるなら、標準モードに移行していった方が、のちのちのことを考えると良いかも知れません。 少々曖昧な話になりましたが、参考になれば…
その他の回答 (4)
こんにちは! NO.3 のyayopix です。 >それって正しいHTML?なんて聞かれると困っちゃいそうですね・・ 『正しい』の基準をどこにするかで変わってくると思います。 あくまでも私の考え方ですが・・ Transitionalを選んでいる時点で規制を緩めていますので基準によっては正しくないと思います。 これは、文法ミスをカバーするためにそうしている人もいるかもしれませんが、ほとんどの場合は古いブラウザに対応させるためだと思います。 その時点で >ブラウザでちゃっと表示されることを優先すべき・・ を選択している事になると思います。 ですので、 >正しいHTML・・ という事であれば、DTDは【Strict】にするべきだと思います・・。 あるいは【XHTML】 私の場合はフォントのスタイルなど基本的なものはスタイルシートを使うようにしていますが、どうしてもデザインのためにテーブルを使ったりしますので、やはりlooseになってしまいます。 どっちみちlooseなのだからより幅の広い省略形を使用しています・・(;^_^A
お礼
どうもありがとうございます。 特に以下は大変参考になりました。 ■Transitional 規制を緩めていますので基準によっては正しくないと思います。 これは、文法ミスをカバーするためにそうしている人もいるかもしれませんが、ほとんどの場合は古いブラウザに対応させるためだと思います。
こんにちは! "http://www.w3.org/TR/html4/loose.dtd"の部分は省略できますので、省略しただけだと思います。 ですので、【1】と【2】は同じ・・はずです。 Dreamweaver(プロの方にも結構使われているソフトです)ではデフォルトでは省略した方が使われています。 ただ、同じはずだと思うのですが、以前ここであるWebデザインの不具合の質問があり、 "http://www.w3.org/TR/html4/loose.dtd" をはずしたら上手く表示出来た・・ということがありました。 どんな内容の不具合だったかちょっと思い出せないのですが、特殊な手法ではなく一般的なことだったです。 それからは省略する方を使っています。 中途半端な回答ですみません・・。
補足
ご指導をどうもありがとうございます。 やはり、システム識別子の「"http://www.w3.org/TR/html4/loose.dtd" 」は つけないほうが望ましいでしょうか。 正しいHTML云々よりも、ブラウザでちゃっと表示されることを優先すべきでしょうか。 ご意見いただいて、自分では今後「システム識別子」を省く方向で考えているのですが、(誰かから)それって正しいHTML?なんて聞かれると困っちゃいそうですね。
標準モードと互換モードは、あくまでもブラウザがその文書をどのように表示させるかの表示モードであって、文書型の宣言の内容とは関係ありません。 ブラウザの挙動(互換モード/標準モード)と、文書の記述規則(Strict/Transitiona/Frameset)とに、きちんと切り離して考える必要があるでしょう。 ブラウザに標準モードで解釈されるようにDOCTYPE宣言を記述したTransitionalの文書は、あくまでもTransitional DTDにそった文書であり、Strict DTDに基づいて記述した文書とは異なります。 互換モード、標準モードというのは、スタイルシートなどの解釈をどのようにするのかの、ブラウザ側の表示モードのことです。 後方互換モードは、それまでのブラウザで行ってきたような解釈を行って表示させるモードで、標準モードはW3Cが提言している仕様により近い形で解釈を行って表示させるモードです。 これらのモードが変わると、スタイルシートの解釈の仕方が変わります。 IE6では、ボックスサイズの基準の取り方や、いくつかのスタイルシートのプロパティの解釈の仕方が変化します。 また、標準モードでは、スタイルシートの記述方法が規則に則っていない場合、拡大解釈されずに無視されるようになると思います。 それと、DHTMLを利用している場合には、そのスクリプトの記述方法にも影響するケースがあります。 なお、このような表示モードの切り替えを行うブラウザは、IE6(MacはIE5)、Netscape6以降、Opera7以降などです。 ちなみに、DOCTYPE宣言の記述の仕方によってブラウザの表示モードを切り替える機能を、「DOCTYPEスイッチ」と呼んだりします。 この語で検索をかけてみると、多数の参考になるページが見つかると思いますよ。 参考まで。
補足
ご指導いただき、どうもありがとうございます。 (思ったより)奥が深いようですね。 --- ■互換モード それまでのブラウザで行ってきたような解釈を行って表示させるモード。 ■標準モード W3Cが提言している仕様により近い形で解釈を行って表示させるモード。 標準モードでは、スタイルシートの記述方法が規則に則っていない場合、拡大解釈されずに無視されるようになると思います。 --- →「互換モード」、「標準モード」などは「ブラウザの挙動」ですね。 文書の記述規則(Strict/Transitiona/Frameset)とは区別して考えるべきであること、よくわかりました。 さて、Transitional4.01でHTMLを記述する場合、 デザインを重視したウェブページで、W3Cの仕様をきちんと守れなかったら(守る自信がなかったら)、「システム識別子」は省いたほうが安全ということになるのでしょうか。 そういえば、大手企業のウェブページを見ると、大概<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">のみで、「システム識別子」はつけていませんね。 やはり省いても良い「システム識別子」を(わざわざ)つけちゃって問題を起こすよりは、最初からつけないほうが安全なのでしょうか。 ところで、「システム識別子」を省くと、正しいHTMLでなくなるのでしょうか? もし宜しかったら教えていただけますか。
- selene_pl
- ベストアンサー率49% (102/207)
参考URLに、詳しい話が載っているので、読んでみてください。 ちなみに、そこを読んでみると、 <1>が互換モード、<2>が標準モードだと書かれてあります。 私は「互換」「標準」がどういう意味なのかよくわかってないので、 はっきりしたことは言えませんが。 >Strictで宣言した場合と同じ結果になるのでしょうか? これは、明らかに違います。 strictの場合は、Transitionalなんて入らないので。
補足
早速のご指導、どうもありがとうございます。 まず、訂正があります。 ご指摘通り、<1>が互換モード、<2>が標準モードでした。失礼しました。 ■システム識別子 「"http://www.w3.org/TR/REC-html40/strict.dtd"」を「システム識別子」というのですね。これは「省略できる」という解釈で良いそうですね。(記述することでサーバーの誤動作を招きかねない?) --- >Strictで宣言した場合と同じ結果になるのでしょうか? これは、明らかに違います。 strictの場合は、Transitionalなんて入らないので。 →「標準」・「互換」という表現ですが、 Strictで記述する場合の「標準」・「互換」と、 Transitionalで記述する場合の「標準」・「互換」という のが良く分かりませんね。 今まで単純に「標準=Strict」、「互換=Transitional」だと認識していました。 これらに関しても知りたいので、もう少し他の方のアドバイスを待つことにします。 ぼくとしては、「システム識別子」について知ることができ、大変感謝しています。ありがとうございます。
お礼
丁寧なご指導、どうもありがとうございました。 おかげさまでhtmlの理解が深められた気分です。 また機会がありました教えていただけますか。 よろしくお願いします。