【初心者でもわかる】width: 100%;とwidth: auto;の違い

width: 100%;とwidth: auto;の違い

どうも7noteです。分かっているようで難しいautoと100%の違い。

widthを指定する際、初期値でautoが入っています。
しかし、場合によっては100%を指定しなければならない場面もあります。

特に初心者の方がごっちゃになりやすいと思うので、違いを分かりやすくまとめてみました。

違い① ブロック要素かインライン要素での違い

ブロック要素の場合

  • width: auto;
    • 横幅 = 親要素の幅いっぱい
  • width: 100%;
    • 横幅 = 親要素の幅いっぱい

インライン要素の場合

  • width: auto;
    • 横幅 = コンテンツ分
  • width: 100%;
    • 横幅 = コンテンツ分(widthは効かない)

インラインブロック要素の場合

  • width: auto;
    • 横幅 = コンテンツ分
  • width: 100%;
    • 横幅 = 親要素の幅いっぱいまで広がる

※コンテンツ分 = 文字なら文字数分、画像なら画像の横幅分が要素の幅になる。

違い② 左右のmarginが加わると・・・

ブロック要素の場合

  • width: auto; margin: 0 50px;
    • 横幅 = 親要素の幅いっぱい + 左右50pxの余白
  • width: 100%; margin: 0 50px;
    • 横幅 = 親要素の幅いっぱい + 左右50pxの余白

インライン要素の場合

  • width: auto; margin: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; margin: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白(widthは効かない)

インラインブロック要素の場合

  • width: auto; margin: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; margin: 0 50px;
    • 横幅 = 親要素の幅いっぱい + 左右50pxの余白

違い③ 左右のpaddingが加わると・・・

ブロック要素の場合

  • width: auto; padding: 0 50px;
    • 横幅 + 左右50pxの余白 = 親要素の幅いっぱい
  • width: 100%; padding: 0 50px;
    • 横幅 = 親要素の幅いっぱい + 左右50pxの余白

インライン要素の場合

  • width: auto; padding: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; padding: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白(widthは効かない)

インラインブロック要素の場合

  • width: auto; padding: 0 50px;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; padding: 0 50px;
    • 横幅 = 親要素の幅いっぱい + 左右50pxの余白

違い④ 左右のpaddingが加わり、かつbox-sizing: border-box;をかけると・・・

ブロック要素の場合

  • width: auto; padding: 0 50px; box-sizing: border-box;
    • 横幅 + 左右50pxの余白 = 親要素の幅いっぱい
  • width: 100%; padding: 0 50px; box-sizing: border-box;
    • 横幅 + 左右50pxの余白 = 親要素の幅いっぱい

インライン要素の場合

  • width: auto; padding: 0 50px; box-sizing: border-box;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; padding: 0 50px; box-sizing: border-box;
    • 横幅 = コンテンツ分 + 左右50pxの余白(widthは効かない)

インラインブロック要素の場合

  • width: auto; padding: 0 50px; box-sizing: border-box;
    • 横幅 = コンテンツ分 + 左右50pxの余白
  • width: 100%; padding: 0 50px; box-sizing: border-box;
    • 横幅 + 左右50pxの余白 = 親要素の幅いっぱい

表で比較するとこんなかんじ

①width指定のみ

ブロック要素インライン要素インラインブロック要素
width: auto;幅いっぱいコンテンツ分コンテンツ分
width: 100%;幅いっぱい×(上と同じ)幅いっぱい

②width・margin指定

ブロック要素インライン要素インラインブロック要素
width: auto;
margin: 0 50px;
幅いっぱい

左右にmargin
コンテンツ分

左右にmargin
コンテンツ分

左右にmargin
width: 100%;
margin: 0 50px;
幅いっぱい

左右にmargin
×(上と同じ)幅いっぱい

左右にmargin

③width・padding指定

ブロック要素インライン要素インラインブロック要素
width: auto;
padding: 0 50px;
paddingを含めて
幅いっぱい
コンテンツ分

左右にpadding
コンテンツ分

左右にpadding
width: 100%;
padding: 0 50px;
幅いっぱい

左右にpadding
×(上と同じ)幅いっぱい

左右にpadding

④width・padding・box-sizing指定

ブロック要素インライン要素インラインブロック要素
width: auto;
padding: 0 50px;
box-sizing: border-box;
paddingを含めて
幅いっぱい
コンテンツ分

左右にpadding
コンテンツ分

左右にpadding
width: 100%;
padding: 0 50px;
box-sizing: border-box;
paddingを含めて
幅いっぱい
×(上と同じ)paddingを含めて
幅いっぱい

まとめ

なんか画面外にまでスクロールできてしまったりするとき、この指定が適切でない場合がよくあります。

コーディングに慣れているととくに意識せず、適切なものを指定できるようになりますが、
コーディング初心者の頃はなんとなくで指定してしまいがちです。

自分で理解できていないソースはデザインが崩れてしまう要因になりやすいので、なんとなくではなくしっかり理解して考えられたコーディングが必要です。

実際に背景色を入れながら試してみると、それぞれの違いがよくわかると思いますのでやってみてください。

おそまつ!