display blockのレイアウト崩れ IEの原因は?

このQ&Aのポイント
  • display blockのレイアウトがIEで崩れる問題の原因となる要素について説明します。
  • 左のメニューのボタン部分が高さが圧縮され、表位置も左よりになる問題の解決方法について説明します。
  • IEでdisplay blockのレイアウトが崩れる原因と対策について解説します。
回答を見る
  • ベストアンサー

display blockのレイアウトが崩れます

IEでみると、左のメニューのボタン部分が 高さが圧縮され、表位置も左よりになってしまいます。 何故崩れるのか原因がわかりません。 よろしくお願いいたします。 ul#menu { float: left; width: 150px; height: 40px; list-style: none; color: #585262; background-color: #ffffff; } ul#menu li { display: block; margin: 0; padding: 0; font-size: small; line-height:0px; } ul#menu li span { display: block; font-size: x-small; } li#c01 a { background: url(../images/navi/c01.jpg) 7px 5px no-repeat; } li#c02 { background: url(../images/navi/c02.jpg) 7px 5px no-repeat; } li#c03 a { background: url(../images/navi/c03.jpg) 7px 5px no-repeat; } li#c04 a { background: url(../images/navi/c04.jpg) 7px 5px no-repeat; } li#c05 a { background: url(../images/navi/c05.jpg) 7px 5px no-repeat; } li#c06 a { background: url(../images/navi/c06.jpg) 7px 5px no-repeat; } li#c07 a { background: url(../images/navi/c07.jpg) 7px 5px no-repeat; } li#c08 a { background: url(../images/navi/c08.jpg) 7px 5px no-repeat; } li#c09 a { background: url(../images/navi/c09.jpg) 7px 5px no-repeat; } ul#menu li a { display: block; height: 40px; padding: 5px 7px 5px 66px; border-bottom: 1px dotted #ffffff; text-decoration: none; color: #aa8f78; border: solid 2.5px; border-color:#ebdbd7 pink pink #ebdbd7; background-color: #ffdce8; line-height:normal; } ul#menu li a:hover { color: #794c2c; background-color: #eee9e2; } ul#menu li#c02 { padding: 5px 7px 5px 66px; border-bottom: 1px dotted #ffffff; height: 40px; line-height:normal; } ul#menu li#c09 a { border-bottom: none; }

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

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

