質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

3858閲覧

CSS 文字数の違うグローバルナビで高さを均一、文字を縦横中央にしたい

brebre

総合スコア29

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/09/14 02:53

編集2017/09/15 03:43

文字数可変、ナビ数増減ありという条件の中で、
高さを均一にし、高さいっぱいのリンク、文字は縦横中央にしたいのですが、
うまくいきません。

下記のコードでは、高さ均一、高さいっぱいのリンクは実現できるのですが、
文字が縦中央になりません。

ulタグにdisplay:table、liタグにdisplay:table-cellを指定したパターンでも試してみたのですが、liタグ内のaリンクを高さいっぱいにひろげることができず下記のコードを試した次第です。

ご教授いただけますと幸いです。

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

※追記
htmlは変更できないものとして、CSSのみの変更で実現させたいです。

※追記2
下記のコードでは複数行にならないとのことで、
SAMPLE3の文字を増やしました。

html

1<ul> 2 <li><a href="#">HOME</a></li> 3 <li><a href="#">SAMPLE1</a></li> 4 <li><a href="#">SAMPLE2SAMPLE2SAMPLE2</a></li> 5 <li><a href="#">SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3SAMPLE3</a></li> 6</ul>

CSS

1ul { 2 width: 100%; 3 max-width: 1000px; 4 margin: 0 auto; 5 padding: 10px 0; 6 display: flex; 7 flex-flow: row; 8 justify-content: space-around; 9 -webkit-align-items: stretch; 10 align-items: stretch; 11} 12ul li { 13 flex: 1; 14 -webkit-flex: 1; 15 border-right: 2px dotted #ccc; 16} 17ul li a { 18 display: block; 19 width: 100%; 20 height: 100%; 21 padding: 10px; 22 color: #43230d; 23 text-align: center; 24}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

aタグのpadding分だけはみ出る(ずれる)のではないでしょうか。
box-sizing: border-box;を使ってみるのはいかがでしょう?

こういう何がどこにあってどれだけずれているかわかりにくいので、
一時的に背景色などをつけてみるとわかりやすくなると思います。

追記
具体的には・・・
CSSの ul li a {...}box-sizing: border-box; を追加してpadding で高さなどを調節するだけです。
ご希望のようにならないでしょうか?

投稿2017/09/14 04:33

編集2017/09/14 12:18
kjml

総合スコア219

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

brebre

2017/09/14 13:42

box-sizingにはborder-boxを設定してあるのですが、文字が上に並んでしまい、縦中央にはなりませんでした。 ナビ内の文字が1行だけであれば、どうにか揃えられるのですが、何文字入るかわからない状況で、複数行にも対応できるナビが作りたいとは思っています。
kjml

2017/09/14 13:57 編集

複数行ですか・・・質問文に掲載のままのHTMLを変更しないとすれば、複数行にならないような気もしますが、複数行になった(した)とすれば、1行しかない項目は上に寄ってしまいますね。
brebre

2017/09/15 04:13

失礼いたしました。 追記で文字数を増やしました。おそらくこれで複数行になるはずです。 今回はjQueryで実装しましたが、CSSでも実装できるよう、もう少し考えてみたいと思います。
guest

0

こんな感じでしょうか?

ul{ width: 100%; max-width: 1000px; margin: 0 auto; padding: 10px 0; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-flow: row; flex-flow: row; -ms-flex-pack: distribute; justify-content: space-around; } ul li { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -ms-flex-line-pack: stretch; align-content: stretch; border-right: 2px dotted #ccc; width:25%; height:auto; list-style:none; margin:0; padding:0; } ul li a { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -ms-flex-line-pack: stretch; align-content: stretch; width: 100%; height: auto; color: #43230d; margin:0; padding:20px 0; text-align:center; word-break: normal; }

投稿2017/09/14 18:19

shaak

総合スコア607

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

brebre

2017/09/15 03:18

回答いただきありがとうございます。 縦横中央にはなったのですが、aタグのリンクが高さいっぱいに広がらなかったです...。
guest

0

ベストアンサー

liaの高さを取得し、その差分をapaddingに与えて高さを揃え、文字が真ん中にくるようにしました。

css

1ul li { 2 flex: 1; 3 -webkit-flex: 1; 4 border-right: 2px dotted #ccc; 5 list-style:none; 6} 7ul li a { 8 -webkit-box-sizing: border-box; 9 -moz-box-sizing: border-box; 10 box-sizing: border-box; 11 display: block; 12 padding: 0 10px; 13 color: #43230d; 14 text-align: center; 15 word-break: break-all; 16}

JavaScript

1$(function(){ 2 var $box = $('ul li'), // 適宜クラスを当てて下さい 3 $Link = $box.children('a'), 4 boxHeight = $box.height(); 5 for (var i = 0; i < $Link.length; i++) { 6 var linkHeight = $Link.eq(i).height(), 7 // 差分をとります(上下半分ずつpaddingとするので÷2しています) 8 diff = (boxHeight - linkHeight) / 2; 9 $Link.eq(i).css({ 10 // 差分と、追加の余白で10px足しています 11 paddingTop : diff + 10, 12 paddingBottom : diff + 10 13 }); 14 } 15});

投稿2017/09/14 06:47

編集2017/09/15 00:42
onodo

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

brebre

2017/09/14 08:13

記載忘れで申し訳ございません。 htmlを変更しないで、実現する方法はあるのでしょうか。 よろしくお願いいたします。
onodo

2017/09/14 08:52

jQueryは導入されますか? jQueryを使用することを想定して回答を編集いたします。
brebre

2017/09/14 13:40

jqueryは使用できます。 試してみたところ、うまくいきませんでした。 文字数の多い箇所は横幅が長くなってしまい、横幅均一になりませんでした。
onodo

2017/09/15 00:35

jQueryは使えるんですね! 再度書き直しますので、そちらで試してみて下さい
brebre

2017/09/15 04:11

こちらを試したところ、意図する動きをすべて実装できました! 今回はこちらをベストアンサーとさせていただき、 CSSだけでも実装できないか試してみたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問