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

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

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

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

Q&A

解決済

2回答

451閲覧

【CSS】font-sizeの変更によるボタン幅が変わる理由について

Kkurenai

総合スコア1

CSS

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

0グッド

0クリップ

投稿2020/10/13 22:19

aタグを使用してボタンを2つ作成したのですが、その際にbackgroundも色付けしてみると、font-sizeによってボタンのリンク有効幅(バックグラウンド範囲)が変わります。
widthは200pxで固定しているので、font-sizeが変わってもボタン幅は変わらないと思っていました。

これはどういった理由によるものなのでしょうか?

html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <link rel="stylesheet" href="main.css"> 7</head> 8<body> 9 <a href="#" class="button-link">ボタンリンク</a> 10 <a href="#" class="button-link2">ボタンリンク2</a> 11</body> 12</html>

CSS

1a { 2 background: #ffd700; 3 display: block; 4 width: 200px; 5 margin: 40px auto; 6 padding: 1em; 7 text-align: center; 8} 9 10a.button-link { 11 background: #ffd700; 12 color: #ff4500; 13 font-size: 40px; 14}

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

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

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

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

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

kei344

2020/10/14 13:47

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
Kkurenai

2020/10/14 13:53

kei344さん ご指摘ありがとうございます。 ベストアンサーおよび解決済の対応をいたしました。
guest

回答2

0

ベストアンサー

単位の em は親要素のフォントサイズを基準とする相対長になります。
上のボタンはフォントサイズ40pxなので、1emは40px
下のボタンはフォントサイズは既定のサイズの16px(ブラウザや設定で変わる場合がある)になるので1emは16pxになります。

widthは200pxで固定しているので、font-sizeが変わってもボタン幅は変わらないと思っていました。

widthは既定ではパディング、境界線は含まないコンテンツ(中身)の幅を設定します。
パディング、境界線を含めて幅を設定したい場合は、box-sizing: border-box;を設定するといいでしょう。こうしておけばwidth: 200px; でボタン幅(ボタンのリンク有効幅)は200pxになります。

box-sizing - CSS: カスケーディングスタイルシート | MDN

下記のように全要素に対して設定しておく幅の計算方法を統一できるので紛れないのでお勧めです。

css

1* { 2 box-sizing: border-box; 3}

投稿2020/10/13 23:39

編集2020/10/13 23:43
hatena19

総合スコア33715

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

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

Kkurenai

2020/10/14 12:32

hatena19さん ご回答ありがとうございます。 また、参考リンクおよび記入例までありがとうございます。 ご教示いただきました『box-sizing: border-box;』を記入したところ、解決いたしました。 なお、ご教示いただいた内容で、1点お伺いしたいことがございます。 >単位の em は親要素のフォントサイズを基準とする相対長になります。 >上のボタンはフォントサイズ40pxなので、1emは40px とのことですが、この場合フォントサイズはaタグで設定したため、その親要素はbodyになり、そうなるとbodyのフォントサイズは16pxで1emは16pxになるのではと思いましたが、違うということでしょうか?
hatena19

2020/10/14 12:51

https://developer.mozilla.org/ja/docs/Learn/CSS/Building_blocks/Values_and_units 上記の中に、 > em 親要素のフォントサイズ. と説明されています。 この親要素という表現はちょっと誤解を生みやすいかもしれませんね。 例えばaタグ内のテキスト(コンテンツ)から見れば、親要素はaタグです。ですのでaタグに font-size: 40px; と設定されていればテキストのサイズは40pxになります。 padding や border はaタグの属性です。 padding や border から見れば親要素はaタグということになる、という解釈なのだと思います。
Kkurenai

2020/10/14 13:28

追加の質問にご回答いただきありがとうございます。 そういう解釈になるのですね。 ネットで探してもピンポイントな説明が見つからなかったので助かりました。
guest

0

paddingに指定しているemの影響かと思います。
フォントサイズが大きくなることで相対的に(バランスをとるために)広がっています。

CSS の値と単位

ちなみに、ブラウザのデベロッパツールで確認されると分かりますが、
paddingの影響でフォントサイズ小さい方でもwidth200pxよりは広くなっています。

投稿2020/10/13 22:35

編集2020/10/13 23:03
m.ts10806

総合スコア80850

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

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

Kkurenai

2020/10/14 11:55

m.ts10806さん ご回答ありがとうございます。 また、参考リンクまでありがとうございます。 仰る通り、小さい方でも200pxを超えていましたね。 確認不足で申し訳ございませんでした。
m.ts10806

2020/10/14 12:15

ですので、幅がかっちり決まっている場合はpaddingの利用は気を付けなければなりません。 >確認不足で申し訳ございませんでした。 いえ、ここは経験によるところも大きいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問