CSSを覚えていく上でXML宣言と文書型宣言に関しての理解がないと、組んでいくうちにブラウザによって表示の違いが生じ、後から色々とスタイルを調整しても何が原因で表示が違うのか分からなくなってしまうといった事があると思います。
という事で、文書型宣言について自分なりのアレコレを書いてみます。(間違ってるトコあったらご指摘願います)
XML宣言に関してのアレコレは前のエントリーで書いてます。
あ、文書型宣言ってのは、ウチのサイトの場合コレ↓です。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XML宣言ってのはコレ↓です。
<?xml version="1.0" encoding="utf-8"?>
アレコレの前に。
この記事ではXHTML1.1に関しては特に触れていません。
文書型宣言のアレコレ
文書型宣言は、簡単に言うと「この文書はどのバージョンのXHTMLで作ってるのか」ってのを明示する為のモノです。
例えばHTML4.01のTransitonal(システム識別子なし)からXHTML1.0のTransitonalに文書型宣言を変えた場合、指定しているバージョンが違うんだから、ブラウザによっては若干表示が違ったり解釈が異なったり、場合によってはスタイルの指定がある特定のブラウザだけおかしいといった自体が発生します。
おかしいとはいえ、WinIE6だけXML宣言の有無で表示が異なるバグがありますが、ソレ以外は仕様通りです。
XHTMLではバージョンごとに文書型定義ってのがあり、その指定したバージョンはどんなルールで内容を記述するのか、どのような要素や属性、属性値が指定できるのかが定義されてます。
自分の書いているXHTMLがどのバージョンなのか分からずに、なんとなくコピーしてきた文書型宣言がStrict(厳密型)な場合、宣言している文書型定義とXHTMLの内容が全然違うって事にもなりかねないので、ちゃんと自分はどのバージョンで書いているのかを理解して文書型宣言をしましょう。
文書型定義がTransitional(移行型)でもフレームを使ったサイトの場合は間違いになってしまいます。
フレームを使ったサイトの文書型定義は下記のFrameset(フレーム利用型)になります。
(iframe要素は、Transitionalで文書型定義をします。Strictでは認められていません)
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
現状XHTML1.0の文書型定義には、Strict(厳密型)、Transitional(移行型)、Frameset(フレーム利用型)の3つがあります。
実際に記述する場合は下記です。
XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
文書型宣言の中身
文書型宣言は公開識別子とシステム識別子の2つで構成されてます。
公開識別子(Formal Public Identifier)ってのは、コレ↓(Strictの場合)
-//W3C//DTD XHTML 1.0 Strict//EN
システム識別子(System Identifier)ってのは、コレ↓(Strictの場合)
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
ココはこの2つで構成されてるんだな、程度で十分だと思います。別に覚えたからってどうのこうのって感じじゃないので…
とはいえ、一応説明を。
公開識別子は、ユニバーサルに文書型定義を参照するための識別子。W3Cなどの団体が定義した文書型定義を参照するための識別子なので、文書作成者が勝手に書き換えたりする事は出来ません。
システム識別子は、その文書が準拠する文書型定義を参照するURIです。システム識別子はHTMLでは省略しても可になってますが、XHTMLでは省略はできません。
最後に
アレコレというタイトルなんで色々書きましたが、取り合えずXHTML+CSSを勉強しようかなって場合は、
文字コードをUTF-8で書いて、XML宣言なし。文書型宣言はXHTML1.0 Transitonalが良いと思います。
その「良いと思います」んトコを下記に書いておくので、必要な方はコピってお使い下さい。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta name="Description" content="" /> <meta name="Keywords" content="" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <link rel="stylesheet" href="./css/style.css" type="text/css" media="all" /> <link rel="INDEX" href="/index.html" /> </head> <body> <p>内容</p> </body> </html>