• ベストアンサー

CSSのボックスの背景色を交互に変えたい

CSSを使ったデザインで、ボックスを縦に並べたレイアウトをきっています。 (わかりやすい例で言うと、ポータルサイトによくあるお店一覧) 参考サイト:http://www.frontstyle.com/shopsearch/areaindex.php?mode=0&area=8 上記のサイトのように背景色を交互に変えていきたいのですが、 交互にCSSを変えていくと、削除したり、間に追加したりした時に不都合が生じます。 うまく、奇数はこの色、偶数はこの色みたいにできるやり方はあるのでしょうか? お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yama-tani
  • ベストアンサー率44% (13/29)
回答No.3

cssではないのですが、css3の普及をを待つ間、jQueryというJavaScriptのライブラリーを使う手もあります。cssのセレクターに表やリストの偶数行や奇数行を指定できるようになります。簡単な記述で、クロスブラウザでできますので、選択肢の1つにどうぞ。あっと、奇数・偶数は1からでなく0から始まるので普通の感覚とは逆となります。 少しのコードで実装可能な20のjQuery小技集 http://www.webcreatorbox.com/tech/jquery-tips20/ 5番目のサンプルです。trをliやdiv、pなどに変えることぐらいはわかりますよね? 「odd」と「even」で奇数行偶数行ですが、元の指定もあるので、かたっぽで済むかな。興味がわいたら、jQueryをひとかじりしてみてください。

peco33
質問者

お礼

ありがとうございます!! これは良さそうですね。 >>5番目のサンプルです。trをliやdiv、pなどに変えることぐらいはわかりますよね? trの中にpやdivを置くってことでしょうか? それとも別の事言ってます??すいません

その他の回答 (5)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.6

ですが、CSSだけでやろうとするとそれしかない。XSL(拡張スタイルシート)を使うと別だが・・

peco33
質問者

お礼

ありがとうございます。 CSSだけだと難しいんですね。;; No.3のおっしゃってたjQueryを使ったやり方が無難ですかね

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.5

ボックスだろうがなかろうが・・ <div class="ProductList"> <p>あ</p> <p>い</p> <p>う</p> <p>え</p> ・・・ </div> CSS div.ProductList p, div.ProductList p+p+p, div.ProductList p+p+p+p+p, div.ProductList p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p {background-color:skyblue;} div.ProductList p+p, div.ProductList p+p+p+p, div.ProductList p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p, div.ProductList p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p {background-color:pink;}

peco33
質問者

お礼

ありがとうございます。 このやり方だと、数がもっと多い場合であれば+pを増やしていかないといけないんですね? やはり、偶数はこれ、奇数はこれのほうがスマートな気がしますが、 どうなんでしょう?

  • Yama-tani
  • ベストアンサー率44% (13/29)
回答No.4

>trの中にpやdivを置くってことでしょうか? >それとも別の事言ってます??すいません すみません。忘れてください。 見本はtrに対応していますが、liなどでもできますよ。 だから、無理に表にしないでね、といいたかったのです。 かえって混乱させてしまいました。

peco33
質問者

お礼

ありがとうございます。 なんとなくわかりました。 つまり、親ボックスの中に子ボックスがある こういうカタチであれば、liでもpでdivでもいいということですね。 連続するボックスの奇数偶数ということですね 試してみたいと思います!!

回答No.2

現状ではプログラムを作って、奇数偶数を判断しながらclassなどを指定する必要があります。 参考サイトではPHPで作っていると思います。 CSS3に対応したブラウザであれば、以下の記述で可能です。 <style> tr{ background-color: red; } tr:nth-child(even) { background-color: blue; } </style> <table> <tbody> <tr><td>奇数</td></tr> <tr><td>偶数=even</td></tr> <tr><td>奇数</td></tr> <tr><td>偶数</td></tr> </tbody> </table> http://www.w3.org/TR/css3-selectors/#nth-child-pseudo

peco33
質問者

お礼

ありがとうございます!! 幅広い方への公開なので、と思いますが CSS3も選択肢に入れてみます。

  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.1

例のサイトは、 <TR BGCOLOR="#F3EFE6">を交互に入れているだけですね。 仰る通りCSSでも同じで、各classで指定するのが一般的ですが、 項目途中にでも1項目だけ増やしたりすると、 上下のどちらかのclassや指定を全部交互に毎回変更する必要がありますね。 また、 JSやPHPでループすればなんとかなるかもしれないけど、 わざわざプログラムを作ったり増やすのも面倒でしょうか・・・ じゃあ、シンプルに、 各項目の各高さを height: ○px; で固定する条件下で、 親ボックスに各色違いの背景画像を設置してリピートさせれば簡単かも。 1段目は別の色、 2段目は透過.GIFで背景色をそのまま表示(別色を付けてもOK) ※ この画像の高さは項目 ○px ×2倍の高さ。幅は適当に。 ※ 子要素自体にはCSSで色を付けない事。 このCSSは、 #親ボックス{ background: #背景色 url(背景画像.gif);} こうすれば、 各子要素の項目は、色指定やclass分けする必要すらなくなり、 1項目でも3項目でも途中に追加しても自動で色違いになるはずですが。

peco33
質問者

お礼

ありがとうございます!! 申し訳ございません、条件に付け忘れてしまいましたが、 ボックスの高さは固定ではないのです。 内容によっては大きくなるボックスもあれば、入れる内容が違ってちっちゃいボックスもあります。 その辺を考慮するとPHPまでいきますか。。^^;

関連するQ&A