• ベストアンサー

xhtmlのstrictモードについて

CSSを使用しています。 今まではhtmlでコーディングしていましたが、使わない方がよいとされる要素や属性を一切しようしていないため、xhtmlのstrictモードの宣言もできると思うんですが、それには何か欠点があるのでしょうか? Transitionalモードのソースはよく見かけますが、strictはなかなか見かけないのでまだ不具合があったりするのかと疑問です。 今xhtmlのweb制作切り替えるのはどんなリスクがあるのか教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

#2の者です。 標準モードと互換モードの違いですが、 標準モードは仕様に従います。(バグは多々ありますが・・・。) しかし互換モードは仕様を尊重しつつブラウザの拡張機能(方言?)を持ちます。 解かりやすいのが、IEのスクロールバーの色指定です。 この様な機能は仕様にはありません。

ao_
質問者

お礼

ブラウザの拡張機能を使用するということは標準仕様に沿わないコーディングということですね?ありがとうございました。

その他の回答 (3)

  • pingu98
  • ベストアンサー率62% (17/27)
回答No.3

strictで使えない要素や属性を使っていないなら、文書型宣言を変更すること自体が特に問題となることはありません。 注意すべきはXHTMLへの移行についてです。 思い当たるところで違いを列挙すると、 ・同じ要素でも書き方が違うものがある。 例 <br> ⇒ <br /> ・body直下にテキストやインライン要素を書けない。(strictの場合のみだったかも) ・要素名、属性名は全て小文字、属性値は大文字小文字の区別がある。 ・コメントの扱いが異なる。⇒コメント内でハイフンの連続は書けない。スタイル要素の中でコメントを書くと本当にコメントアウトされてブラウザに解釈されない(外部ファイルにしてあれば大丈夫)などなど。 ・空要素が良くない。⇒<div></div>とかいくない。 というような感じです。詳細違ってるかもで恐縮ですが、気になる項目はネット検索して更に詳しいサイトを参照してください。 ★★★ 最も注意すべき点は、一行目に必ず文書型宣言を書くことです。 ★★★ XHTMLはHTMLであると同時にXMLでもあるので、本当は一行目にXML宣言を書かないといけないんですね。 例 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> なのですが、IE6は一行目が<!DOCTYPE~>以外だと互換モードでレンダリングしようとするので、CSSの解釈のされ方が変わってしまうのです。 幸い(?)XML1.0では文頭のXML宣言は、強く求められるものの必須ではない事になっていますので、省略する事で回避できます。 また、XHTML1.1を使う場合は、<meta http-equiv~>はそもそも必要がないので使うべきではないとされています。が、一行目のXML宣言を省略した場合、文字コードをブラウザに伝達する場所がないので使った方がいいです。で、使っても大丈夫なことになっています。 更に、メディアタイプですが、XHTML1.1は何も書かなくてもapplication/xml+xhtmlで扱われる事になっているのですが、どうもIE6等がこれを理解しないようなので、text/htmlで指定せざるを得ません。これも、そう指定してもいいことにはなってます。 そんなわけで、現状ではIE6に対応させることを考えると、事実上XMLとしてはほとんど機能しないXHTMLになってしまいます。 ただ、XMLとして不満足なXHTMLでも、将来性を見越して作っておいて、IEのバージョンアップで対応されたら若干の変更(meta http-equivの削除とxml宣言の追加)で対応ができますし、text/htmlとしてだけ見れば、特に支障はないのでリスクというほどではないかと思います。 参考に、ちょっと恥ずかしいですけど私が今使ってるXHTML1.1のテンプレートを書いておきます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript; charset=utf-8" /> <meta name="Author" content="pingu98" /> <title>xxx</title> <!-- この文書をapplication/xhtml+xmlとして扱うためには以下の操作が必要です。 1.先頭行に<?xml version="1.0" encoding="UTF-8"?>を追加。 2.LINE4~6の<meta http-equiv~/>を削除。 --> </head> <body> </body> </html>

ao_
質問者

お礼

ものすごく詳細な回答ありがとうございます。 テンプレートも参考にさせていただきます。 確かにxml宣言を先頭にもってくるとIE6が互換モードになりますね。何気に一番シェアの多いIEがwebスタンダード上の障害のような気がします。 いずれはstrictを当然のように使われる日が来ると思うのでこれからもstrictを意識して制作しようと思います。ありがとうございます。

回答No.2

欠点というかなんというか、 strict は厳しいというか 作成者が本当にその知識を持っているか。 絶対の自信があれば strict 宣言すればよいが 読み手には宣言の違いは関係ないし・・・。 で、リスクとしては、より知識が必要になるというだけですかねぇ~ Transitional だとあまり詳しい知識はなくても済むし・・・。 よって、適切な知識を持ってなら strict をお勧めします。 私は使い分けをして、IE拡張機能を使いたいとか 理由を持って Transitional 互換モードを使ったり strict 標準モードにしたり努力しているつもりです・・・。 で、その違いは結構面倒だったりします・・・。

ao_
質問者

お礼

ご回答ありがとうございます。 一つ気になったのですが、Transitional 互換モードとはloose.dtdが入っていない状態ですよね? 使ったことがないんですが、標準モードと比べてレンダリングに大きな差はあるんでしょうか?

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

Strict な HTML に関しては欠点やリスクといったものはありません。むしろ HTML ではできないはずのことができてしまう Transitional な HTML はさっさと捨て去るべきなのです。 Strict をなかなか見かけないというのは、あなたと同じようになんとなく Strict への移行をためらっている人が多いからでしょう。Strict に移行してもあまり実質的なメリットがない現状では仕方ないと思います。 なお、Transitional から Strict への移行はいわば HTML における「原点回帰」のようなものです。HTML に不必要な機能がどんどん追加されてきて複雑になったので、本来の分かりやすい HTML に戻ろうということです。別に新しい機能が追加されるというわけではないので、不具合などが起こることはありえません。

ao_
質問者

お礼

原点回帰。いい言葉ですね。 もっと勉強してstrictを当たり前のように使えるようになりたいと思います。 ありがとうございます。