• ベストアンサー

cssでボックス内にテーブルのような要素を・・・

abrilの回答

  • abril
  • ベストアンサー率69% (388/560)
回答No.4

ANo.2-3です。補足及びURLの内容を拝見しました。 色々試行錯誤をされた様ですが、とりあえず私のサンプルをベースにされたというサンプル3のみ、検証させて頂きます。 (1) > <dt><h6>セラピーカード・リーディング</h6></dt> 文法違反がありますね。dtの子要素にh6(ブロック要素)は持てません。また、論理的(意味的)に見ても、dtというのは定義リストの「テーマ」部分を示すものであり、これ自体がいわば後に続くdd(定義リストの「説明」部分)の見出しの様な役割をしているので、ここに更に「見出し」の意味を持つh6が入ってはおかしいです。 おそらく、現在h6に与えられているのと同じ見栄えにしたくてh6を入れてしまったのだと思いますが、であればこの場合は、ここのdtのスタイル自体にh6と同じ見栄えになる様に追加してやればいいだけです。 質問者様のCSS内でのh6のスタイルを追って行くと(…継承が結構入り組んでますね)、最終的にこの箇所で適用されるスタイルとは: dt { clear: both; margin: 0; padding: 0 15px 15px 15px; line-height: 1; background: url(img/h_line.gif) bottom left no-repeat; font-family: Verdana,"Hiragino Maru Gothic Pro",Osaka,"メイリオ",Meiryo,"MS Pゴシック",sans-serif; font-size: 100%; color: #9e4242; } となります。が、この中からせっかくの角丸背景ボックスのスタイルを崩してしまう様な指定は取り除いておかねばなりません。 clear、margin、paddingなどについては本来この定義リストで予定しているスタイルの方を優先しなければならいので、残りはフォント・色・背景画像という事になります。ただし、背景画像については既にこのdtには角丸ボックスの上部の画像を割り当ててしまっているので、二重に指定する事はできません。その為に、このh_line.gifという見出しの下に引く飾り罫の様な画像を、どこかbackgroundプロパティがまだ指定されておらず且つ見栄えをそれらしくできる要素に(dtの代わりに)適用してやる工夫が出てきます。それはサンプルCSS内で補足します。 それから、この飾り罫h_line.gifの長さは、480pxだとボックスの実際の描画領域の大きさ一杯なので、見かけ上の描画領域(角丸ボックス画像の内側、480px-左右の余白15px×2=450px)をはみ出してしまいますので、これは左右を短く450pxにした別の飾り罫画像を用意するべきでしょう。仮にそれを、h_line2.gifとしました。 (2) > 画像位置を記述した数値を「-10px」にしています。左に寄せたかったからです。これは邪道ですか? 必要に応じてleftプロパティなどにマイナス値を与える事はありますのでその事自体は邪道ではありませんが、今回の場合「画像の位置を0にしているにも関わらず左に余白が多くとられている」様に見えたのは、CSS内で先立つ指定に: img { margin: 0 0 0 30px; vertical-align:bottom; } …という、”imgでマークアップした部分全部に対するスタイル指定”がされてしまっており、そのままではこの定義リスト内の画像にもこのスタイルが適用されてしまい、常に左からの余白が30px多くなってしまう為です。ここではこの値をリセットしてやる事が必要です。 (3) 実際のご希望のレイアウトを見ると、テーマ(セミコール見出し)「セラピーカード・リーディング」はレイアウト上も一番上に来て、画像や説明文はその下に続く…という事でしたから、コーディングの順番=レイアウトの順番、とできるので、ANo.2でのサンプルの様にdd.photoの位置をabsoltueで(コーディングの順番上は先になる)dtより先に持ってくる必要はなくなります。 また、ANo.2でのサンプルの様にスタイルの違うddを2つ持つ必要もなくなりましたので、ddのclassセレクタも不要になります。 駆け足でざっと説明しましたが、以上の点などを踏まえて改良したものが下記になります。 ---------------------------------------------------------------------- 【HTML】 ---------------------------------------------------------------------- (省略) <h3>サンプル3 改良版</h3> <div class="hoge_parent"> <dl class="hoge_child"> <dt>セラピーカード・リーディング</dt> <dd> <img src="img/card_11.gif" width="100" height="114" border="0" alt="セラピーカード" /> <p>ビジョン心理学の第一人者チャック・スペザーノ博士による<strong>セルフセラピーカード</strong>をリーディング。</p> <p>潜在意識が引き寄せるカードの言葉に「怖いくらい当たる!」「カードに見透かされているようです」と大反響を呼んでいます。</p> </dd> </dl> </div> ※XHTMLではbは非推奨、「強調」するならstrongやemが妥当です。 ---------------------------------------------------------------------- 【CSS】 ---------------------------------------------------------------------- (省略) div.hoge_parent { width: 480px; margin: 15px 35px; padding-bottom: 15px; background: url(img/box_bottom.gif) no-repeat left bottom; } dl.hoge_child, dl.hoge_child dt, dl.hoge_child dd { margin: 0; padding: 0; line-height: 1;※←追加。任意で調整を } dl.hoge_child { width: 480px; min-height: 150px; _height: 150px; background: url(img/box_side.gif) repeat-y; } dl.hoge_child dt { position: relative;※←重ね合わせ(z-index)を併用する為に指定 padding: 15px 15px 0 15px; background: url(img/box_top.gif) no-repeat left top; border-bottom: 0; font-family: Verdana,"Hiragino Maru Gothic Pro",Osaka,"メイリオ",Meiryo,"MS Pゴシック",sans-serif; font-size: 100%; font-weight: bold; color: #9e4242; z-index: 1;※←重ね合わせの順番はこちらが上(ブラウザ側で文字サイズを変更した時などに背景画像h_line2.gifに隠れてしまわない様に) } dl.hoge_child dd { position: relative;※←重ね合わせ(z-index)を併用する為に指定 zoom: 100%;※←clearfix用の指定 margin: -10px 15px 0 15px;※←上部マージンがマイナス値になっているのは、飾り罫h_line2.gifとdtのテキスト「セラピーカード・リーディング」の間を詰める為 padding-top: 30px;※←dd内のテキストが重ならない様に飾り罫h_line2.gifの高さ分の余白をとる background: url(img/h_line2.gif) top left no-repeat;※←飾り罫h_line2.gif z-index: 0;※←重ね合わせの順番はこちらが下(背景画像h_line2.gifの上に文字が被さる) } dl.hoge_child dd:after {※←clearfix用の指定(子要素imgをフロートさせたので) height: 0; visibility: hidden; content: ""; display: block; clear: left; } dl.hoge_child dd p {※←テキスト部分は子要素pでマークアップ margin: 0 0 0 120px;※←画像の幅+余白分、左からのマージンを設定 line-height: 1.4;※←任意で調整を } dl.hoge_child dd img { float: left; margin: 0;※←説明の(2)を参照、ここでマージンを0にリセット } (省略) ---------------------------------------------------------------------- いかがでしょうか?不具合などありましたらおって補足して下さい。

kaorin_m
質問者

補足

丁寧な回答、本当にありがとうございます。 ご指摘を受けた500px幅の飾り罫を450pxのものに作り変えました。 こちらではWindowsでのIE6.0でしか確認できないのですが 今回は見出しの位置がずれていて、見出し用の飾り罫画像が 反映されません。。。 http://homepage3.nifty.com/kimura/menu/menu.html 目標にしたい画像のURLもページに貼り付けました。 何度も本当にお手数かけます。 お時間の都合のつくときで結構ですので、よろしくお願いします。

関連するQ&A

  • 角丸テーブルのCSS化?

    既存のテーブルレイアウトのサイトを、 CSSレイアウトに変更しようと思っています。 大体は大丈夫なのですが、問題は角丸テーブル。 縦横自由伸張の(影付き)角丸テーブルなので、 一番単純な部分でも9個のtdがある状態です。 これはどういうふうにしたら良いでしょうか。 9個のDIVというのは複雑すぎますし… 何か良い案があればアドバイスをお願いします。

    • ベストアンサー
    • HTML
  • cssで凝った角丸ボックスを作りたい。

    以下の条件を満たしたボックスをスタイルシートで作りたいのです。 ●ほぼ全てのブラウザに対応させたい。  ・化石のようなブラウザは結構ですが、   IE、FireFox、ネスケ、Operaには   崩れる事なく表示できるようにしたいです。 ●tableタグを使用したくない。  ・tableを使用せずにこのボックスを実現したいのです。 ●幅や高さは固定ではなく%で指定したい。  ・ブラウザのウィンドウサイズによって変化させたいのです。 ●角を丸く、その外側は透過させたい。  ・(bodyの)バックグラウンドカラーが凝っていて、%で指定したい為、   丸くさせた角の外側を透過させる必要があります。   参照1はかなり近いイメージなのですが、   角丸の外側が透過していません。(bodyのカラーと同じ色にしている)   ちなみにこれを透過させると上下のバックグラウンドカラーや   左右の縦にリピートしているバックグラウンドイメージが見えてしまいます。   (参照1)http://www.sovavsiti.cz/css/corners.html ●左から右へとグラデーションをかけたい。  ・希望しているボックスがグラデーションの為、   参照2の黄色の縦線のように太くしたボーダーではできない。   (参照2)http://phrogz.net/CSS/roundcorner.html ●影を付けたい。  ・右下に影を付けたいです。ちなみに角丸・影などの画像は自分で作成できます。 ●画像はcssで表示させたい。  ・角丸やグラデーションなどの画像はhtmlにはimgタグを記述せず、   cssでバックグラウンドカラーなどで表示させたいと思っています。  ※これは変更・妥協可。 ●ボックスの中には文字などが入ります。 調べても考えても糸口が見つかりません。 もしご存知でしたら是非教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • 表をcssでデザインする場合

    css初心者です。宜しくお願いします。 テーブルの各セル幅のサイズを指定してセルの背景やセル内の文字をcssで装飾したいのですが、こういう場合、セル幅はhtmlタグで指定しておくべきなのでしょうか? またセル内に余白を設けたい場合はhtmlタグとcssのどちらで指定すればいいのでしょうか? cssが効かないブラウザで見た時のことを考えると幅サイズや余白をhtmlタグで指定した方がセルがくっつかず見やすいのかな~?と思ったのですが。 アホな質問でしたらすみません。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • テーブル幅が固定できない

    cssに「table-layout: fixed;」を記載してテーブルの幅が固定になるように設定しています。 設定していますが、ブラウザの幅を狭めると テスト1|テスト2|テスト3 と表示されていたものが テスト1 テスト2 テスト3 と、レイアウトが崩れてしまいます。 <table>、<tr>、<td>タグにつけてみましたが、全て崩れてしまいます。 幅や高さ等も指定していますが、何かが足りないのでしょうか。

    • ベストアンサー
    • CSS
  • CSS&HTML

    はじめまして、こんばんは ご質問です。 今htmlとCSSを使いHPを作成いたしています。 二段コラムの雛型にあてはめています。 メインコラムに ボックスを指定いたしたいのですが 上手く作成できません。<div id=main> </div>の中にタグは入れられますか?   mainはCSS HTML記述が終わっています。 幅 200 高さ100ぐらいのBOXボーダーラインで囲み 作成いたしたいのですがどうすれば出来ますか ボックスのタイトルをH3にしたいのですが CSSHTMLどう記述すれば いいのでしょうか ご指導ください 私がやりますとレイアウトが崩れます。

  • CSSでのレイアウト

    私の今作っているHPはテーブルでレイアウトしているのですが、 あるところで『テーブルでレイアウトするのはお勧めできない。』と書いてありました。 よく読むと『テーブルでレイアウトするよりCSSでレイアウトする方がよい』ということでした。 具体的にCSSでテーブルのようにレイアウトするとはどうすればいいのでしょうか。 また、テーブルでのレイアウトの利点、CSSでのレイアウトの利点はどんなところでしょうか。 教えてください。お願いします。

    • ベストアンサー
    • HTML
  • CSSレイアウトってなぜこんなに難しいのか?

    個人事業で、WEBデザインの仕事をしています。 恥ずかしいですが、ずーっと、テーブルレイアウトでのみHP作成してきました。 文字を整えたり、種類をまとめたりだけ、CSSを使ってました。 先日初めて、クライアントから「そろそろテーブルレイアウトはやめてくれ」と、 ダメだしを食らいました。 独学でDreamweaver MX 2004を一から学んで、仕事やって来ましたが、 ちょっと恥ずかしい質問ですが、 CSSレイアウトってなぜ、こんなに難しいのでしょうか?? みなさん、テーブルレイアウトと比べて異常に難しく感じませんか? 今の調子ではHP作成の仕事が請けられなくなっています。(涙) 例えば、テーブルレイアウトって、自由にドキュメントで確認しながらデザインできますよね。 でも、CSSレイアウトって、コードで全部書き出しますので、 ちょっとサイズや項目や要素を変更するだけでも、どのdiv?、どのクラス?のタグにそれを指定したかとか、 複雑になり解らなくなってしまい、ちょっと変更するだけでも凄い時間がかかってしまいます。 ■もしかして私、CSSレイアウトの学び方、作り方を間違ってるのでしょうか? ■今まで2~3冊位、Dreamweaverの本で、CSSレイアウトを勉強してますが、  いっこうに進歩しません。(ここに本の題名書き出すとマズイですよね?) ★CSSレイアウトが解り易く学べる、勉強本を教えて頂けますでしょうか。 ■もしかして、DreamweaverでCSSレイアウトをするから難しいのでしょうか?  HPビルダーとかなら、もっと簡単に出来るのでしょうか? ■今、私ができるCSSレイアウトの限界は、一番大まかな囲いの、 #header #side #main #footerを、#contentの中に入れて、 その中の各々の要素は、今までとおり、テーブルでレイアウトする。 (メニューや、商品スペック、写真並べなども、テーブルで。) それが精一杯ですが、これで通用するのでしょうか? HPデザイナーとして、恥ずかしい質問ですが、 ご教授どうぞ宜しくお願い致します。

  • CSSレイアウトについて

    今まで参考書を見ながら参考書どおりにHPを作っていましたが、 それでは自分どおりのHPが作ることができないと思い、 タグ辞典などを見ながら自分でHP作成を行うことにしたのですが、 CSSにて5個のボックスを作成して5個それぞれで 色分けしたあとにpositionにて位置を指定しましたが うまくいきません。 自分が考えているレイアウトは 1個目のボックスはタイトルで一番上にあり 2個目のボックスは左メニューで左側にあります。 3個目のボックスはメインスペースで中央にあります。 4個目のボックスは右メニューで右側にあります。 5個目のボックスはコピーライトで一番下にあります。 どなたか解決できる方のご回答をお待ちしております。 またこの場にて簡単なタグを記載していただければ幸いです。

    • ベストアンサー
    • HTML
  • CSSで角丸テーブル

    CSSでDIV要素を使って入れ子し、角の丸いテーブルを作っているのですが、なぜか誤差が出てしまいます。 CSSのソースは次のようなものです。 table(2).gifは角丸テーブルの画像です 画像サイズ:横440px 縦11px .box-center-start { width: 440px; background: url(image/table.gif); background-repeat: no-repeat; } .box-center { width: 440px; background-color: white; margin: 20px 10px 20px 8px; float: left; } .box-center2 { width: 440px; background-color: white; padding: 0px 10px 10px 10px; border-right: 1px solid gray; border-bottom: 1px dashed gray; border-left: 1px solid gray; } .box-center3 { width: 440px; background-color: white; padding: 10px 10px 0px 10px; border-right: 1px solid gray; border-left: 1px solid gray; } .box-center-end { width: 440px; background: url(image/table2.gif); background-repeat: no-repeat; } このように記述し、HTMLに <DIV class="box-center"> <DIV class="box-center-start"></DIV> <DIV class="box-center2"> ~内容 </DIV> <DIV class="box-center3"> ~内容 </DIV> <DIV class="box-center-end"></DIV> と打ってもなぜか綺麗に表示されません。 クラス「box-center-start(end)」の下に、少し余白が入ってしまうのです。(10pxほどの) 何方か助言お願いしますm( _ _ )m

  • このテーブルをCSSで書くとどうなりますか?

    画像を参照願えますでしょうか。 左側100pxの右側は400pxで合計幅500pxあります。 (右側1行左側3行です。) これをテーブルレイアウトではなく、divとcssで書くとどんなhtmlになりますか? 現在段組を色々やってますが、自問自答してもこのパターンだけが解決できないので・・・ 同じようにHTMLに興味ある方や詳しい方がいらっしゃいましたらご教授願います。 お答えの際にはHTMLソースを希望します。

    • ベストアンサー
    • HTML