頂いた追加情報で再現して検証してみました。 少々起きている現象の表現にわかりにくい部分がありますので、Firefox等で表示させた時との差などを考察した上の回答です。もし、解釈違いがあるなら補足して下さい。 また、下記で「IEでは」と限定している現象については、このDOCTYPE宣言下のモードによるものです。モードが違えばまた解釈も違ってきますので、予めお断りしておきます。 「IEでみると、左のメニューのボタン部分が」 【1】 > 高さが圧縮され、 要は、メニューの各ボタンの背景画像として使用しているc01.jpg~c09.jpgの高さ35pxの全貌が表示されず、途中で切れた状態になってしまう、という状態の事でしょうか? ボタンの高さを決める為の、ul#menu li aに指定されている、"min-height: 40px;"ですが、このmin-heightプロパティがIEでは非対応となっています。min-heightプロパティは「要素の生成するボックスの最小の高さ(これ以上は低くしない設定)を設定」をする役目を担いますので、Firefox等のこのプロパティを実装しているブラウザ上では、この場合であればul#menu li aの内包する要素であるテキスト部分がどれほど微々たるボリュームであっても必ず40pxの高さのレンダリング領域を確保してくれます。その為、背景画像の高さ35pxよりは常に大きい高さとなり、結果、背景画像は全体が表示されます。 しかし、このプロパティに対応していないIE上では、ボタンの高さは内包する要素のfont-size、line-height、padding、marginといったものとテキストのボリュームだけに依存してしまう為、常に可変状態となってしまいます。現状の様に、少ないテキスト量ですと”相対的に”背景画像の高さ32pxよりもメニューのボタンの領域の方が小さくレンダリングされてしまうので、背景画像の下の方が切れて表示されてしまう事になります(あくまで「背景」として扱われている状態の画像には、高さや幅を指定する事はできませんので)。 この場合の回避策としては、逆にIEのheightプロパティのバグを利用した指定をhackなどで適用対象を振り分けてやる方法などがあります。本来、heightで高さを指定しまうと、内包する要素の高さが”相対的に”に超えてしまった場合の処理が必要になってきてしまう(溢れた部分を「はみ出して表示」させるのか、「表示しないで隠してしまう」のか、「スクロールバーを出して表示させる」のか)ものですで、min-heightとは使い方・使う局面が異なります。しかし、IEでは仮にheightプロパティで指定した高さを内包要素の方が上回ってしまったとしても、内包要素の領域に合わせて勝手に高さを伸ばしてレンダリングします。つまり、本来min-heightプロパティが行う様な解釈をするのです。 なので、IEだけに適用される様な指定の仕方で"height: 40px;"を追加してやります。実は、その為のCSS hackが既にこのCSSファイルには用意されています。一番下から2番目のこの部分です↓ /* Hides from IE-mac \*/ * html ul#menu li a, * html ul#menu li { height: 40px; line-height: 1.5; } /* End hide from IE-mac */ ここで指定されているプロパティは、記述の仕方のトリックにより、(Mac版除く)IEにのみ適用される、という状態になります(hackについては詳細を省きますので、ググるなどして調べて下さい)。ただし、これを見るとお気づきの様に、ここで既に"height: 40px;"と指定されているにも関わらず、IEでは高さが足りない状態で表示されていますよね。 これは、heightにpaddingが併用されている時のボックスモデルのレンダリング領域の解釈も、IEでは独自解釈が行われてしまっている為です。Firefox等の仕様に添った解釈をするブラウザでは、現状の様に、min-height: 40px;、padding: 5px 7px 5px 66px;、と指定されている場合、レンダリングする高さは40px(最少の高さ)+5px(上パディング)+5px(下パディング)となり、結果的に50px(以上)となります。しかし、IEでは上下パディングの値を高さ40pxの「中に含めて」しまう為、レンダリング領域が40pxにしかなっていないのです。なので、40pxに更に本来の上下パディング値の合計である10pxを足してやらねばなりません。従って、下記の様になります。 /* Hides from IE-mac \*/ * html ul#menu li a, * html ul#menu li { height: 50px;←修正 (省略) } /* End hide from IE-mac */ 【2】 > 表位置も左よりになってしまいます。 これも「表位置」というのがちょっと意味不明なお言葉ですが、親要素である<div id="all">~</div>の領域の左端のピンクのボーダーまでぴったり余白なくくっついてしまう、という状態の事でしょうか?もしそうであるなら、ul#menuの直近の親要素である#contentに指定してある左右marginのauto値が、これまたIEでは無効(=値が"0"と解釈される)になってしまう為です。 回避策の1つとして簡単なものに、逆にIEのバグを活かした"text-alin: center;"を親要素に追加してやる、という手があります。なんでそうなるのかという説明は省きますのでCSSの解説サイトなどをご覧になって把握されておく事をお奨めします。現状のCSSファイルのbodyに対する"text-alin: center;"の指定がまさにその意図で使われています。要は、このbodyと#allの関係への対応策と同じ事を、#allと#contentに対しても施してやる、という事です。 ただ、この回避策を施すと、"text-alin: center;"が子要素のインライン要素に全て継承されてテキストなどがセンタリングされてしまいますので、必ず必要なところで"text-align: left;"を指定して、本来の値(左寄せ)がインライン要素に適用される様に上書きしておく必要があります。 #all{ (省略) text-align: center;←追加 } #content { text-align: left;←追加 } おわかり頂けましたでしょうか? 長くなりましたが、「何故崩れるのか原因がわかりません。」との事でしたので、最低限の説明をさせて頂きました。 なお、蛇足ですが、現状ではIE以外は<div id="all">~</div>の領域から子要素がはみ出してしまう状態になっていますので、floatの解除についても対応しておいた方がよろしいかと存じます。

bijoux2008
質問者

補足

わかりやすい解説ありがとうございました。 レイアウトがどのように崩れるかは、ご想像の通りです。 説明していただいた通り変更してみたら、ちゃんと表示されました。 なんとお礼を申し上げてよいやら… ほんとうにありがとうございました。 floatの解除はhtml側のfloat要素の直後 に<br clear="all" />を入れるという方法でよいのでしょうか。 何度もすいません。

その他の回答 (2)

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

ANo.1-2です。 > floatの解除はhtml側のfloat要素の直後に<br clear="all" />を入れるという方法でよいのでしょうか。 それでもクリアされます。本件であれば、<div id="content">の閉じタグの直前に<br clear="all" />を挿入すればIE以外で起きているはみ出した状態は解消されます。ただ、brの本来の役目はインライン要素の途中で強制改行を入れる為のものですから、こういう使用法は(個人的には)あまりお奨めはしません。近年よく使用される手法として、所謂clearfixと呼ばれるtipsがあります。これは、フロートした子要素を抱える親要素の方に所定のスタイルを指定する事で、子要素のフロート状態をクリアさせるやり方です。「CSS clearfix」というキーワードででもググってみて下さい。いくらでもサンプルが得られます。

bijoux2008
質問者

お礼

