どうも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を含めて 幅いっぱい | 
まとめ
なんか画面外にまでスクロールできてしまったりするとき、この指定が適切でない場合がよくあります。
コーディングに慣れているととくに意識せず、適切なものを指定できるようになりますが、
コーディング初心者の頃はなんとなくで指定してしまいがちです。
自分で理解できていないソースはデザインが崩れてしまう要因になりやすいので、なんとなくではなくしっかり理解して考えられたコーディングが必要です。
実際に背景色を入れながら試してみると、それぞれの違いがよくわかると思いますのでやってみてください。
 なるWeb
            なるWeb    

