0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【フロントエンド1000本ノック】0021_CSSのcontent-boxとborder-boxの挙動の違いを図とコードで説明するドキュメントを作成せよ。

Posted at

この記事は人間が書きました

はじめに

こんにちは、赤神です!
この記事は、「1000本ノック」という取り組みの中のフロントエンドのための課題の1つです。

「1000本ノックとは」
https://qiita.com/sora_akagami/items/c8da4296dea3823376ca

box-sizing の設計モードによる違い

ある要素に width: 200px; というスタイルが指定されている時、その要素にさらに padding: 20px; と border: 10px solid black; を追加した際、そのボックスが画面上で占める最終的な横幅は合計で何pxか?

という問題は、CSS の box-sizing の設計モードによって答えが2つあります。

box-sizing: content-box:デフォルトの挙動

これは CSS のデフォルトの計算方法です。指定した width はコンテンツ(中身)の幅だけを意味し、paddingborder はその外側に追加されます。

  • width:200px
  • padding:20px(左)+ 20px(右)= 40px
  • border:10px(左)+ 10px(右)= 20px
  • 合計:200px + 40px + 20px = 260px

この方法は直感的でなく、「200pxの箱を作りたいのに、paddingを追加したら全体の幅が変わってレイアウトが崩れたという原因になりがちです。

box-sizing: border-box:モダンな挙動

先ほどの方法と比較して、こちらは直感的な計算方法です。指定した width が、border まで含めた最終的な幅になります。

paddingborder は、指定した width の内側に作られます。

  • 合計:200px
  • その代わり、内側のコンテンツ領域が自動で縮小される

この方法はレイアウト計算が非常に楽になるため、最近のWeb制作では全ての要素に border-box を指定することが多いです。

/* 全ての要素にborder-boxを適用するおまじない */
*, *::before, *::after {
  box-sizing: border-box;
}

作成したコード

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>フロントエンド1000本ノック 0021</title>
</head>
<body>
    <main>
      <h1>2つのbox-sizingの違い</h1>
      
      <section>
        <h2>box-sizing: content-box</h2>
        <div style="width: 200px; padding: 20px; border: 10px solid red; box-sizing: content-box;"></div>
        <p>width: 200px; padding: 20px; border: 10px solid red; box-sizing: content-box;</p>
        <p>合計の幅が260pxになる</p>
      </section>
      
      <section>
        <h2>box-sizing: border-box</h2>
        <div style="width: 200px; padding: 20px; border: 10px solid red; box-sizing: border-box;"></div>
        <p>width: 200px; padding: 20px; border: 10px solid red; box-sizing: border-box;</p>
        <p>合計の幅が200pxになる</p>
      </section>
    </main>
    <footer>
      <p>Copyright 2025</p>
      <p>フロントエンド1000本ノック</p>
    </footer>
</body>
</html>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?