とてもわかりやすい解説ありがとうございました。 clearfixで検索してやってみました。 おかげさまでなんとか形になってきました。 一人でいろいろと調べてもわからず、壁にぶち当たっていたので 非常に感謝しております。

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

肝心のHTMLソースがないので、どういうレイアウトをイメージされているのかが今一不鮮明ですが…想像できる範囲では、以下の様なマークアップなのかとは思います。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>サンプル</title> <link rel="stylesheet" href="css/hoge.css" type="text/css" media="all"> </head> <body> <ul id="menu"> <li id="c01"><a href="#"><span>c01</span></a></li> <li id="c02"><a href="#"><span>c02</span></a></li> <li id="c03"><a href="#"><span>c03</span></a></li> <li id="c04"><a href="#"><span>c04</span></a></li> <li id="c05"><a href="#"><span>c05</span></a></li> <li id="c06"><a href="#"><span>c06</span></a></li> <li id="c07"><a href="#"><span>c07</span></a></li> <li id="c08"><a href="#"><span>c08</span></a></li> </ul> </body> </html> CSSは質問者様のものをそのまま貼り付け(※各liの背景画像として指定されているイメージ・ファイルの縦横サイズが不明なので、背景画像がテキスト(リンク)に対してどの様に配置される事を期待しておられるかという部分はわかりかねますが)検証してみました。その結果は、IEやFirefoxを問わず実に奇妙なものになりますが…? > IEでみると、左のメニューのボタン部分が高さが圧縮され、表位置も左よりになってしまいます。 これどころではない、というか…。 実は検証する以前にCSSだけを見た段階から「?」な指定が見受けられました。 ■親要素であるul#menuの高さを"height: 40px;"としているにも関わらず、その子要素であるaの高さも"height: 40px;"としてしまっていますね。liは8つありますので、40px×8=320pxとなり、親要素の高さを思いっきりはみ出してしまっています。IE6ではその様な場合”本来の仕様に反して”親要素の高さも内包する子要素の高さまで伸びてしまいますが、Firefoxなど仕様に準じたレンダリングをするブラウザでは、ulの背景色である白は40pxの高さで表示は終わってしまいます。 ■liに"display: block;"という指定をされていますが、liの初期値は"display: block;"ですので、この時点でわざわざ指定する必要はありません。 ■ul#menu li、ul#menu li span、ul#menu li a、のfont-sizeやline-heightに関する指定を見ると、テキストリンクの表示のさせ方をどう意図されているのか疑問です。とりあえずテキスト部分を非表示にさせたいわけではなそうですが… 等々です。 さておき、より”質問者様と同じ現象を再現できる”検証をする為には、少なくとも以下の追加情報が必要かと思われます。 ・HTMLのソース(DOCTYPEも必須) ・背景画像の縦横サイズ ・<ul id="menu">~</ul>の親要素(少なくとも<body>は存在していますが、それ以外にもあるのであれば含めて)に対してCSSでスタイルを指定しているなら、その部分も。継承により、子要素の表示結果が変わってくる場合がありますので。

bijoux2008
質問者

補足

