天使と悪魔選手権

section  articleといった新しい要素をCSSのfloat等でレイアウトするのは間違いなのでしょうか?
いろいろと調べてみましたが、sectionを使ったレイアウトは駄目で、divでレイアウトするとか…
また、article aside nav 等をCSSでカラムレイアウト解説をしているサイトもありました…
また、Q&Aサイトで
<div id="article_1">
<article>
……………
</article>
</div>
のようなsampleで、わざわざ無駄なことをせずにhtml5の新しい要素でレイアウトしましょう…?
<article id="article_1">
……………
</article>
と言うような回答もありましたが…
確かに、HTML5でWEBページ作成をするのに、レイアウトは<div>でネストするのは意味がないように思いますが…
よりよい方法を教えてください。m(_ _)m

A 回答 (4件)

No.1です。


仕様書を一度は目を通すと疑問は払拭されるでしょう。
HTML4.01自体がなぜ作られたかを御存知でしたら、HTML5の目的のひとつがよくわかると思います。
 ユーザー登録(無料)が必要かもしれませんが
 ⇒HTML5“とか”アプリ開発入門(1):Webの3つの問題を解決する「HTML5」とは何なのか (2/2) - @IT( http://www.atmarkit.co.jp/ait/articles/1008/30/n … )
【引用】____________ここから
□ 【問題2】文書内に埋め込まれた「意味」が不明確
 ・・・前略・・・「以前のHTMLは、文書構造の「意味」を表すための機能が不足していた」ということが挙げられます。
 例えば、「見出し」「本文」といった文書構造を表すのに、これまでは<div>要素を用いることが一般的でした。しかし、<div>要素は厳密にいうと「意味を持たない」という意味の要素です。<div>が多用されたHTML文書は、開発者が目で見て読むのであれば、文書構造の意味を把握することは容易かもしれません。
 しかし、例えば検索エンジンやスクリーンリーダーなどのプログラムにとっては、「どこからどこまでが重要な本文なのか」「この<ul>要素はナビゲーションメニューを表しているのか、文書中の個条書きなのか」すらも分からないのです。
 → 【解決】文書内に埋め込まれた「意味」を明確にする
 HTML5では、この問題に対処するため、数多くの意味的要素(「セマンティックな要素」と呼ばれます)が追加されました。それだけではなく・・・【後略】・・・
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで
 この記事を読まれただけで、『そもそも、DIVでレイアウトする』という思考自体が誤りであることに気が付かれると思います。

[例] タブは (全角スペース二個)に置換してあるので戻す。
<body>
  <div class="header">
    <h1>タイトル</h1>
  </div>
  <div class="section">
    <h2>本文タイトル</h2>
    <div class="section">
      <h3>項目タイトル</h3>
    </div>
    <div class="section">
      <h3>項目タイトル</h3>
    </div>
    <div class="nav" id="cointentTable">
      <h3>目次</h3>
    </div>
    <div class="aside">
      <h3>補足記事</h3>
    </div>
  </div>
  <div class="footer">
    <h2>文書情報</h2>
  </div>
</body>
★HTML4.01が仕様どおりに記述されていれば、文書構造が分かりますよね。
 これをスタイルシートで
div.header,div.section,div.footer{
width:80%;min-width:620px;max-width:900px;
margin:0 auto;
padding:5px;
}
div.section{position:relative;min-height:400px;}
div.section div.nav,div.section div.aside{/* 子孫セレクタ */
position:absolute;top:0;
width:200px;height:100%;
}
div.section div.nav{left:0;}
div.section div.aside{right:0;}
div.section h2,div.section div.section{
width:auto;min-width:0;min-height:0;
margin:0 210px;
}
/* たったこれだけ!---おまけに分かりやすく色分け */
body{background-color:gray;}
div.header{background-color:aqua;}
div.section{background-color:silver;}
div.section div.section{background-color:white}
div.section div.nav{background-color:yellow;}
div.section div.aside{background-color:lime;}
div.footer{background-color:fuchsia;}
とすると5カラムのスマホにも対応したリキッドのデザインができます。
★必ず試してください。
なお、DOCTYPEは
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  ブラウザ間の差もないはずです。
 もちろん、div.section div.navやdiv.section div.asideの左右を入替えたり、すべて右によせたりとデザインの自由度も高くなりますし、文書構造自体も分かりやすいのでメンテナンスも容易になるでしょう。
 HTMLを見なくてもスタイルシートが記述できますよ。
★そして、そのままHTML5に変更できます。
 <div class="header"></div>⇒<header></header>
 section,nav,aside,footerも同様

No.1で引用した『文書の構造をプレゼンテーションと切り離すことで広汎なプラットフォームや多様なメディアでの文書提供コストを低下でき、文書の改訂も容易になるということが、経験的に知られている。』
の意味が理解いただけると思います。

★HTML4.01strictでDIVを本来の使い方で使用して文書構造をマークアップする。
★HTML5で要素を正しく使用して文書構造をマークアップする。
 いずれであっても構いません。プレゼンテーションとは切り離して・・・
 さすれば、自由自在にデザインできますし、そもそも製作やメンテナンスが楽になる。

この回答への補足

上記記載URLサイト見てみました、何となくですがわかりました。
テーブルレイアウトからHTMLを本来の意味でコーディングしてCSSでレイアウトをするようになって、<div>は特別な意味を持っていないからレイアウトに利用できるんだなぁ~と思って利用していました。でも結局は<div>の入れ子自体が、HTMLの意味を、不明にしているということなんですねぇ~。
確かに<ul>がサイトナビに利用されているか、単なるリストか…等はブラウザにはわからないですものね。

参考に記述していただいたコーディングをHTML4.01とHTML5で確認してみました。IE8,Chrome,Safali,Firefox,Operaで同じ3カラムに表示できました。
画像のUPができるようならUPしておきます。

補足日時:2013/09/03 23:12
    • good
    • 1
この回答へのお礼

丁寧にわかりやすい回答をありがとう御座いました。
ブラウザで表示確認した画像をUPしようかと思いましたが…画像のUPはできないようなので、残念。

HTML5の開設サイトをいろいろ巡回していて、そのページをHTML5で記述してあるのですが、結局<section>や<article>は、利用しておらず、<div>でレイアウトしているページばかりのようでした、そこは古いブラウザに配慮しているのかな…?でしたが。笑//

改めて、ありがとう御座いました。

お礼日時:2013/09/03 23:21

>No.3回答


>No.3お礼

一応補足しておきます。

<section>でレイアウトが可能というのは、

スタイルシートで
div {position: absolute; width: 50%; right: 0;}
このように書けば<div>を右寄せする事が可能ですが、

section {position: absolute; width: 50%; right: 0;}
このように書けば<section>を右寄せする事が可能だというだけです。


レイアウトを目的として<section>を使うのではなく、
sectionは「セクション(和訳すると章や節など)」の区切りのために使用し、レイアウトを行う場合は上記の様にスタイルシートで指定してください。

また、たとえばナビゲーションには<nav>を使用し、<nav>のレイアウトを変更したいのであれば<nav>に対してスタイルシートを適用してください。(つまり、<nav>のレイアウトを目的として<section>の入れ子にしない。)


再度書きますが、
sectionでもレイアウトできる(sectionにスタイルを適用できる)ものを、わざわざスタイルシートを適用するためだけに<div>の入れ子にする必要はありません。
しかし、ブラウザのサポート状況を理由にわざわざ<div>の入れ子にする方が良い事もあります。
    • good
    • 0
この回答へのお礼

再度の追加情報、ありがとうございます。
疑問は<section>とか<nav>とか<aside>とかを、CSSで装飾を加えて、ブラウザの表示画面のどの場所に、どの大きさで表示させるか…そういう意味でのレイアウトでした。
…が、いろいろな情報を知り得ることができました。
HTML5のプロパティのそれぞれの意味を考えながら情報を記述はしていましたが…。
改めて、重要性がわかったような…笑//

ありがとう御座いました。m(_ _)m

お礼日時:2013/09/03 23:38

<section>や<article>、もちろん<header>、<footer>、<aside>、<nav>など、全要素でレイアウトしてもかまいません。


HTMLをシンプルにするのが推奨されますので、その方が良いです。

古いブラウザはこれらHTML5で導入されたタグはHTML4のインライン要素と同じ表示(旧IEは空要素)になりますので、
それに対応するために<div>を併用する方法がとられます。
IE限定では、いわゆるhtml5.js、shiv.jsと呼ばれるスクリプトと、display:blockスタイルを使ってブロック要素のような表示に変える事ができます。

これ以上は「どのブラウザをサポートするか」という制作者の考え方次第です。
新しいブラウザ限定、またはJavaScript必須であればHTML5で作れば良いですし、
古いブラウザもサポートしつつ、HTML5のタグを使いたいのであれば<div>を併用するのも良いです。
古いブラウザでJavaScript停止環境を最優先にするならHTML4で作るのが良いです。

サイトごとに違うのは、そのサイトの作者ごとに考え方が違うからです。
    • good
    • 1
この回答へのお礼

回答ありがとう御座います。
CSS3の新規プロパティをいろいろと…HTML5で検証・確認していました。<section><article>で迷ってしまって、書籍とかネットとかで調べるにあたり、<section>をレイアウトに使うのは意味が違う<div>でレイアウトしましょう…的な!!が何度も出てきましたので…
質問をUPしました。

ありがとう御座いました。

お礼日時:2013/09/03 19:43

一度、仕様書を通して読んでください。


HTML 4.01仕様書(邦訳)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )
HTML5( http://www.w3.org/TR/html5/ )

 ネット上に散乱している情報をいくら見ても役には立ちません。とりあえず、HTML4.01strictをマスターしてください。★ただしstrict★ですよ。HTML5は、その改訂ですから、
HTML5 における HTML4 からの変更点( http://standards.mitsue.co.jp/resources/w3c/TR/h … )
で概略は理解できます。

そもそもDIVはHTML4.01のときから
『HTMLの性質上、プレゼンテーションに関する要素や属性は、次々と他の機構、とりわけスタイルシートに置換えられていく。 また、文書の構造をプレゼンテーションと切り離すことで広汎なプラットフォームや多様なメディアでの文書提供コストを低下でき、文書の改訂も容易になるということが、経験的に知られている。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
『DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』

と書かれていました。必ず私の説明ではなく仕様書を読んで確認すること!!

 それを理解しているだけで、そのような質問は出てこないはずです。

 HTML4.01で「文書構造とプレゼンテーションの分離」が言われながら、DIVをデザインのために使用したページや解説がたくさん存在しています。
 DIVやSPANはidやclassを併用して文書構造を補完する為のものです。
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 その文書構造に基づいてスタイルシートでデザインしていくと書かれていたのに!!!
これは非常に多くの利点があります。
・誰が見ても、自身が後日見返しても、検索エンジンにも内容が理解しやすくなります。
・HTMLに余計なものがないためHTMLもスタイルシートも簡潔で分かりやすくなります。
 もちろん文書構造とデザインが分かれていますから、スタイルシートを変更するだけでデザインを簡単に変更できます。スクリーンリーダー、プリンターは無論、幅の狭いディスプレイや広いディスプレイ用にスタイルシートを用意できます。
[HTML4.01]だと、下記のように書かなければならなかった物が
<body>
 <div class="header">
  <h1>タイトル</h1>
  <div class="nav"></div>
 </div>
 <div class="section">
  <div class="section">
   <div class="section">
   </div>
   <div class="section">
   </div>
  </div>
  <div class="section">
   <div class="aside"></div>
   <div class="article">
    <div class="header"></div>
    <div class="section"></div>
    <div class="footer"></div>
   </div>
  </div>
 </div>
 <div class="footer">
 </div>
</body>
[HTML5]だと
<body>
 <header>
  <h1>タイトル</h1>
  <nav></nav>
 </header>
 <section>
  <section>
   <section>
   </section>
   <section>
   </section>
  </section>
  <section>
   <aside></aside>
   <article>
    <header></header>
    <section></section>
    <footer></footer>
   </article>
  </section>
 </section>
 <footer>
 </footer>
</body>
と書くことになります。
★HTML5でWEBページ作成をするのに、レイアウトは<div>でネストするのは意味がないように
 じゃないです。重要なのでわざわざMEMOとして、
NOTE:Authors are strongly encouraged to view the div element as an element of last resort, for when no other element is suitable. Use of more appropriate elements instead of the div element leads to better accessibility for readers and easier maintainability for authors
 著者は、他に適切な要素がないときの、最後の手段の手段としてdiv要素を使用することが強く奨励される。divの代わりにより適切な要素を使用することにより、読者にとってはアクセシビリティの向上に、著者にとってはメンテナンス性の向上につながる。
 ⇒4.5 Grouping content — HTML5( http://www.w3.org/TR/html5/grouping-content.html … )

★HTMLはデザインのための物じゃないです!!!!
 文書構造をマークアップするマークアップ言語です。
★スタイルシートは、その文書楮を利用して、プレゼンテーションを指定する物です。

 この二つが理解できていないサイトがあまりにも多すぎます。
  仕様書を全く読んだ形跡もないのに解説しているのじゃないかと・・(^^)

>sectionを使ったレイアウトは駄目で、divでレイアウトするとか…
★新しい要素を使わずにDIVを使用するのは、古いブラウザに新しい要素が理解できないからです。javascript・・
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5. …
<![endif]-->
と書いておけば、古いIEはとりあえず使える。

この回答への補足

[回答]ありがとうございます。
W3Cは、後ほど見てみます。
「う~ん」
正しい意味でHTML5の新要素でコーディングをしていれば、section,article等を直接CSSでwidth,height,float,positionを指定して見栄えのためのレイアウトをしていても間違いではない…と言うことになるのでしょうか?

CSS3の確認のためにHTML5を使ってみたのですが、<section>でレイアウトが可能なのですが、それは間違っている…というようなことで??じゃぁ~やっぱり<div>かぁ…?でした。
WindowsXPでIE8なのでGoogleのhtml5.jsとCSS_resetを指定して、他のブラウザでも確認。

補足日時:2013/09/02 20:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!