プロが教えるわが家の防犯対策術!

CSSで2カラム左メニューレイアウトのサイトを作成しております。

レイアウトはできたのですが、
ページ内にいくつかdivでボーダーのないボックスをつくり
写真をいれたり文章をいれたりします。
1ページのCSSレイアウトしたコンテンツ部分のdivの中に
5つほどdivが入れ子ではいる予定です。

インターネットでdivの多用について調べると
ださいだの、わかってないだと書いてあります。

でもdivを多用しなければ、
例えば写真の横にテキストを配置したり、
よこにイメージを配置したいときに
テーブルやHTMLタグをつかわないといけないので、
余計ソースが汚くなるんではないでしょうか?

私は、CSSを本格的に勉強し始めてほとんど初心者ですので、
詳しいことがわかりませんので、もしご存知の方おられましたらご意見お待ちしております。

A 回答 (11件中1~10件)

うわー本当に自分しつこすぎてすみません!


No.11の訂正です。
重大な間違いを犯していました。

.clearに
float:clear;
と書いていますがとんでもない大嘘です。
正しくは
clear:both;
でした。

間抜けすぎる。。。
    • good
    • 1
この回答へのお礼

たびたびありがとうございます。

時間ができましたら参考にさせていただきます。

この度はありがとうございました。

お礼日時:2008/11/28 18:11

度々しつこくてすみません……!(汗)


さっきご紹介したCSSはかなりくどかったので
ちょっとスッキリさせました。

---test.css---
div,p{
  color  :white;
  padding  :1%;
  margin  :1%;
}

.div{
  border  :solid 1px black;
}

.left{
  float  :left;
  width  :45%;
  background-color  :red;
}
.right{
  float  :right;
  width  :45%;
  background-color  :blue;
}
.clear{
  float  :clear;
  background-color  :green;
}
---ここまで---
---test.html(訂正部分のみ)---
<div class="left div">
  <p class="left">
    文章A
  </p>
  <p class="right">
    文章B
  </p>
  <p class="clear">
    文章C
  </p>
</div>
<div class="right div">
  <p class="left">
    文章D
  </p>
  <p class="right">
    文章E
  </p>
  <p class="clear">
    文章F
  </p>
</div>
<p class="clear">
  文章G
</p>
---ここまで---

