- ベストアンサー
<div>テキスト</div>
HTMLを記述する際に文書構造を明確に…と考えています。 見出しにはHタグ、本文にはPタグ、リストにはliなどなど。 ある書籍でbody直下にテキストを配置するのはいけない、と書いてありました。テキストに意味付けがなされていないから、というようなことが理由として書いてありました。 そこで思ったのですが、divはもともと意味をなさないブロック要素ですが、この直下にテキストを配置すると、このテキストは文書構造上意味を持たないものになって、文法上間違っているのでしょうか? 今のところ、 <div><p>テキスト</p></div> のように、pで意味付けをするのが正しいのかな、と考えていますが、W3Cのホームページではdiv直下にテキストを配置しているものがありました。 皆さんのご意見を伺いたいです。 div直下のテキストは正しいのか、間違っているのか、どうでもいいのか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
私は単純にDOCTYPE宣言が <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> なら <!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body --> となっていますのでテキストはbodyの子供要素になれないと解釈しています。 そこで%blockを見ると <!ENTITY % block "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS"> となっていますのでdivはbodyの子供要素になることができると思っております。 同様にdivを見ると <!ELEMENT DIV - - (%flow;)* -- generic language/style container --> となっていて%flowは <!ENTITY % flow "%block; | %inline;"> です %inlineは <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;"> ですからdivの子供要素として#PCDATAが出現できるからテキストを書くことができると思っております。
その他の回答 (7)
>#4補足質問 id,classについてはUKYさんが補足されているので省略します。 この場合について。 たとえばこれがメニューに対する補足(supplement)なら、該当の部分は <div id="menu_supplement">テキスト</div> もしくは <div id="menu_supplement"><p>テキスト</p>...</div> のようにするのが良いと思います。こういうとき<p>を使うか否かは、僕はそのテキストの長さで決めています。ある程度長ければ段落の数だけの数の<p>を使い、1~2文程度ならそのまま書いてしまいます。 (そんな人はいないと思いますが)たくさんのWebページから段落だけを抜粋しているような人がいた場合、「拾われるべき/拾われるべきでない」で使う使わないを決めるのもいいでしょう。
- UKY
- ベストアンサー率50% (604/1207)
> idやclassは単にデザイン指定のために使用するものだと思っているのですが・・・。 あ、それは全然違います。 確かに id や class はデザイン指定のために使われることが多いですが、それだけが id/class の使われ方 (≠使い方) ではありません。 (そもそも本来の HTML にはデザインのための要素や属性というものはありません。「id/class がスタイルシートに使われる」ことはありますが、「スタイルシートのために id/class を付ける」のは本末転倒であって良い HTML の書き方ではありません。) > idやclassで意味付けになるのでしょうか? P や BLOCKQUOTE のように直接的な意味づけはできませんが、id/class でも間接的にある程度意味づけができる、と私は思います。 大まかにいうと id は名前付け、class はグループ分けのために使うものですが、その名前やグループが何らかの意味を表しているならば、id/class によって意味づけがされていると考えることは出来ると思います。
- UKY
- ベストアンサー率50% (604/1207)
「div直下のテキストは正しいのか、間違っているのか、どうでもいいのか?」と質問なさっているのだから、DTD がどうとかいう話をしてもしょうがないと思うんですよ。構文論の話じゃなくて意味論の話をしないと。 といっても、私が書こうとしたことは既に volmocanon さんがほとんど述べられているのですが
お礼
ご回答ありがとうございます。 DTDの話が出てくることは予想の範疇なので、構文論でも私は構わないと思っています。むしろ構文論=意味論だとも思いますので。
- cyokokichi
- ベストアンサー率21% (32/152)
なにか勘違いされている方が若干1名くらいいますが、私はdivの直下に#PCDATAが出現させることとbody直下に#PCDATAを出現させない理由を最も簡単に書いただけです。
具体的に例を挙げると、DHTMLで作った自作のツールチップなどにdiv直下の#PCDATAは現れるかもしれません。 divは意味をなさないブロック要素ですが、意味が無いならば何のために用意されているのかというと、HTMLに無いブロック要素を記述するためです。 意味づけのためにも、要素にはid属性やclass属性を指定するようにしましょう。(これはspan要素にも言えることです。) <div><p>text text text ...</p></div> はDTD的には正しいですが、divに文書の構造としての意味があり、今は段落が一つしか無いのでこのような構造になっている等の理由が無いならば <p>text text text ...</p> とするのが良いでしょう。divは段落ではありません。 まとめると、divにid属性やclass属性を付けて意味付けをすればOKかと思います。ただ、既存のタグで済ませられないかどうか、まず考えてください! >#3 DTDは*最低限*守るべき規則であって、極論ですがDTDにだけ従えばいいのなら <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <title>test</title> <h1>H</h1> <h2>e</h2> <h3>l</h3> <h4>l</h4> <h5>o</h5> なんてのも正しいHTML文書です。
補足
>id属性やclass属性を付けて意味付けをすれば idやclassで意味付けになるのでしょうか? idやclassは単にデザイン指定のために使用するものだと思っているのですが・・・。 ちなみに、普段はdivを <div> <h2>メニュー</h2> <ul> <li><a href="">リンク</a></li> <li><a href="">リンク</a></li> <li><a href="">リンク</a></li> </ul> </div> のように使用しています。もちろん「まとまり」を作るためです。これにテキストを追加するとしたら <div> <h2>メニュー</h2> <ul> <li><a href="">リンク</a></li> <li><a href="">リンク</a></li> <li><a href="">リンク</a></li> </ul> テキスト </div> と記述するのはおかしいな、と思ったので今回のような質問をしました。上記では<p>テキスト</p>とすべきかと。
- 123isao
- ベストアンサー率54% (186/341)
タグ辞典で一つ一つのタグを勉強すればいいのでは? PもDIVも段落を表します。 Pでは上下に余白が取られますが、DIVでは余白はありません。 結局どちらでもいいです。 スタイルシートを使えばPもDIVも同一にできますし・・・。
お礼
ご回答ありがとうございます。 divは段落ではないのではないでしょうか?
- hime_mama
- ベストアンサー率32% (1542/4716)
http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ↑ここのサイトに行けば、構文チェックしてもらえます。 かなり厳しいので、100点は絶対ありえないと思ってください。
お礼
ご回答ありがとうございます。 ご提示いただいたサイトはよく使用していて、100点が出るように作成しています。 <div>テキスト</div>でも減点にはなりませんでした。
お礼
ご回答ありがとうございます。 やっぱりDTDが説得力ありますね。 ただ、 <div> <p>テキスト</p> <p>テキスト</p> <p>テキスト</p> テキスト </div> とするのはおかしいですよね?DTD的には問題ないのかもしてませんが・・・。