-
ID:TBWUQs さんの質問

【CSS】レスポンシブのWebサイトを作っており、メニュー(li)をfloatで横並びにさせているのですが、最後のliだけ、カラム落ちのような状態になっております。
ulとli自体は%で指定しており、画面の幅を変えてもカラム落ちの状態は変わらないのですが、ブラウザの横幅をいじってスマホサイズの画面に切り替えた後、再びPCサイズの画面に切り替えると、カラム落ちはしていないのですが、更新ボタンを押すと再びカラム落ちの状態になります。
アドバイスをいただけるとありがたいです。

----- 表示させたい形 -----

      ナビゲーション
ナビ1 ナビ2 ナビ3 ナビ4 ナビ5

①ulの名前が横並びにさせたliの上に表示される
②画面サイズに応じて、横幅だけ変化する(高さは固定)
※文字の表示位置(中央寄せ)やリストデザインは下記CSSには含みません。

----- HTML -----
<section>
<ul>ナビゲーション
<li>ナビ1</li>
<li>ナビ2</li>
<li>ナビ3</li>
<li>ナビ4</li>
<li>ナビ5</li>
</ul>
</section>

----- CSS -----

ul, li {
margin: 0 0;
padding: 0 0;
}

section {
width: 100%;
height: 60px;
position: relative;
}

ul {
width: 100%;
height: 30px;
position: relative;
top: 0;
left: 0;
}

li {
width: 20%;
height: 30px;
float: left;
position: relative;
top: 30px;
left: 0;
}

よろしくお願いします。。

みんなの回答 4 件

ID:CtLhhL さんの回答

table-cellを使ったほうが簡単ですし項目が増えた場合の応用も利きます。

リストを横並びにした際に簡単に均等にすることができるdisplay:table-cellを使ってみる | bl6.jp

http://bl6.jp/web/css/display-table-cell/
ID:TBWUQs

ご回答ありがとうございます。
display:tableも考えたのですが………。
テーブルにする以外だと難しいでしょうか…。

ID:JeAJce さんの回答

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>無題ドキュメント</title>

<style>
dl, dt,dd {
margin: 0 0;
padding: 0 0;
}

section {
width: 100%;
height: 60px;
}

dl {
width: 100%;
height: 30px;
position: relative;
top: 0;
left: 0;
}

dt {
width:100%;
text-align:center;
}

dd {
width: 20%;
height: 30px;
float: left;
background:#ddd;
list-style:none;
left: 0;
}
</style>

</head>

<body>

<section>
<dl>
<dt>ナビゲーション</dt>
<dd>ナビ1</dd>
<dd>ナビ2</dd>
<dd>ナビ3</dd>
<dd>ナビ4</dd>
<dd>ナビ5</dd>
</dl>
</section>

</body>
</html>

ul配下の文字列のせいでそうなってるぽいのと文法上もいくないです。

ID:TBWUQs

ご回答ありがとうございます。
dlを使うと、確かにうまくいきました。
リストがダメなのですね…。

ID:Xql2vD

違う。<ul> 下に <li> に入ってない要素があるのがダメ。具体的には「ナビゲーション」て文字列が入ってる位置がダメ。

ID:TBWUQs

勉強になりました。
ありがとうございます。

ID:mjmJMK さんの回答

listでも作れなくはないです。
でもtableとか使った方が、レスポンシブなら作りやすいです。
(勝手に幅とか調節してくれます)
table-layoutやdlとかはIE7に対応してないので、対応するなら注意してください。
(selectivizr使うなり、ie7だけfloatにするなり。)
float使う際は、ul要素にclearfixした方がいいですよ。
liにtop,leftは必要ないと思います。ナビの高さを調節したいならliの中のa(displaly:block)要素にpaddingとかで調整すると良いです。

ID:mjmJMK

追伸
「ナビゲーション」はul要素から外した方がいいです。
<nav>
<h2>ナビゲーション</h2>
<ul>
<li>ナビ1</li>
<li>ナビ2</li>
・・・
</ul>
</nav>

ID:TBWUQs

お返事遅くなりましてすみません。
h要素で入れれば大丈夫そうですね。
ご丁寧にありがとうございます、助かりました。

ID:luS67a

コーディングが終わったら最期にバリデータをかけると良いです。
validator.w3.org

今のコードだと、

  • ulの中にli以外のがあるよ
  • sectionの中に見出しが無いよ
    と出ます。
    エラー・警告を無くすことから始めるといいですよ。
ID:btqvKD さんの回答

ulの直下にはli以外の要素は入り得ない。
単純な文法ミス。
文法ミスでもブラウザは賢いからなんとなく表示してくれているだけ。

ID:TBWUQs

ご指摘ありがとうございます。
勉強になりました。

最終更新日:2014-07-22 (8,053 views)

関連するトピックス

ページ上部に戻る