학습 정리/📦 기타

[CSS] width와 height 값이 padding과 border 영역을 포함하는 방법 - box-sizing: border-box;

무딘붓 2022. 5. 7. 23:39

1. 문제상황

div 안에 div를 포함했는데, 내부에 있는 div가 원래 div의 영역을 벗어나서 출력되었다.

 

<소스코드>

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            box-sizing: border-box;
            width: 300px;
            height: 200px;
            padding: 20px;
            border: 10px dotted green;

        }

        div div {
            width: 300px;
            height: 200px;
            padding: 20px;
            border: 10px dotted orange;
            background-size: cover;
        }
    </style>
</head>

<body>
    <div>
        <div></div>
    </div>
    <br>

</body>

</html>

<결과물>

문제가 생긴상황. 초록색 테두리가 바깥 div, 노랑색 테두리가 안쪽 div다.

 

2. 문제 원인

내부 div의 padding과 border가 차지하는 영역 때문에 생긴 문제 였다.

 

내부 div의 크기가 width: 300px; height: 200px; 이 되길 원했지만. 내부 div의 padding과 border 영역은 그것과 별개로 공간을 차지했기 때문에 그것을 포함하게 되면 내부 div가 외부 div을 넘어서 표시되었다.

 

padding과 border 영역이 차지하는 공간을 고려해서 width와 height를 수정해서 해결할 수 있었지만, 그렇게 번거로운 방법 대신 width와 height 값이 padding과 border 영역을 포함할 수 있게 하는 방법을 찾고 싶었다.

 

3. 문제 해결

CSS 속성 중에서 box-sizing 속성을 사용하면 된다.

box-sizing 속성은 테두리 영역의 크기를 결정주는 속성으로 content-box , border-box 속성 값이 있다.

 

content-box는 지정한 width와 height 값과 padding, border가 별개가 되고,

border-box는 지정한 width와 height 값에 padding과 border가 포함되게 한다.

 

 

따라서, box-sizing: border-box; 를 추가하게 되면 원하는 결과물을 얻을 수 있다.

 

<소스코드>

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 300px;
            height: 200px;
            padding: 20px;
            border: 10px dotted green;
        }

        div div {
            box-sizing: border-box;
            width: 300px;
            height: 200px;
            padding: 20px;
            border: 10px dotted orange;
        }
    </style>
</head>

<body>
    <div>
        <div></div>
    </div>
    <br>

</body>

</html>

<결과물>

안쪽 div가 원하던 대로 바깥 div의 content 영역에 잘 포함되었다.