ありがとうございます。 htmlは以下のようになっています。 画像の縦横サイズは、縦35px 横42px です。 --------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><meta http-equiv="content-type" content="text/html;charset=shift_jis"> <meta name="generator" content=""> <title>ページ</title> <link rel="stylesheet" href="css/version4.css" type="text/css" /> <link rel="stylesheet" href="css/test.css" type="text/css" /> <link rel="stylesheet" href="css/import.css" type="text/css" media="screen,print" /> <style type="text/css"> a { text-decoration:none; } a:link { color: #ff6b8d; } a:visited { color: #9a90a0; } a:hover { color: #ffa1d7; } </style> </head> <body> <div id="all"> <div id="header"></div> <div id="content"> <div id="main"> <div id ="image"> <img src="images/c.jpg" border=0 width=620 height=480 align="center" alt="画像"></div><BR> </div> <ul id="menu"> <li id="c01"><a href="index.html">トップ</a></li> <li id="c02">A</li> <li id="c03"><a href="XXX">B</a></li> <li id="c04"><a href="XXX">C</a></li> <li id="c05"><a href="XXX">D</a></li> <li id="c06"><a href="XXX">E</a></li> <li id="c07"><a href="XXX">F</a></li> </ul> </div> <p id="footer"><img src="images/title.gif"alt="XXX" id="example1" /> XXXXXXX <span>XXXX</span> XXXXX</p> </div> </body> </html> height に関して、一部変更させていただきました。申し訳ありません。 --------------------------------------------- @charset "Shift_JIS"; body { text-align: center; color: #585262; background: url(../images/d.jpg); font-size: small; } body div { text-align: left; margin: 0 auto; } * { margin: 0; padding: 0; } #all{ border:solid 1px pink; background-color:#ffffff; width: 810px; margin-left:auto; margin-right:auto; } #header { height: 130px; color: #ffc8cf; background: #ffffff url(../images/back-header.jpg) no-repeat center; } #content { margin: 0 auto; width: 790px; } #main { float: right; width: 620px; margin: 0; font-size: small; } ul#menu { float: left; width: 150px; list-style: none; color: #585262; background-color: #ffffff; } ul#menu li { display: block; margin: 0; padding: 0; font-size: small; line-height:0px; } ul#menu li span { display: block; font-size: x-small; } li#c01 a { background: url(../images/navi/c01.jpg) 7px 5px no-repeat; } li#c02 { background: url(../images/navi/c02.jpg) 7px 5px no-repeat; } li#c03 a { background: url(../images/navi/c03.jpg) 7px 5px no-repeat; } li#c04 a { background: url(../images/navi/c04.jpg) 7px 5px no-repeat; } li#c05 a { background: url(../images/navi/c05.jpg) 7px 5px no-repeat; } li#c06 a { background: url(../images/navi/c06.jpg) 7px 5px no-repeat; } li#c07 a { background: url(../images/navi/c07.jpg) 7px 5px no-repeat; } li#c08 a { background: url(../images/navi/c08.jpg) 7px 5px no-repeat; } li#c09 a { background: url(../images/navi/c09.jpg) 7px 5px no-repeat; } ul#menu li a { display: block; min-height: 40px; padding: 5px 7px 5px 66px; border-bottom: 1px dotted #ffffff; text-decoration: none; color: #aa8f78; border: solid 2.5px; border-color:#ebdbd7 pink pink #ebdbd7; background-color: #ffdce8; line-height:normal; } ul#menu li a:hover { color: #794c2c; background-color: #eee9e2; } ul#menu li#c02 { padding: 5px 7px 5px 66px; border-bottom: 1px dotted #ffffff; min-height: 40px; line-height:normal; } ul#menu li#c09 a { border-bottom: none; } /* Hides from IE-mac \*/ * html ul#menu li a, * html ul#menu li { height: 40px; line-height: 1.5; } /* End hide from IE-mac */ .clearfix {display: inline-block;} /* Hides from IE-mac \*/ * html .clearfix {height: 1%;} .clearfix {display: block;} /* End hide from IE-mac */

関連するQ&A

  • ドロップダウンメニューについて質問です。

    横並びのナビゲーションに更にドロップダウンをつけたいのですがうまくいかないので質問させていただきます。 メニューはそれぞれバッググラウンドで使ってます。 横並びのナビげーションはできました。 ロールオーバー時の画像の入れ替えもできました。 コレクション部分のドロップダウンがうまくいきません。 ドロップダウンで3つでるようにしたいと思うのですが 現状のHTML&CSSを記載します。 よろしくお願いいたします。 html <div id="navi"> <ul> <li class="nav_03"> <ul class="sub"> <li class="nav_001"></li> <li class="nav_002"></li> <li class="nav_003"></li> </ul> </li> </ul> </div> CSS #navi { height: 10px; width: 650px; margin-top: 34px; margin-left: 154px; margin-bottom: 75px; } #navi li { float:left; list-style-type: none; } .nav_03 a { height: 10px; width: 54px; background-image: url(../images/navi/catalog.jpg); background-repeat:no-repeat; display:block; text-indent:-9999px; margin-right: 42px; } .nav_03 a:hover { height: 10px; width: 54px; background-image: url(../images/navi/catalog_r.jpg); background-repeat:no-repeat; display:block; text-indent:-9999px; margin-right: 42px; #navi ul.sub li { float: none; height: 10px; width: 54px; list-style-type: none; } #navi ul.sub li a { background: none; height: 10px; width: 54px; } #navi ul.sub .nav_001 li a:hover { background-image: url(../images/navi/tops_r.jpg); height: 10px; width: 54px; display: block; background-repeat: no-repeat; position: absolute; z-index: 10; } #navi ul.sub .nav_001 li a{ background-image: url(../images/navi/tops.jpg); height: 10px; width: 54px; display: block; background-repeat: no-repeat; } /*サブメニューを、カーソルが乗るまで非表示にしておく設定*/ ul .nav_04 li ul { display: none; } /*サブメニューを、カーソルが乗った時に表示する設定*/ #navi ul li:hover .sub .nav_001{ display: block; position: absolute; z-index: 100; background-image: url(../images/navi/tops.jpg); height: 10px; width: 54px; display: block; float:left; line-height: 180%; } #navi ul li:hover .sub .nav_002{ display: block; position: absolute; z-index: 100; background-image: url(../images/navi/bottoms.jpg); height: 10px; width: 54px; display: block; float:left; line-height: 180%; }}

  • 1枚画像で作るCSSのナビゲーション・ロールオーバーが上手く動作しません。

    はじめまして。初歩的な質問で非常に申し訳ないのですが 今日1日自力で頑張ってみたのですがどうしても解決できないので、ご教授いただけないかと思い書き込ませていただきました・・・・。 ナビゲーションメニューを作っているのですが、 1枚画像でロールオーバーという方法でやっています。 [やりたいこと] 「横978px 縦40pxの画像を使って 6つのメニューに分けて、ロールオーバーをしているようにみせる」 [うまくいかない事] ・横並びにしたいのに、なぜか画像が縦に6つ並んでしまっている状態。 ・最初の「home」以外が全くロールオーバーしてくれない・・・ どこかおかしなところがあれば教えてください・・ よろしくお願いいたします。 【HTML】 <div id="navigation"> <ul> <li id="bttop"><a href="#" title="Home">Home</a></li> <li id="btdai"><a href="#" title="menu1">menu1</a></li> <li id="btsyo"><a href="#" title="menu2">menu2</a></li> <li id="btweb"><a href="#" title="menu3">menu3</a></li> <li id="btmap"><a href="#" title="menu4">menu4</a></li> <li id="bttel"><a href="#" title="menu5">menu5</a></li> </ul> </div> 【CSS】 #navigation { position: absolute; width: 978px; } #navigation ul { width: 978px; height:40px; margin: 0; padding: 0; list-style: none; } #navigation li { margin: 0; padding: 0; width: 978px; height: 40px; text-indent: -9999px; } #navigation li a { width: 163px; height: 40px; text-decoration: none; display: block; float:left; } #navigation li#bttop { background: url(img/navi_bar.jpg) no-repeat 0px 0px; } #navigation li#btdai { background: url(img/navi_bar.jpg) no-repeat 163px 0px; } #navigation li#btsyo { background: url(img/navi_bar.jpg) no-repeat 326px 0px; } #navigation li#btweb { background: url(img/navi_bar.jpg) no-repeat 489px 0px; } #navigation li#btmap { background: url(img/navi_bar.jpg) no-repeat 652px 0px; } #navigation li#bttel { background: url(img/navi_bar.jpg) no-repeat 815px 0px; } /* マウスオーバー時の指定 ---------------------------------------------------- */ #navigation li#bttop a:hover { background: url(img/navi_bar.jpg) no-repeat 0px -40px; } #navigation li#btdai a:hover { background: url(img/navi_bar.jpg) no-repeat 163px -40px; } #navigation li#btsyo a:hover { background: url(img/navi_bar.jpg) no-repeat 326px -40px; } #navigation li#btweb a:hover { background: url(img/navi_bar.jpg) no-repeat 489px -40px; } #navigation li#btmap a:hover { background: url(img/navi_bar.jpg) no-repeat 652px -40px; } #navigation li#bttel a:hover { background: url(img/navi_bar.jpg) no-repeat 815px -40px; }

  • idかclassか どっちが良いでしょうか?

    A.htmlページ <div> <ul><li>A</li><li>B</li><li>C</li></ul> </div> B.htmlページ <div> <ul><li>A</li><li>B</li><li>C</li></ul> </div> の様に各ページが同じHTMLで、各ページで別画像にする場合、 どの様なCSSで書いていますか? また、理想ですか? 何故そうしますか? ページ数=各画像数がこれより多い場合や管理面も含めてご回答をお願いします。 ======================== パターン1 <div class="nav" id="nav1"> <ul><li>A</li><li>B</li><li>C</li></ul> </div> /* 共通CSS */ .nav{height:200px; width:600px; background:no-repeat 50% 50%;} #nav1{background-image:url(~A.jpg);}/* A.html用 */ #nav2{background-image:url(~B.jpg);}/* B.html用 */ #nav3{background-image:url(~C.jpg);}/* C.html用 */ パターン2-1 <div id="nav1"> <ul><li>A</li><li>B</li><li>C</li></ul> </div> /* 共通CSS */ #nav1,#nav2,#nav3 {height:200px; width:600px; background:no-repeat 50% 50%;} #nav1{background-image:url(~A.jpg);}/* A.html用 */ #nav2{background-image:url(~B.jpg);}/* B.html用 */ #nav3{background-image:url(~C.jpg);}/* C.html用 */ パターン2-2 #nav1/* A.html用 */ {height:200px; width:600px; background:url(~A.jpg) no-repeat 50% 50%;} #nav2/* B.html用 */ {height:200px; width:600px; background:url(~B.jpg) no-repeat 50% 50%;} #nav3/* C.html用 */ {height:200px; width:600px; background:url(~C.jpg) no-repeat 50% 50%;}

    • ベストアンサー
    • CSS
  • CSSについて

    /** ナビゲーション */ #mainNavi { width:740px; height:50px; overflow:hidden; margin-left:200px; } #mainNavi li, #mainNavi li.acitve { float:left; padding-left:10px; margin-left:1px; background:url(/images/navi.png) left 0px no-repeat; } #mainNavi a { height:50px; display:block; line-height:50px; padding:0 13px 0 3px; background:url(/images/navi.png) right 0px no-repeat; color:#fff; font-size:13px; font-weight:bold; text-decoration:none; } #mainNavi li.active { background:url(/images/navi.png) left -10px no-repeat; } #mainNavi li.active a { background:url(/images/navi.png) right -100px no-repeat; color:#fff; } #mainNavi .wii li.active { background:url(/images/navi.png) left -50px no-repeat; } #mainNavi .wii li.active a { background:url(/images/navi.png) right -50px no-repeat; color:#fff; } #mainNavi .ds li.active { background:url(/images/navi.png) left -150px no-repeat; } #mainNavi .ds li.active a { background:url(/images/navi.png) right -150px no-repeat; color:#fff; } #mainNavi a:hover{ color:#ff0; text-decoration:underline; } #mainNavi li.active a:hover { } というCSSを使って、 ホームページを作成しました。 すべて人から教えてもらったものなので、CSSは初心者です・・・。 そこで思ったのですが、 TOP・掲示板・メール等・・・ のメニューを、左寄りにすることはできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CSS
  • CSSについての質問

    /** ナビゲーション */ #mainNavi { width:740px; height:50px; overflow:hidden; margin-left:200px; } #mainNavi li, #mainNavi li.acitve { float:left; padding-left:10px; margin-left:1px; background:url(/images/navi.png) left 0px no-repeat; } #mainNavi a { height:50px; display:block; line-height:50px; padding:0 13px 0 3px; background:url(/images/navi.png) right 0px no-repeat; color:#fff; font-size:13px; font-weight:bold; text-decoration:none; } #mainNavi li.active { background:url(/images/navi.png) left -10px no-repeat; } #mainNavi li.active a { background:url(/images/navi.png) right -100px no-repeat; color:#fff; } #mainNavi .wii li.active { background:url(/images/navi.png) left -50px no-repeat; } #mainNavi .wii li.active a { background:url(/images/navi.png) right -50px no-repeat; color:#fff; } #mainNavi .ds li.active { background:url(/images/navi.png) left -150px no-repeat; } #mainNavi .ds li.active a { background:url(/images/navi.png) right -150px no-repeat; color:#fff; } #mainNavi a:hover{ color:#ff0; text-decoration:underline; } #mainNavi li.active a:hover { } というCSSを使って、 下のようなホームページを作成しました。 http://www.nin-site.net/ すべて人から教えてもらったものなので、CSSは初心者です・・・。 そこで思ったのですが、 TOP・掲示板・メール等・・・ のメニューを、左寄りにすることはできないのでしょうか? 下は、イメージ図です。(編集しました。) http://www.nin-site.net/image_style.jpg よろしくお願いします。 すべての内容が見たい場合は、 HTMLソース:http://www.nin-site.net/index.txt CSS:http://www.nin-site.net/css/style.css です。

    • ベストアンサー
    • CSS
  • 困っています。教えてください!

    ブラウザ表示すると、変な場所にリンクがつきます。 置き換えた画像にリンクがつきません。 ナビゲーションを画像にして横に並べたいです。 以下にコードあります。 どこが間違っていますか? 教えてください。 お願いいたします! -----HTML----- <div id="navi"> <ul> <li><a href="#" id="home">Home</a></li> <li><a href="#" id="price">Price</a></li> <li><a href="#" id="catalog">Catalog</a></li> <li><a href="#" id="access">Access</a></li> <li><a href="#" id="reserve">Reserve</a></li> </ul> </div> -----CSS----- #navi { width:950px; height:48px; } #navi ul { list-style:none; margin:0px; padding:0px; } #navi li { text-indent:-9999px; float:left; width:135px; margin:0px; padding:0px; } #navi li a { display:inline; } #navi ul li a#home { display:block; width:148px; height:48px; margin-left:100px; margin-top:30px; background:url(images/home.gif) no-repeat; } #navi ul li a#price { display:block; width:135px; height:48px; margin-left:116px; margin-top:30px; background:url(images/price.gif) no-repeat; } #navi ul li a#catalog { display:block; width:154px; height:48px; margin-left:120px; margin-top:30px; background:url(images/catalog.gif) no-repeat; } #navi ul li a#access { display:block; width:135px; height:48px; margin-left:140px; margin-top:30px; background:url(images/access.gif) no-repeat; } #navi ul li a#reserve { display:block; width:155px; height:48px; margin-left:150px; margin-top:30px; background:url(images/reserve.gif) no-repeat; }

    • ベストアンサー
    • CSS
  • ページを開いた直後のサブメニューを非表示

    現在、個人で利用するサイトをJqueryを導入してリニューアルしようと計画しているのですが、 添付画像のように新しいページを開いた直後は、左の青いサブメニューが必ず表示されてしまいます。 ("#menu ul li ul:first").hide();を入れると 消えることには消えたのですが、 それ以後サブメニューが表示されなくなってしまいました。 どなたかお分かりの方、ご助言をお願い致します。 参考までに以下にHTMLとCSSのコードを記載します。 (HTML) <html> <head> </head> <body> <div id="content"> <div id="menuWrapper" class="menuWrapper bg1"> <ul class="menu" id="menu"> <li class="bg1" style="background-position:0 0;"> <a id="bg1" href="#">Our Passion</a> <ul class="sub1" style="background-position:0 0;"> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> </ul> </li> <li class="bg1" style="background-position:-266px 0px;"> <a id="bg2" href="#">Our Brands</a> <ul class="sub2" style="background-position:-266px 0;"> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> </ul> </li> <li class="last bg1" style="background-position:-532px 0px;"> <a id="bg3" href="#">Contact</a> <ul class="sub3" style="background-position:-266px 0;"> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> </ul> </li> </ul> </div> </div> </body> </html> (CSS) .menuWrapper{ font-family: "Trebuchet MS", Arial, sans-serif; font-size: 15px; font-style: normal; font-weight: normal; text-transform:uppercase; letter-spacing: normal; line-height: 1.45em; position:relative; margin:20px auto; height:542px; width:797px; background-position:0 0; background-repeat:no-repeat; background-color:transparent; } ul.menu{ list-style:none; width:797px; } ul.menu > li{ float:left; width:265px; height:542px; border-right:1px solid #777; background-repeat:no-repeat; background-color:transparent; } ul.menu > li.last{ border:none; } .bg1{ background-image: url(../images/1.jpg); } .bg2{ background-image: url(../images/2.jpg); } .bg3{ background-image: url(../images/3.jpg); } ul.menu > li > a{ float:left; width:265px; height:50px; margin-top:450px; text-align:center; line-height:50px; color:#ddd; background-color:#333; letter-spacing:1px; cursor:pointer; text-decoration:none; text-shadow:0px 0px 1px #fff; } ul.menu > li ul{ list-style:none; float:left; margin-top:-180px; width:100%; height:110px; padding-top:20px; background-repeat:no-repeat; background-color:transparent; } ul.menu > li ul li{ display:none; } ul.menu > li ul.sub1{ background-image:url(../images/bg1sub.png); } ul.menu > li ul.sub2{ background-image:url(../images/bg2sub.png); } ul.menu > li ul.sub3{ background-image:url(../images/bg3sub.png); } ul.menu > li ul li a{ color:#fff; text-decoration:none; line-height:30px; margin-left:20px; text-shadow:1px 1px 1px #444; font-size:11px; } ul.menu > li ul.sub1 li{ display:block; } ul.menu > li ul li a:hover{ border-bottom:1px dotted #fff; }

  • サイドナビの配置が上手くいきません。

    初心者なので指導宜しくおねがいします。 サイドナビエリアの中でタイトル画像、ボタン画像をセンターにしたいのですがfirefox、IEで確認すると別々の配置になります何か良い解決策を教えて下さい。 私が書いたタグ、cssで変だなと言う点がありましたら指摘宜しくお願いします。 <!--サイドナビエリア--> <div id="sidenavi"> <ul> <li id="sidetop">back namber</li>    <li><a href="work2010.html" title="2010" id="w10">2010</a></li> <li><a href="work2009.html" title="2009" id="w09">2009</a></li> <li><a href="work2008.html" title="2008" id="w08">2008</a></li> <li><a href="work2007.html" title="2007" id="w07">2007</a></li> </ul> </div> <!--ここまでサイドナビエリア--> /*---------------------------------------------- サイドナビエリア ----------------------------------------------*/ #sidenavi { float:left; height:auto; width: 300px; margin: 30px auto 0; } #sidenavi ul{ height: 30px; width: 60px; list-style: none; padding: 0 ; margin: 0 ; } #sidenavi ul li { text-align:center; } #sidenavi ul li a { background: #FFFFFF; text-indent: -9999px; display: block; height: 30px; width:60px; overflow: hidden; } #sidenavi #sidetop{ height: 30px; width: 150px; text-indent: -9999px; margin: 0 auto 0; background:url(../images_banner/sidemenu/back_namber.jpg) no-repeat; } #sidenavi #w10 { width:60px; background:url(../images_banner/sidemenu/2010.jpg) no-repeat; } #sidenavi #w10:hover { width:60px; background:url(../images_banner/sidemenu/2010over.jpg) no-repeat; } #sidenavi #w09 { width:60px; background:url(../images_banner/sidemenu/2009.jpg) no-repeat; } #sidenavi #w09:hover { width:60px; background:url(../images_banner/sidemenu/2009over.jpg) no-repeat; } #sidenavi #w08 { width:60px; background:url(../images_banner/sidemenu/2008.jpg) no-repeat; } #sidenavi #w08:hover { width:60px; background:url(../images_banner/sidemenu/2008over.jpg) no-repeat; } #sidenavi #w07 { width:60px; background:url(../images_banner/sidemenu/2007.jpg) no-repeat; } #sidenavi #w07:hover { width:60px; background:url(../images_banner/sidemenu/2007over.jpg) no-repeat; }

    • ベストアンサー
    • HTML
  • divの間にすき間ができる

    入れ子にされたdivとdivの間で隙間ができて困っております。 構造は<div id="header2">内に企業ロゴイメージ部を<h1>タグで設置し、 入れ子で<div class="headnavi">を入れ、隙間なく<div id="navi"> を表示させるつもりですが、<div id="header2">と<div id="navi">の間に ブラウザで見たときに隙間ができてしまいます。 どうすれば隙間無く表示させることができるでしょうか? <div style="clear:both"></div>を入れてみては?と言われましたので 入れてみましたが効果はなく困っております。 【html部】 <div id="header2"> <h1><a href="index.html"><img src="images/logo.jpg" alt="" width="270" height="80" border="0" /></a></h1> <div class="headnavi"> <ul> <li id="access"><a href="access/index.html">地図・連絡先</a></li> <li id="inquiry"><a href="inquiry/index.html">お問い合わせ</a></li><li id="sitemap"><a href="#">サイトマップ</a></li> </ul> </div> <div style="clear:both"></div> </div> <div id="navi"> <ul> <li id="aboutus"><a href="about_us/index.html">会社案内</a></li> <li id="works"><a href="works/index.html">業務紹介</a></li> <li id="enviro"><a href="enviroment/index.html">環境方針</a></li> <li id="carrier"><a href="carriers/index.html">採用情報</a></li> </ul> </div> 【スタイルシート】 #header2 { height: 80px; margin-bottom: 0px; padding-bottom: 0px; } #header2 h1 { padding-top: 0px; margin: 0px; float: left; padding-bottom: 0px; padding-left: 14px; } #header2 .headnavi { height: 24px; margin-right: 14px; } #header2 .headnavi ul { padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; float: right; height: 24px; } #header2 .headnavi li { text-indent: -9999px; display: inline; list-style-type: none; } #header2 .headnavi li a { text-decoration: none; display: block; height: 24px; overflow:hidden; float: left; } /*------off----- */ #header2 .headnavi li#access a { width:124px; height: 24px; background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; } #header2 .headnavi li#inquiry a { width:125px; height: 24px; background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; background-position: -124px 0px; } #header2 .headnavi li#sitemap a { width:121px; height: 24px; background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; background-position: -249px 0px; } /*------hover------- */ #header2 .headnavi li#access a:hover { background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; background-position: 0px -24px; } #header2 .headnavi li#inquiry a:hover { background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; background-position: -124px -24px; } #header2 .headnavi li#sitemap a:hover { background-image: url(../images/head_navi.jpg); background-repeat: no-repeat; background-position: -249px -24px; } <div style="clear:both"></div>

  • CSSのリストタグでメニューを作ってますがレイアウトが崩れます

    CSSでリストタグを使ってメニューを作成してますが、Firefoxだとメニューの幅が広く表示され本文にかぶってしまいレイアウトが崩れてしまいます。ちなみにレイアウトは2段組です。 #menu{ text-align: left; width: 175px; float: left } #menu #text ul{ list-style-type: none; margin: 0; padding: 0; border-top: 1px solid white } #menu #text li{ background-image: url("../navi_yajirusi.gif"); background-repeat: no-repeat; background-position: left center; margin: 0; padding: 0; border-bottom: 1px solid white } #menu #text li a{ color: #fff; text-decoration: none; background-color: #1b328d; background-image: url("../navi_yajirusi.gif"); background-repeat: no-repeat; background-position: left center; display: block; padding: 10px 0 10px 10px; width: 175px } #menu #text li a:hover { color: #fff; background-color: #ff0; background-image: url("../navi_yajirusi.gif"); background-repeat: no-repeat; background-position: left center } どなたか詳しい方よろしくお願いいたします。

専門家に質問してみよう