
XHTML+CSSを勉強してる初心者ですが。
この場を借りて質問させてもらいます。
判らない事は
(1)
<div style="background: #CCCCCC; height: auto; width: 700px;">
<div style="background: #888999; height: 100px;width: 300px;float:left;">画像</div>
<div style="background: #999999; height: 300px;width: 400px;float:left;">画像の説明</div>
<br style="clear: both;" />
(2)
<div style="background: #CCCCCC; height: auto; width: 700px;">
<div style="background: #888999; height: 100px;width: 300px;float:left;">画像</div>
<div style="background: #999999; height: 100px;width: 400px;float:left;">画像説明</div>
<div style="clear: both;"></div>
(1)と(2)では、
(1)は<br style="clear: both;" />と記入してますが
(2)は<div style="clear: both;"></div>と記入してます。
この(1)と(2)は同じなのでしょうか?
それと使うとするならどちらのほうが有効的なのでしようか?
教えていただければ光栄です。
No.3ベストアンサー
- 回答日時:
> それと使うとするならどちらのほうが有効的なのでしようか?
どちらも良くないですね。
(1)は、インライン要素の強制改行として用意されているbrを、divというブロック要素の後に単独で置いてあります。
(2)は、内容を持たない<div>~</div>が置かれています。
いずれも、ただ先に来る要素に与えられているfloat状態を解除する為だけに(レイアウトの為だけに)設けられた無意味なマークアップですので、論理構造上適切ではありません。
ケースバイケースで適切な方法がいくつか考えられます。
質問文及びNo.1のお礼文中のソースに基づき、CSSを以下と仮定します。
【ベースとなるCSS】
div.waku {
width: 700px;
background: #CCCCCC;
}
div.a {
float: left;
width: 300px;
height: 100px;
background: #888999;
}
div.b {
float: left;
width: 400px;
height: 100px;
background: #999999;
}
【A】<div class="waku">~</div>内で、<div class="b">画像説明</div>の後に来る内容がある場合
例えば:
<div class="waku">
<div class="a">画像</div>
<div class="b">画像説明</div>
<p class="notes">注釈…</p>
</div>
という様な構成であるなら、わざわざ空の要素を置くのではなく(floatしている要素の後に続く要素である)<p class="notes">~</p>のスタイルにclearプロパティを適用すればいい、という事です。
【ベースとなるCSSに追加】
p.notes {
clear: left;
}
【B】<div class="waku">~</div>内で、<div class="b">画像説明</div>の後に来る内容がない場合
<div class="waku">
<div class="a">画像</div>
<div class="b">画像説明</div>
</div>
■方法その1
質問文のソース通り、<div class="a">画像</div>と<div class="b">画像説明</div>の高さが"height: 100px;"で決め打ちできる様な内容なのであれば、親要素である<div class="waku">~</div>のスタイルとして、"height: 100px;"以上の高さを与えてやれば、内包する要素以上の高さで親要素が描画されるので、子要素のfloatを解除しなくても支障は出ません。
【ベースとなるCSSを修正】
div.waku {
width: 700px;
height: 100px;
background: #CCCCCC;
}
■方法その2
floatする子要素を内包する親要素のスタイルの方に通称clearfixという小技を用いて、親要素側でfloat状態をクリアさせる事ができます。
"CSS clearfix"というキーワードでググると沢山ヒットします。書き方は色々あるのですが、下記はその一例です。
【ベースとなるCSSを修正・追加】
div.waku {
zoom: 100%;
width: 700px;
background: #CCCCCC;
}
div.waku:after {
display: block;
height: 0;
visibility: hidden;
content: ".";
clear: left;
}
などなど…
ただ、内容が真実「画像」と「画像説明で」あるなら、全てdivでマークアップしてしまうこと自体、あまり相応しい構造とは言えません(文法的には間違いではありませんが)。img、p、dl…等のマークアップの方が適切かとは思います。
No.5
- 回答日時:
No.3です。
ちょっと色々気になったので、補足的な事です。質問者様は「XHTML+CSSを勉強」されているとの事ですので、早い段階からCSSを使う意味を適切に把握しておかれる方が今後の理解がスムーズになると思います。
No.1-2様の「HTML上には、レイアウトに関わることは書かない方が良い」「2の方も同じです。あまり良くないです。CSSでやるには、クリアしたいボックスに指定して下さい。」というご指摘の意味は、単に、HTMLのコード上で直接style属性でスタイルを記述するのが良くない、と仰っているだけではなく、”HTML文書中にレイアウト目的の記述をするのは好ましくない”と言う事を含めてらっしゃると思います。
確かに、(1)も(2)も(そしてNo.4様の”ダミー”も)文法上のエラーがあるわけではないのでHTML文法チェッカーにかけてもスルーされます。ただ、HTMLというのはマークアップ言語であり、HTMLタグでマークアップするのは「見た目のレイアウトをする」目的ではなく「文書の論理構造を整える」のが目的です。
#ですから、No.3の最後に「全てdivでマークアップしてしまうこと自体、あまり相応しい構造とは言えません」と付け加えたのです。
私自身もプログラミングの世界にも片足、というよりほんのつま先程度を突っ込んでおりますが、「プログラムの世界」で「ダミーを使用することはよく有る」のかどうかは存じ上げませんが、HTMLというマークアップ言語では「((1)や(2)やNo.4様の”ダミー”の様な)論理的に無意味・適切ではない」マークアップをする事は、言語の本来の用途から逸脱するので決して推奨されている事ではありません。
勿論、複雑なレイアウトを実現する事が至上命令である場合、その為にどうしても煩雑な入れ子やかなり苦し紛れ(こじつけ的)のマークアップを余儀なくされる事はゼロではありません。しかしそれはあくまで簡潔なマークアップではどうやっても無理な場合にやむを得ず、です。そこそこ長くこの仕事をしてきた実体験から言わせて頂ければ、ある程度CSSを理解し使いこなせる様になってくれば(主要モダン・ブラウザのみを対象とするならば)相当複雑なレイアウトであっても、HTML側はきちんと論理的整合性を保った記述で実現できるものです。
まして、今回のケースの様に難なく(質問文中のソースを見る限りでは、です。他の条件に依ってはその限りではない事も考えられますので。)論理的整合性を持ったマークアップでいくらでもCSS上でスタイルが調整できるのに、わざわざレイアウト目的の為だけに存在する"内容のない"ダミー的HTMLコードを書く必要は全くありません。
【参考】http://w3g.jp/xhtml/ref/outline
引用ここから---------------------------------------------------------
HTML の第一の機能は、文書内の情報を構造化することです。たとえばテキスト(文章)を、ここは「見出し」「段落」「リスト」「表」のようにそれぞれを構造としてマークアップすることができます。これらが HTML でできることの最大の特徴です。
引用ここまで---------------------------------------------------------
【参考】http://w3g.jp/css/guide/outline
引用ここから---------------------------------------------------------
では、CSS では一体何ができるのでしょうか。(X)HTML には文章を「見出し」「段落」「リスト」「表」のように各部分を構造化する特徴がありました。これに対して、(X)HTML文書の見栄えを定義する CSS は、これら (X)HTML によって構造付けされた「見出し」なら「見出し」の構造に対してレイアウトを定義するのが特徴です。たとえば、 (X)HTML で見出しと構造化した部分に、さらに文字の色や形などを装飾するための指定があると、見出しとして定義された部分に装飾に関する不明確な情報が余計に混じってしまうことになり、情報伝達の妨げとなります。そこで CSS は、従来の HTML が担ってきた情報伝達と見た目を整える2つの作業の内、見た目を整える作業については、CSS が分担することによって、(X)HTML が効率的に情報交換を行えるように、(X)HTML文書が本来の役割とは違う見た目を達成するのに役立ちます。
引用ここまで---------------------------------------------------------
今後の質問者様の勉強の参考になれば幸いです。
No.4
- 回答日時:
要する記述する要素が何もないので、無理やりにせざるを得ないということです。
ほんらいはclearfixと呼ばれる方式がただしいのですがそれでは、ブラウザごとの違いを意識しなければなりません。かならず、clearfixを検索してくださいね。
この場合簡素化としては、1pxの四角のダミーを使用するとして。。
(2)でいいと思います。ただ、clear:bothだけではうまく行きません。もう少し詳しく書かないとブラウザによる表示を統一することは不可能です。
font-size: 1px;
line-height: 1px;
margin: 0px;
padding: 0px;
clear: both;
height: 1px;
width: 1px;
このようにすれば、どのブラウザでも、1px四方のダミーを入れることができます。
<div style=""; height: auto; width: 700px;">
<img src="" style="background: #888999; height: 100px;width: 300px;float:left;" />
<img src="" style="background: #888999; height: 100px;width: 300px;float:left;" />
<div style="1PXの四角"></div>
</div>
こういうやり方でW3CのHTMLチェッカーは通過できます。
<div style="1PXの四角"></div>がいけない理由はありません。
プログラムの世界では、こういったダミーを使用することはよく有ることだと思います。^^
また、できれば、外部CSSを使っ他方がHTMLと分離できて便利です。あなたのようにHTMLに埋めるのyahooSHOP構築などの限定された環境のみですからね。(外部CSSが使えない場合)
なお、css内で
div .aaa
と記述する必要はありません。単に
.aaaと記述すればシンプルとなります。
こうすれば、同じcssのタグ間の使い回しがとても楽になりますよ。^^
No.2
- 回答日時:
XHTMLに
<div class="waku">
<div class="a">画像</div>
<div class="b">画像説明</div>
<br class="kuhaku">
</div>
brにスタイルを適用するのはやめましょう。
<div class="a">画像</div>
<div class="b">画像説明</div>
この2つはフロートで並べていますか?
あと、divはいらないてす。img自体にスタイルを適用する方が良いです。
No.1
- 回答日時:
1の方は控えるようにして下さい。
HTML上には、レイアウトに関わることは書かない方が良いです。
レイアウトは全てCSSで書くようにしましょう。
2の方も同じです。あまり良くないです。
CSSでやるには、クリアしたいボックスに指定して下さい。
ちなみに、CSSをHTML上に書かないで外部CSSでやりましょう。
ganmo717さんお返事ありがとうございます。
HTML上には、レイアウトに関わることは書かない方が良いです。
レイアウトは全てCSSで書くようにしましょう>
そうでしたんですね。とても勉強になりました。
先ほど早速CSSの方に書いてみした。
このようにしてみました。
CSSに
クラスwaku,a,bは他省略しております。
.kuhaku{
clear: both;
}
XHTMLに
<div class="waku">
<div class="a">画像</div>
<div class="b">画像説明</div>
<br class="kuhaku">
</div>
としてみました。
これでどうでしょうね?もしご伝授していただけるならお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
背景を四隅に固定する
-
クリックするたびに違う文を表示
-
スタイルシート(CSS)で、高さ...
-
YES or NO形式で進んで行く、タ...
-
2つのDIVを中央と右に横並びに...
-
ポップアップ中に動くカウント...
-
【CSS】floatで左右に並べた...
-
離れた場所にマウスオーバーで...
-
CSS のみのタブ切り替えについて
-
ホームページのsidebar とconte...
-
オンマウス&スクロール
-
Webサイト作成 プログレスバー ...
-
javascriptテキストBOX色を元に...
-
複数画像のランダム複数表示(...
-
jspでcssが読み込めない
-
MAX関数を使ってからLEFT JOIN...
-
JSPでの画像ファイル表示
-
c++std::string型をTCHARに変換...
-
jQueryでクリックされた要素のi...
-
ホームページ作成について(HTML)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSS <div>の入れ子が反映さ...
-
Ctrl+F(検索)の窓を出したいの...
-
離れた場所にマウスオーバーで...
-
スタイルシートで画面を上下に...
-
フッター上部に謎の隙間
-
スライダーの枠に動画を収める...
-
【CSS】floatで左右に並べた...
-
リンクで違うページの指定箇所...
-
【html5】canvasでの文字の形の...
-
CSSで背景を下までのばすには?
-
Flickity で画像にリンクを貼る...
-
スクロール可能なチェックボックス
-
文字をクリックしたら別の文字...
-
文字を固定したいのですが…
-
[CSS] 常にフッターは下部に表...
-
IE6 で余分な border が表示さ...
-
スタイルシートで位置固定する...
-
枠がスクロールさせると消える
-
IEだけfloatがずれてしまう
-
clear: bothの事で質問です。
おすすめ情報