謎の空白
問題
要素を並べた時に、なぜか期待していない空白ができることがある。
原因
いくつかの原因が複合的に現れている。
そもそもレイアウトで位置が指定されている。(top, left, right, bottom)
CSS ボックスモデルによるもの(デフォルトのスタイルによるもの)
padding によるもの
margin によるもの
body, h1 等には margin が設定されている。
border によるもの(透明なボーダーなど)
box-sizing の content-box 属性によるもの
空白文字、改行によるもの
ただのインデントや改行のつもりだが、そこにレンダリング対象となる空白が紛れ込んでいる。特に改行は分かりづらい。
埋め草として使われている文字(たいてい  )が入り込んだことによるもの
何らかの間隔によるもの
letter-spacing
word-spacing
border-spacing
フォントのデザインによるもの
ベースライン(baseline)の下部分(decender, ディセンダー)の空白によるもの
Meiryo はディセンダーがバカみたいにでかくなっている。フォントの設計ミス。(見やすくするために意図的のようだが)
フォントの上部分の空白によるもの(普通はあまりない)
複数のスクリプト(言語)が混ざると代理フォントが使われることがあるが、この判定にブレがあり、そのブレからサイズが狂うことがある。
アライメントによるもの
inline-block はデフォルトでベースラインに並んでしまう。(vertical-align: baseline がデフォルト)
意図しないスタイルの継承によるもの
html 要素、body 要素にもブラウザによって margin, padding が設定されている。
ドキュメントとクライアント領域に隙間がある
body 要素にはデフォルトの margin が設定されている。
デフォルト
https://gyazo.com/a94486af05e4da769ed94a7d4dc3b28e
body { margin:0; } 設定後
https://gyazo.com/8da7df8c222d0f8b3eee9b46c9ab0e71
box-sizingによる隙間の対処方法
line-height を 0 にする。
inline-blockで隙間をなくす
空白を生み出す可能性のある CSS
padding https://developer.mozilla.org/ja/docs/Web/CSS/padding
margin https://developer.mozilla.org/ja/docs/Web/CSS/margin
border https://developer.mozilla.org/ja/docs/Web/CSS/border
box-sizing https://developer.mozilla.org/ja/docs/Web/CSS/box-sizing
letter-spacing https://developer.mozilla.org/ja/docs/Web/CSS/letter-spacing
word-spacing https://developer.mozilla.org/ja/docs/Web/CSS/word-spacing
border-spacing https://developer.mozilla.org/ja/docs/Web/CSS/border-spacing
vertical-align https://developer.mozilla.org/ja/docs/Web/CSS/vertical-align
間接的に空白を生み出す可能性のある CSS
font-size https://developer.mozilla.org/ja/docs/Web/CSS/font-size
次の行との隙間、またはベースラインの下側が空くとされている。(本当のところはよく分からない)
Keyword
隙間,空白,間,空く
参考
[CSS]ページのレイアウトで、意図せずできてしまった隙間の原因とその解決方法のまとめ https://coliss.com/articles/build-websites/operation/css/6-cases-of-unwanted-spaces-in-page-layout-by-demosthenes.html
inline要素にして並べた時にできる謎の空白を消すには https://www.attend.jp/html_170331
関連
height100%問題
#レイアウト