cssとhtmlで2カラムのレイアウトのウェブページを作っています。
左のカラムがナヴィゲーションメニューになっています。
フッターにborderを設定しているのですが、borderの上のラインが消えてしまうことがあります。
htmlはこんな感じです。
<div id="contents">
</div>
<div id="side"><!--左メニューここから-->
<ul id="menu">
<li>・・・</li>
<li>・・・</li>
<li>・・・</li>
</ul>
</div><!--左メニューここまで-->
<div id= "footer" ><!--フッターここから-->
Copyright・・・
</div><!--フッターここまで-->
実験してみたところ、左メニューの</li>の後に文字なり画像なりを加えるとボーダーは正常に現れ、
</li>で終わってしまうと、ボーダーが消えてしまうようです。
フッターに背景色をつけてみたところ、本来のフッターの領域からはみだして背景色がついていました。
やはり、</li>の後になんらかの文字を入れると、適正な位置に背景色がつくのです。
なぜでしょうか。
No.2ベストアンサー
- 回答日時:
質問者様のコンテンツのDOCTYPE等が不明なのでとりあえずHTML4.01 StrictのサンプルHTMLを作って検証してみたのですが、その限りではIE6、Firefoxいずれも下記の様な症状は見られないのですが…?
※XML宣言付XHTML1.1のサンプルでも同じでした。
> フッターにborderを設定しているのですが、borderの上のラインが消えてしまう
> 左メニューの</li>の後に文字なり画像なりを加えるとボーダーは正常に現れ、</li>で終わってしまうと、ボーダーが消えてしまう
> フッターに背景色をつけてみたところ、本来のフッターの領域からはみだして背景色がついて
※ちなみに、ulの直接の子要素として認められているのはliのみですので「</li>の後に文字なり画像なりを加え」る事はNGです。”</ul>の後”なら問題ないですが。
なので、現段階では適切な回答ができないのですが、提供されたCSSを見る限りでは幾つか「?」なスタイル設定が見受けられます。
(1)#side、#footerで"padding: 10 0 0 0;"、"padding: 10;"、という指定をされていますが、paddingの値は"em"や"px"等の単位識別子のついた数値で指定しないと無効になります。他の箇所で"margin: 10px 0 0 0;"と指定しているという事はおそらくpaddingに対しても"10px"という値を与えたかったのではないかと思いますが、現状では単位識別子が無い為全て無効(つまり余白は0)の状態です。
(2)#sideの子要素はul#menuだけですよね?であれば、このul#menuに対して"width: auto;"や"position: relative;"というプロパティが設定されている意味が不明です。ulはブロック要素ですので初期値で(この場合であれば)親要素#sideの幅一杯でレンダリングされますし、#sideに他の子要素がないのにpositionプロパティを使う必然性も見受けられません。
(3)bodyの直下に#contents(幅600px)と#side(幅200px)というそれぞれ左/右にフロートするコラム組のボックスが来ていますが、これだとウィンドウサイズを縮めて実質のレンダリング領域が600px+200px=800pxより狭くなった場合、#contentsの下に#sideが落ちて回り込む(つまり2コラムではなくなる)事になりますが、想定済みの事でしょうか?
(4)ul#menu liが"float: left;"になっていますが、この意図は?実際に組み込まれるデータの内容がわからないので断定はしませんが、通常この様な左右2コラムで左がメニュー領域、というレイアウトだと、左のメニューのリストは通常「縦並び」になるパターンが多いと思います。が、ここではリストアイテムを収めるliが左にフロートしている為にちょっと奇妙なレイアウト(<li>~</li>内のデータ量に応じてレンダリング領域が変わりでこぼこに)になってしまっているのですが。仮に、この<li>~</li>の中の要素が幅200pxの画像データだったりすると一見気付かないかもしれませんが…
このメニューのリストはアイテム毎に「縦並び」ではないのですか?
(5)ul#menuの子要素のliが(4)で言及した様に「浮いて」しまっているので、親要素であるul#menuはその高さを認識できず、実質のul#menuの高さは0になってしまっており、子要素liは親要素を大きくはみ出す(ぶら下がる)状態になっています。これはulにheightプロパティで高さを与えるなり所謂clearfix等の小技で親要素内でフロート状態を解除する様な指定をしないと解消されません。ul#menuに一時的に背景色を塗ったりボーダーで囲ってチェックすると現在のul#menuとliの位置関係の状態が一目瞭然になります。
※ただしIE6では仕様に準じない解釈をするが為に子要素liがフロートしていても親要素ul#menuはその高さを認識して自動的にレンダリング領域を伸ばしてくれています。が、これはあくまでIEの独自解釈であり、正しい結果ではありません。
質問者様と同様の状態が再現されないので(解決するに一番確実なのは実際のコンテンツを参照させて頂く事なのですが…)納得の行く回答が差し上げられなくて申し訳ないのですが、とりあえず上記(1)~(5)について再度見直されて見てはいかがでしょう。以下は、それぞれの対処に関するアドバイスです。
(1)pxを付けて指定
(2)"width: auto;"と"position: relative;"は不要
(3)そういう仕様で良いならそのままで。想定外だったのなら、親要素で幅800px以上を確保。
(4)「縦並び」にしたいのであれば"float: left;"は削除。単なる「横並び」ならば"display: inline;"でもいけます。
(5)もし(4)で"float: left;"の必要がなくなったのであれば対処は不要。(4)に"float: left;"の必然性があるなら(5)で触れた方法で親要素ul#menuに高さを認識させる(ただし高さが成り行きにしかできないレイアウトであれば方法は限られるので注意。)
この回答への補足
abril様
本当に詳しく解説してくださってありがとうございます!
学校もいかず、本も読まず、色々なサイトやテンプレートを参考にcssを作っているもので、実は意味が分からず貼り付けているものがいっぱいあります。
ご指摘していただいた箇所、とっても為になりました。ありがとうございます。
おっしゃる通り、たて並びのリストで、<li>の後は画像です。
> 左メニューの</li>の後に文字なり画像なりを加えるとボーダーは正常に現れ、</li>で終わってしまうと、ボーダーが消えてしまう
と書きましたが、</li>ではなくて、</ul>の間違いでした。
すみません。
ご指摘の箇所のcssを修正してみました。
でも、残念ながらfooterの領域がどうもおかしいみたいで、sideやcontentsの領域に入り込んでいるようです。(IE6でのみ)
htmlをよーくみてみましたら、
#contents 中に</div>が余分にあるのを発見しました。
初歩的なミスで、お恥ずかしい限りです。
cssがかなり怪しいことが分かりましたので、本を買って、ひとつひとつどういう意味があるのか、よく見てみようと思います。
ありがとうございました。
No.1
- 回答日時:
cssも見せてもらえませんか?
あと症状が出るのはどのブラウザでしょうか。
この回答への補足
metametamuさん、ありがとうございます!
症状がでるのは、IE6です。firefoxでは大丈夫でした。
CSSはこんな感じです。
#contents{
margin:10px 0 0 0 ; padding:0 ;
width : 600px ;
float : right ;
text-align:left;
}
#side{
margin:0 ; padding:10 0 0 0 ;
width:200px;
float : left;
}
#footer{
margin:10px 0 0 0; padding:10 ;
clear : both ;
border-top:3px #4094CF solid;
}
ul#menu
{
margin:0;
padding:0;
list-style-type:none;
width:auto;
position:relative;
}
ul#menu li
{
float:left;
margin:0;
padding:0;
}
ul#menu li a
{
float:left;
margin:0;
padding:0;
}
こんな感じです。
自分でネットで調べながらコーディングしているもので、
困っております。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html/cssの、navを2段にする...
-
htmlの<ol>タグで、数字などを...
-
リストの数字のフォントサイズ...
-
list-style-type部分だけ大きく...
-
リストマーカーをボックス内に...
-
ulタグやliタグの中でbrタグ...
-
jQuery-もっと見るボタンをスマ...
-
ulとliで囲った文字の一部を変...
-
liタグの中に<p>タグやら<dl>を...
-
header部分とnaviの位置の調整...
-
【CSS】メニュー上部に固定させ...
-
CSS li float 2列組み
-
HTMLで組織図を作成する方法
-
複数行にまたがる括弧を表示し...
-
テーブル内のプルダウンの下に...
-
スマホの実機でレイアウトが崩...
-
横並びのリストで左端がはみ出る
-
<table>の高さ固定。情報増加時...
-
html <ul></ul>の並びで一行空...
-
html <li>の中の文字一部に色を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストマーカーをボックス内に...
-
ulタグやliタグの中でbrタグ...
-
liタグの中に<p>タグやら<dl>を...
-
html/cssの、navを2段にする...
-
リストの数字のフォントサイズ...
-
<ul>~</ul>が二つ続くと間に改...
-
HTMLで組織図を作成する方法
-
<ul><li></li></ul>にするメリ...
-
レスポンシブWebデザインでリン...
-
番号付きリスト(<Ol><Li>・・...
-
<table>の高さ固定。情報増加時...
-
ol要素の番号とリスト項目の離...
-
htmlの<ol>タグで、数字などを...
-
html <ul></ul>の並びで一行空...
-
divタグ内のコンテンツが重なっ...
-
ulとliで囲った文字の一部を変...
-
HTML5のfooterに見出しを付けて...
-
文法チェックの<A>と</A>の間が...
-
jQuery-もっと見るボタンをスマ...
-
テーブル内のプルダウンの下に...
おすすめ情報