あんま変わってないですね!´д`;スミマセン
    • good
    • 0

No.8に追伸。



すみません、読み返していて気が付きました。
それで試したらって単位が書いてない……!!

50%で試したら、ということでした。
失礼いたしました。

あと余計なお世話かもしれませんが、
コメントがちょっと飛び飛びのようですね。
回答されている方には皆様に、「回答ありがとうございます」
の一言だけでも返信をした方が良いと思いますよ~。
これから付けるところでしたら大変失礼致しました。
    • good
    • 0

>よろしければどのようなCSSになるのか


そうですね。一例ということであれば

dtに入る画像の縦横が200px×150px固定での話ですが

dl {
width:500px; /* 特に必要はありませんが、テキストとの兼ね合いです */
}

dt {
float:left;
width:200px;
}

dd {
height:auto !important;
height:150px;
min-height:150px;
}

こんな感じでどうでしょうか?

将来的には

dt {
display:run-in;
margin-left:-200px;
}

dd {
padding-left:200px;
}

のようにもできると思います。
    • good
    • 0

私もCSSレイアウト初心者なので見苦しいコーディングですが。

。。
floatのサンプル書いてみました。
(自分も1度くらいしか使ったことなかったので
かなり手探りな内容です)

---test.css---
p{
 color :white;
}

.div_l{
 float :left;
 width :45%;
 background-color :yellow;
 border :solid 1px black;
 padding :1%;
 margin :1%;
}
.div_r{
 float :right;
 width :45%;
 background-color :orange;
 border :solid 1px black;
 padding :1%;
 margin :1%;
}

.left{
 float :left;
 width :45%;
 background-color :red;
 padding :1%;
 margin :1%;
}
.right{
 float :right;
 width :45%;
 background-color :blue;
 padding :1%;
 margin :1%;
}
.clear{
 float :clear;
 background-color :green;
 padding :1%;
 margin :1%;
}
---ここまで---
---test.html---
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
 <meta http-equiv="Content-Style-Type" content="text/css" />
 <link rel="stylesheet" type="text/css" href="test.css" />
 <title>
  サンプルソースコード
 </title>
</head>
<body>
 <h1>
  floatのテスト
 </h1>
 <div class="div_l">
  <p class="left">
   文章A
  </p>
  <p class="right">
   文章B
  </p>
  <p class="clear">
   文章C
  </p>
 </div>
 <div class="div_r">
  <p class="left">
   文章D
  </p>
  <p class="right">
   文章E
  </p>
  <p class="clear">
   文章F
  </p>
 </div>
</body>
</html>
---ここまで---

良かったらまるっとコピペでどんなもんか見てみて下さい。

ポイントは横幅ですかね。。。
↑で width:45%; とかしてますけど、
なぜかと言えばそれで試したら線の幅とか色んな要素で
トータル100%を超えてしまって、横並びにならんのです。
難しいですねえ。

うーーん、我ながら稚拙な^^;
    • good
    • 0

話はずれるかもしれませんが、レイアウトに関して言えば


画像とテキストを並べるのはfloatでできると思いますよ。
(イメージ同士も含む)

参考: http://www.tagindex.com/stylesheet/img/float.html

テーブルやHTMLでなんて力技を持ち出さなくても。^^;

意味合いを考えて適切なマークアップをして、
それから必要に応じて、となると思いますけどね。
    • good
    • 0
この回答へのお礼

私のサイトで先ほど悪戦苦闘していたのですが、
それはテキストとテキストを横に並べる。

イメージとしては

あいうえおかきくけこ|あいうえおかきくけこ
さしすせそたちつてと|さしすせそたちつてと

のような感じです。

これをCSSでやってみて、floatもつかったのですが、
親要素である枠の中に子要素のboxをdivに2つ横並びにつくってみたのですが、横並びになってくれなかったり、横並びになってもずれていたり大変でした(^^;)

で、結局divつかうよりタグの量が少なくなったテーブルでさっとつくっちゃいました。でも、テーブルの設定はCSSでやりました。

やっぱりCSSって難しいですね。。。
初心者の私は何が悪いのかわからなくてあきらめてしまうことも多いです。

ご回答ありがとうござます。

お礼日時:2008/11/28 14:02

tableを使わずに、と考えられているので、個々のHTMLタグの意味については調べられているでしょう。


divというのは、その部分をグループ化するという意味があります。

入れ子にするのは構いませんが、
グループ化したものを全く同じ組でさらにグループ化、グループ化、としていくのは、きれいな組み合わせだと思いますか?


もちろん、たまたま同じ組でグループ化してしまった、ということもあるかもしれません。
たとえばある季節、月ごとにグループ化すると、
<div class="春">
 <div class="3月">
  <img src="a.jpg">
  <img src="b.jpg">
 </div>
 <div class="4月">
  <img src="c.jpg">
  <img src="d.jpg">
 </div>
 <div class="5月">
  <img src="e.jpg">
 </div>
</div>
<div class="夏">
 <div class="6月">
  <img src="f.jpg">
 </div>
</div>

このとき夏と6月のグループがイコールになりますが、
これは「たまたま1枚しかなかった」という理由のためです。

今回されようとしている方法は「たまたま」ではないですよね。

<div class="夏">
 <div class="6月">
 <div class="何のグループ?">
 <div class="何のグループ?">
  <img src="f.jpg">
 </div>
 </div>
 </div>
 </div>
</div>

そういうのはダメだというのがHTML+CSSの考え方です。


> でもdivを多用しなければ、
> 例えば写真の横にテキストを配置したり、
> よこにイメージを配置したいときに
> テーブルやHTMLタグをつかわないといけないので、
> 余計ソースが汚くなるんではないでしょうか?
tableタグが汚いのではなく、デザインのためにタグが使われることが汚いのです。
<div>をデザインのためだけに使うのであれば、やってることは変わりません。
もちろん<span>でも<ul>でも同じです。


質問者さんだけが技術的にできないのか、誰がやってもできないのかは質問文からはわかりません。
本当に誰がやってもできないのであれば、それもやむを得ませんが、
デザインを目的としたタグを使わないのもきれいなHTML文書を作る第一歩だと思います。

初心者脱出を目指してがんばってください。
    • good
    • 0

以下はタグの意味を理解し、HTMLのマークアップをしっかりやった上での話です。


最適化の観点から言えば使わないほうが良いのはたしかだと思います。
ですが、今のhtmlとcssの規格ではどんなレイアウトでも100%div無しでできるわけではありません。
これは現状では仕方がないことです。
それでも、divを使わずに目的のレイアウトができるのであれば削ったほうがいいと思います。

仕事の場合はシステムや管理の面から必要なくてもわざとdivを使うこともあります。
もしも本格的にhtmlとcssをやろうとされているのであれば、個人サイトに関しては、限界までdivを削るためのcssの指定方法を模索していった方が後々で役に立つように思います。
(本当にしっかりコーディングされたhtmlの1つのdivを削るのはかなり大変なので)


ここからはHTMLのマークアップをしっかりやらない時の話です。
SAYKAさんと少しかぶるところだと思いますが
>写真の横にテキスト
に関しては時と場合によります。
以下は画像の横にテキストが来る場合のHTMLです。
それぞれ状況と意味が異なっています。

■サンプル1
<dl>
<dt><img src="#" alt="" /></dt>
<dd>説明のテキスト</dd>
</dl>

■サンプル2
<p><img src="#" alt="" /></p>
<p>普通のテキスト</p>

■サンプル3
<ul>
<li>
<p><img src="#" alt="" /></p>
<p>普通のテキスト</p>
</li>
<li>
<p><img src="#" alt="" /></p>
<p>普通のテキスト</p>
</li>
</ul>

サンプル1は画像とそれに関する説明が横に並ぶ場合、サンプル2は画像と普通のテキストの場合、サンプル3は画像と普通のテキストが規則的に複数存在し、まとめられる場合です。
それぞれの持つ意味によってHTMLの書き方が違いますよね?
タグが入れ子になればなるほど、divはわざわざ追加する必要がなくなってきます。
サンプル2で

<div>
<p><img src="#" alt="" /></p>
<p>普通のテキスト</p>
</div>

のようにdivを追加しなければ不可能なレイアウトがサンプル3ではdivを追加することなく実現が可能です。
ですが、これはどんなものでもわざと多くタグを使う型にはめれば良いという例ではありません。
あくまでちゃんとマークアップしない結果としてdivを多様することは避けるべきという例です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

dlタグをつかうところですが、
これはリストタグだと思いますが、
これをすると横に並びなくてたてに並びますよね。

これは別でCSSで設定すればよいということですか?
よろしければどのようなCSSになるのか教えていただきたいです。

お礼日時:2008/11/28 09:10

「ださいだの、わかってないだと書いてあります。


の言葉だけを捕らえて、非難したり、どうして・・というのは問題です。
 そのセリフが出る背景には
「tableで配置するのは間違っているから、divで配置する」という思考では、確かにHTML上は正しくても、おかしいんじゃないの・・・という意味で使われていると思います。

>でもdivを多用しなければ、例えば写真の横にテキストを配置したり、よこにイメージを配置したいときにテーブルやHTMLタグをつかわないといけないので、余計ソースが汚くなるんではないでしょうか?

 という考え方の根本は、やはりおかしいです。
 それならdivはひとつもいらないし、いってもひとつ。

 はじめにデザインありきで、内容が伴ってない。HTMLはそもそも文書構造を記述するもので、デザインのためではない。
 ただ、欠点もあって、XML/XHTMLと異なり、使える要素が限られているので、
<Picture><img src=*** /><message>****</message></Picture>なんてかけないのですから、無理からぬところはあります。

 たとえば、
<dl class="photoList main">
  <dt class="photo"><img src=""></dt>
  <dd>この写真は</dd>
  <dd>撮影日</dd>
  <dt class="photo"><img src=""></dt>
  <dd>この写真は***</dd>
  <dd>撮影日</dd>
</dl>
<dl class="photoList sub">
  <dt class="photo"><img src=""></dt>
  <dd>この写真は</dd>
  <dd>撮影日</dd>
  <dt class="photo"><img src=""></dt>
  <dd>この写真は***</dd>
  <dd>撮影日</dd>
</dl>
と書かれているHTMLにおいて、下のdl(定義リスト)をページの左端に200pxで表示し、それらは説明文は写真下に撮影条件はその下に小さな文字で、
 次のdlについては、中央に、適当な幅で表示し、説明を写真の右に、撮影条件を写真下に右寄せで・・なんて配置をしようとすると、子孫セレクタや兄弟セレクタ、属性セレクタを活用すると、divなんてひとつもいらないですよね。
  「divを多用するなというのは、divを使わなくて済むところにdivを使うな」という意味ですよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

テーブルレイアウトは否定されていますよね。

参考になりました。

お礼日時:2008/11/28 15:56

全然問題ないんじゃないかな


ただ、divがblock要素だって事を認識していないで沢山使っているというなら問題が有るね。
パーツとして配置するというなら通常はspanを用いる方が良いけれど、多分使い勝手はdivの方が上だろうね。

あと、画像の横にテキスト配置なんてそれこそinline要素の使い方。(区切り線が無いなら の話)


ソースの綺麗汚い以前に、目的の配置ができる事の方がまず重要。
(tableで画像を巧みに配置する古い技は見た目重視だったからに他ならない)
伝えるのが目的。その構築方法を整理するのは余裕があったらやれば良いんじゃないかな。
    • good
    • 1
この回答へのお礼

>あと、画像の横にテキスト配置なんてそれこそinline要素の使い方。(区切り線が無いなら の話)

これってインライン要素なんですか?spanとかのことですよね。


もしするとしたらどのようなタグになるんでしょうか。

お礼日時:2008/11/27 22:56

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