Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

AI와 데이터 사이언스의 이론과 실전

CSS - 박스 모델(내용, 패딩, 마진, 테두리) , 박스 사이징 본문

HTML과 CSS/CSS

CSS - 박스 모델(내용, 패딩, 마진, 테두리) , 박스 사이징

큐트아리 2023. 10. 19. 11:38

1. 박스 모델(Box Model)

CSS 박스 모델(Box Model)은 웹 페이지의 요소(element)가 어떻게 레이아웃되고 서식이 지정되는지를 설명하는 중요한 개념입니다.

  • 모든 HTML 요소는 박스모양으로 구성
  • 박스 모델은 HTML 요소를 내용, 패딩, 테두리, 마진으로 구분
  • HTML의 모든 요소는 내용, 패딩, 테두리, 마진으로 구성

1.1. 내용(content)

    - 텍스트나 이미지가 들어있는 박스의 실질적인 내용 부분


1.2. 패딩(padding, 안쪽여백)

    - 내용과 테두리 사이의 여백(간격)
    - padding-top, padding-right, padding-bottom, padding-left
    - padding은 시계방향(위/오른쪽/아래/왼쪽) 순으로 설정할 수 있음

        [HTML]

<div id ='padding'></div>

        [CSS]

div#padding { padding: 20px 50px 30px 10px}
        /*위 20px 오른쪽 50px 아래 30px 왼쪽 10px*/

        div#padding { padding: 20px 50px 30px}
        /*위 20px 오른쪽 왼쪽 50px 아래 10px*/

        div#padding { padding: 20px 50px}
        /*위 아래 20px 오른쪽 왼쪽 50px */

        div#padding { padding: 20px }
        /*위 오른쪽 왼쪽 아래 20px*/

< 예시 코드 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>패딩</title>
    <style>
        div {
            width: 200px;
            height: auto;
            background-color: deepskyblue;
            margin: 20px;
            color: white;
        }
        #padding1 {padding: 10px 30px 20px 40px ;}
        #padding2 {padding: 30px 20px 40px ;}
        #padding3 {padding: 30px 50px ;}
    </style>
</head>
<body>
    <h2>패딩</h2>
    <div id="padding1">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque error aut dolores nihil praesentium explicabo minima, nam delectus nulla quos rerum molestias, natus quibusdam! Veritatis nobis nostrum deleniti quia illo!</div>
    <div id="padding2">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque error aut dolores nihil praesentium explicabo minima, nam delectus nulla quos rerum molestias, natus quibusdam! Veritatis nobis nostrum deleniti quia illo!</div>
    <div id="padding3">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque error aut dolores nihil praesentium explicabo minima, nam delectus nulla quos rerum molestias, natus quibusdam! Veritatis nobis nostrum deleniti quia illo!</div>
    <div id="padding4">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque error aut dolores nihil praesentium explicabo minima, nam delectus nulla quos rerum molestias, natus quibusdam! Veritatis nobis nostrum deleniti quia illo!</div>
    <div id="padding5">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Doloremque error aut dolores nihil praesentium explicabo minima, nam delectus nulla quos rerum molestias, natus quibusdam! Veritatis nobis nostrum deleniti quia illo!</div>

</body>
</html>

<결과>

1.3. 테두리(border)

    - 내용과 패딩 주변을 감싸는 프레임
    - border-style(테두리모양), border-color(테두리색상), border-width(테두리두께), border(한번에 모두 설정)

 

< 예시 코드 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>테두리</title>
    <style>
        div {
            width: 200px;
            height: 100px;
            margin: 15px;
            border-width: 5px;
            color: black;
            border-style: solid;
        }
        #border1 { border-style: solid;}
        #border2 { border-style: dotted;}
        #border3 { border-style: dashed;}
        #border4 { border-style: double;}
        #border5 { border-color: tomato;
                    border-top-style: dotted;
                    border-right-style: solid;
                    border-bottom-style: dashed;
                    border-left-style: double;}
        #border6{ border: 3px dotted red ;}
    </style>
</head>
<body>
    <h2>테두리</h2>
    <div id="border1">solid</div>
    <div id="border2">dotted</div>
    <div id="border3">dashed</div>
    <div id="border4">double</div>
    <div id="border5"></div>
    <div id="border6"></div>
</body>
</html>

<결과>

1.4. 마진(margin)

    - 태두리와 이웃하는 요소들 사이의 간격
    - 마진은 눈에 보이지 않음
    - 세로 겹침 현상이 일어남(세로나열된 두 박스의 마진 중 큰 마진 선택)

< 예시 코드 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>마진</title>
    <style>
        * { padding: 0; margin: 0;}
        div{
            width: 300px;
            height: 100px;
            background-color: deepskyblue;

        }
        #margin1 { margin: 30px 50px;}
        #margin2 { margin: 30px 50px;}
        #margin3 { margin: 50px;}
        #margin4 { margin: 30px 5px 10px;}
        #margin5 { margin: 30px auto;}

    </style>
</head>
<body>
    <h2>마진</h2>
    <div id="margin1"></div>
    <div id="margin2"></div>
    <div id="margin3"></div>
    <div id="margin4"></div>
    <div id="margin5"></div>
</body>
</html>

<결과>

2. 박스 사이징(box-sizing)

박스 사이징은 CSS에서 사용되는 속성으로, 박스 모델(Box Model)의 크기 계산 방법을 지정하는 데 사용됩니다. `box-sizing` 속성은 주로 콘텐츠의 크기를 결정할 때 적용됩니다. width, height는 padding, border 영역을 포함하지 않고 content 영역만을 포함하기 때문에 width가 100%로 설정되어 있는 경우 padding이나 border속성을 추가하면 안됩니다.

  • content-box (기본값)
       - 요소의 너비와 높이는 콘텐츠 영역만을 포함합니다.
       - 패딩과 테두리는 요소의 크기에 추가로 더해집니다.
  • border-box
       - 요소의 너비와 높이는 콘텐츠 영역뿐만 아니라 패딩과 테두리도 포함합니다.
       - 따라서 패딩과 테두리의 크기가 콘텐츠 영역 내에 포함되므로 요소의 전체 크기가 예측 가능해집니다

`box-sizing`를 `border-box`로 설정하면 주로 레이아웃을 구성할 때 많은 혼란을 방지하고 레이아웃을 관리하기 더 용이하게 만듭니다. 이를 통해 다양한 요소의 크기를 설정할 때 패딩과 테두리의 크기를 따로 계산하지 않아도 되므로 개발자에게 편의성을 제공합니다.

< 예시 코드 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>박스 사이징</title>
    <style>
        div {
            width: 300px;
            height: 150px;
            margin: 10px;
            padding: 30px;
            border: 3px solid red;
        }
        #boxsizing1{ box-sizing: content-box;}
        #boxsizing2{ box-sizing: border-box;}
    </style>
</head>
<body>
    <h2>박스 사이징</h2>
    <div id="boxsizing1">box-sizing='content-box'</div>
    <div id="boxsizing2">box-sizing='border-box'</div>
</body>
</html>

<결과>