HP制作初心者です。
現在自分のHPを作成しようとしているのですが、メニュー部分テキストについて
縦方向中央揃えが上手くできません。。
以下ソースなんですが、アドバイスいただけないでしょうか?
形としては、
blog profile portfolio が横並びで並ぶメニューを想定しています。
◆html
<div id="header">
<h1><img src="ロゴ画像" width="95" height="25" /></h1>
<div id="gNav">
<ul>
<li><a id="first" href="#">BLOG</a></li>
<li><a id="second" href="#">PORTOFOLIO</a></li>
<li><a id="third" href="#">PROFILE</a></li>
</ul>
</div>
</div>
◆CSS
#header h1 {
width: 95px;
height: 25px;
margin:auto;
}
#gNav {
width: 570px;
height: 38px;
margin: 0 auto;
padding: 0;
background-image: url(gNav背景.png);
background-repeat: no-repeat;
}
#gNav li {
text-align: center;
float: left;
}
li #first {
width: 105px;
height:38px;
background-image:url(#first背景.png);
background-repeat:no-repeat;
}
※#second,#thirdも#firstと同様です。
#gNav li a {
vertical-align: middle;
}
以上です。vertical-alignが効けば問題無いと思うのですが、
動作しません。display table-celとかも試しましたが、、、駄目です。
何か凄く根本的なところで間違っていると思うのですが、、、ご指摘頂けると
助かります。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
vertical-alignを使う方向で、htmlを尊重しますと以下のcssに置き換えるではどうでしょう?
#header h1 {
width: 95px;
height: 25px;
margin:auto;
}
#gNav {
width: 570px;
height: 38px;
margin: 0 auto;
padding: 0;
background-image: url(画像url);
background-repeat: no-repeat;
}
#gNav ul{
display:table-row;/*liをテーブルのセルにするなら、テーブルの1行を指定する必要があります。*/
}
#gNav li {/*liはブロック要素。画像が1個を使いまわしなら #gNav liで指定します。li #first と統合しました。*/
text-align: center;
display:table-cell;/*ご希望のもの*/
vertical-align: middle;/*ご希望のもの*/
/*float: left;*/
width: 105px;
height:38px;
background:#ccc url(画像url);
background-repeat:no-repeat;
}
/*これは効かないでしょ?消します。
#gNav a {
vertical-align: middle;
}*/
インライン要素の性質とブロックレベル要素の性質を理解していないのがうまく行かない原因かと思います。
インライン要素(例えば<a>)にwidthやheightは思われているような解釈にはcssではなりません。widthはそもそも効きませんし、heightは効きますが、効き方が思われているのとは違うと思います。
すごく根本的な事、インライン・ブロックレベルの違いは基礎中の基礎です。vertical-alignはインライン要素とテーブルセルにしか効きません。この場合のインライン要素のvertical-alignとは<span style="font-size:3em">あ</span><span style="font-size:2.5em">あ</span><span style="font-size:2em">あ</span><span style="font-size:1.5">あ</span>的な事です。出来なかったソースではliというブロック要素をまたいでいるので同列にはなりません。
table-cellは惜しかった。どこからどこまでがtrにあたるのかを指定してやってください。tableに変えるのでfloat:leftは消します。
table-row全く気づきませんでした。ネットで「縦方向 中央揃え」で検索するとtable-cellに辿り着くのですが、意味を解釈できてませんでした。。。丁寧な回答本当にありがとうございました!
No.1
- 回答日時:
【引用】____________ここから
このプロパティは、行ボックス内における、インラインボックスの垂直方向の位置を指定する。 以下の値は、親インライン要素、あるいは匿名インラインボックスを生成する親ブロック要素を参照できる場合にのみ意味を持つ。 そのような親を持たない要素に対しては何の効果も無い。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[視覚整形モデル詳細( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )]より
よって、そのような場合は使えません。
<body>
<div class="header"><!-- headerはひとつの文書の中に複数登場しうるのでclass -->
<h1>見出</h1>
<div class="nav">
<ol>
<li><a href="/">トップ</a></li>
<li><a href="/news">ニュース</a></li>
<li><a href="/product">製品</a></li>
<li><a href="/contact">問合せ</a></li>
</ol>
</div>
</div>
なら、
div.header{width:80%;min-width:800px;max-width:900px;margin:0 auto;}
div.header div.nav{width:100%;line-height:38px;text-align:center;}
div.header div.nav ol,div.header div.nav ol li{display:block;list-style-type:none;margin:0;padding:0;}
div.header div.nav li{width:24%;float:left;position:relative;}
div.header div.nav li a{display:block;width:100%;height:100%;border:outset 3px gray;}
とかで済むはずです。古いブラウザを対象としないなら
div.header{width:80%;min-width:800px;max-width:900px;margin:0 auto;}
div.header div.nav{width:100%;line-height:38px;text-align:center;}
div.header div.nav ol,div.header div.nav ol li{display:block;list-style-type:none;margin:0;padding:0;}
div.header div.nav li{width:24%;display:inline-block;position:relative;}
div.header div.nav li a{display:block;width:100%;height:100%;border:outset 3px gray;}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
CSSで背景画像を一番下にもって...
-
form input テキストを上下中央...
-
HTMLで文字が重なって表示されます
-
【CSS】ヘッダーの高さが不明の...
-
背景が下まで表示されないんです。
-
Win IE5.5~6.0での余白に関す...
-
表示倍率を変えるとレイアウト...
-
CSSがなぜかfont-sizeだけ効か...
-
divタグ+CSSでのレイアウトで、...
-
指定したborderの一部が表示さ...
-
CSS(0の単位)について
-
W3Cのソースコードの検証サービ...
-
font-sizeが効かない
-
画像と一緒にスライドするリン...
-
4枚の画像を均等間隔で一列に...
-
余分な縦スクロールバーが出て...
-
z-indexで上になっている要素だ...
-
ホームページのCSSについて
-
CSS:animation開始位置の設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
css初心者 フレックスボックス...
-
CSSがなぜかfont-sizeだけ効か...
-
【CSS】ヘッダーの高さが不明の...
-
画像イメージの上下左右、欲し...
-
CSS、width100%でもできる余白
-
スクロールボックスを中央に配...
-
<div>と<div>の間の10px程の...
-
CSSで背景画像を一番下にもって...
-
余分な縦スクロールバーが出て...
-
CSS:animation開始位置の設定
-
form input テキストを上下中央...
-
Media Queries 4 で 非推奨とな...
-
CSSでボックスのheightが0になる
-
W3Cのソースコードの検証サービ...
-
表示倍率を変えるとレイアウト...
-
定義リストに下線をつけたいと...
-
背景が下まで表示されないんです。
-
footer を横幅いっぱいに広げる...
おすすめ情報