
リストを横並びにしてメニューバーを作ろうとしているのですが、CSSの参考書に書いてある通りにHTMLとCSSを書いても、添付ファイルのように、どうしても左端がはみ出てしまいます。
(この例ではわかりやすいようにli要素の左にボーダーを入れています)
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>TITLE</title>
<link href="nav.css" rel="stylesheet" type="text/css">
</head>
<body>
<ul class="nav">
<li class="nav_item"><a href="index.html">ホーム</a></li>
<li class="nav_item"><a href="#">リンク1</a></li>
<li class="nav_item"><a href="#">リンク2</a></li>
</ul>
</body>
nav.css
.nav {
display: table;
width: 100%;
table-layout: fixed;
padding-top: 10px;
padding-bottom: 10px;
background-color: #dddddd;
}
.nav_item {
display: table-cell;
border-left: thick solid #000000;
}
.nav_item > a {
display: block;
list-style-type: none;
text-decoration: none;
text-align: center;
}
どのブラウザで確認しても同じ現象です。
どうやったら正常に表示されるのか、おわかりになれば教えてください。

No.4ベストアンサー
- 回答日時:
>という認識であってますでしょうか?
プロパティには継承されるものと継承されないものがあります。
borderやwidthは継承されません。
line-heightやtext-align、font-familyなどは継承されます。
とは言っても常識的なものですね。
bodyに枠をつけたら子孫要素にすべてborderがつくわけない
他人に薦めている=私自身が役立ったと思う仕様書は
HTML 4.01 仕様書邦訳( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification (ja)( http://momdo.s35.xrea.com/web-html-test/spec/CSS … )
特に「5 セレクタ」「6 プロパティ値とカスケーディング、継承の割り当て」
HTML5,CSS3に比較してずっと簡単ですからね。
その後、HTML5なら、その上で
HTML 5 differences from HTML 4( http://www.html5.jp/trans/w3c_differences.html )
とか・・
たびたびのご回答、ありがとうございます。
かなりボリュームがあって、これは時間がかかるな、と思ったのですが、
ここで時間をかけないと、今回のように困ることばかりになって、
かえって時間がかかりますね。
土台がしっかりしていないと、その上に何も乗せられないので、頑張って
勉強します。
今日は本当に何度もありがとうございました。
No.3
- 回答日時:
>お察しの通り、初心者で入門書に載っている例を、1つずつ<main>~</main>に入れて試しているような段階です。
main要素はHTML5の勧告直前に追加された要素ですが非常に制約が多いです。文書の中で一箇所しか使えません。
★ article, aside, footer, header, nav 要素の内部・子孫には存在してはならない。
端的に言うとそのページの主題となっている部分の目印として一箇所だけ用いる。
HTML5の典型的なマークアップ
<body>
<header>
文書のヘッダ
<nav>グローバルナビ</nav>
</header>
<section>
<h2>sectionは一つだけ見出し要素を持つ</h2>
<section>
<h3>見出し</h3>
<article>
<header></header>
<section></section>
</footer>
</article>
<aside></aside>
</section>
</section>
<footer></footer>
</body>
mainを使う例
<body>
<header>
文書のヘッダ
<nav>グローバルナビ</nav>
</header>
<main>
<h2>sectionは一つだけ見出し要素を持つ</h2>
<article>
<header></header>
<section></section>
</footer>
</article>
</main>
<footer></footer>
</body>
>参考サイトや仕様書をきちんと読んで、基礎の基礎から勉強しようと思います。
まず仕様書を通して読んでおきましょう。その上であちこちのサイトをめぐられると良いでしょう。
私はこの世界17年になりますが、その方法が最も早い上達方法です。理系科目の勉強とまったく同じで、基礎からきちんと積み上げていくととっても簡単ですが、対症療法的な学び方では挫折します。
すみません、mainは何個も使っているわけではなく、mainの中身を書き換えて
試している、という意味でした。
今まではプログラマーでオブジェクト指向をやっていたので、親で要素を定義して、
子孫では親の属性を継承し、そのセレクタに関する指定をする、ということは理解
できました。(という認識であってますでしょうか?)
今まではいろんなサイトをインスペクタで研究していたりしたのですが、
付け焼き刃はためですね。仰るとおり基礎から積み上げていきたいと思います。
たびたびのご回答、ありがとうございました。
No.2
- 回答日時:
UL要素のデフォルトの余白が原因では。
/* padding-top: 10px;
padding-bottom: 10px; */
padding: 10px 0;
No.1
- 回答日時:
HTMLやスタイルシートの書き方を知らない(^^)というだけ。
仕様書を見たこともないのじゃないかと<div class="nav"><!-- なぜこうなのか後述 -->
<ul>
<li><a href="index.html">ホーム</a></li>
<li><a href="/A">リンク1</a></li>
<li><a href="/B">リンク2</a></li>
</ul>
</div>
div.nav{width:100%;background-color:silver;line-height:2em;text-align:center;}
div.nav ul,div.nav ul li{margin:0;padding:0;list-style:none;}
div.nav ul li{font-size:16px;display:inline-block;width:30%;position:relative;}
div.nav ul li+li{border-left:solid blue 3px;}
div.nav ul li a{display:block;width:100%;height:100%;text-decoration:none;}
div.nav ul li a:hover{background-color:white;}
※ CSS2以降、セレクタは原則として基点となるセレクタを書く。
.navは、クラスセレクタですが、ブラウザは*.navと解釈して処理します。
*は全称セレクタ
※ いちいちclass="nav_item"のようなclassは書かない。煩雑になる。
きちんと子孫セレクタ,子供セレクタを使うと継承や詳細度で悩まなくてすむ。
5 セレクタ( http://momdo.s35.xrea.com/web-html-test/spec/CSS … )
6 プロパティ値とカスケーディング、継承の割り当て( http://momdo.s35.xrea.com/web-html-test/spec/CSS … )
はじめはややこしいかもしれないが、この二項目はCSSを利用するときに絶対に必修です。
※ 縦の中央に配置する目的でtableなのでしょうが、line-heightで制御できるはず
divで囲んでそれにclass="nav"としているのは、
「DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するため( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」
および、HTML5の新しい要素( http://standards.mitsue.co.jp/resources/w3c/TR/h … )によります。
HTML5では
<nav><!-- ナビゲーション -->
<ul>
<li><a href="index.html">ホーム</a></li>
<li><a href="/A">リンク1</a></li>
<li><a href="/B">リンク2</a></li>
</ul>
</nav>
となるべきだからです。
nav{width:100%;background-color:silver;line-height:2em;text-align:center;}
nav ul,nav ul li{margin:0;padding:0;list-style:none;}
nav ul li{font-size:16px;display:inline-block;width:30%;position:relative;}
nav ul li+li{border-left:solid blue 3px;}
nav ul li a{display:block;width:100%;height:100%;text-decoration:none;}
nav ul li a:hover{background-color:white;}
nav ul li a[href="/A"]:hover{background-color:lime;}
はみ出した理由
たぶんオリジナルは、互換モードを前提としているのでしょう。互換モードはブラウザによって大きな差異が出るため使うべきではない。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
として(旧)IEで見るとはみ出ないのでは?
また、ブラウザによってmarginかpaddingかの差はありますがul,liはmarginを持つブラウザが多い。
お察しの通り、初心者で入門書に載っている例を、1つずつ<main>~</main>に
入れて試しているような段階です。
よくわかりました、と言いたいところですが、まだまだ理解できてないところが
多いので、参考サイトや仕様書をきちんと読んで、基礎の基礎から勉強しようと
思います。
丁寧で詳しいご説明、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS CSSが上手く反映されないみたいです 2 2022/11/21 16:19
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dreamweaverで、ul要素の下に写...
-
横並びのメニューにならない
-
list-style-type部分だけ大きく...
-
<ul>タグを使うと勝手に<p>...
-
html/cssの、navを2段にする...
-
ホームページでよく見かけるメ...
-
リストを2つに分割して、それぞ...
-
html <li>の中の文字一部に色を...
-
リストの数字のフォントサイズ...
-
HTMLでのマークアップについて
-
「olタグ」内に「hタグ要素」...
-
liタグの中に<p>タグやら<dl>を...
-
display:table;を多段表示させたい
-
リストの左余白の削除方法
-
jQuery-もっと見るボタンをスマ...
-
<ul><li></li></ul>にするメリ...
-
グリッドデザインの画像表示に...
-
番号付きリスト(<Ol><Li>・・...
-
css 横並びのナビゲーションバ...
-
htmlの<ol>タグで、数字などを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストマーカーをボックス内に...
-
html/cssの、navを2段にする...
-
ulタグやliタグの中でbrタグ...
-
liタグの中に<p>タグやら<dl>を...
-
リストの数字のフォントサイズ...
-
画像にリンクを張ると画像がず...
-
複数行にまたがる括弧を表示し...
-
レスポンシブWebデザインでリン...
-
HTMLで組織図を作成する方法
-
html <ul></ul>の並びで一行空...
-
htmlの<ol>タグで、数字などを...
-
divタグ内のコンテンツが重なっ...
-
ページを開いているときのリン...
-
ドロップダウンメニューが隠れ...
-
【CSS】メニュー上部に固定させ...
-
<ul><li></li></ul>にするメリ...
-
番号付きリスト(<Ol><Li>・・...
-
ulとliで囲った文字の一部を変...
-
list-style-type部分だけ大きく...
-
<li>の中の<h>だから!ルール違...
おすすめ情報