본문 바로가기

Programming/HTML+CSS

[CSS] 3. 박스 모델(5) - 여백 속성(margin, padding) 1

css3 logo image

 

 

 

○ margin 속성의 이해

 

margin은 각 요소 사이의 간격을 조절할 수 있는, 요소 주변의 여백의 크기를 의미합니다. margin은 border 관련 속성들과 마찬가지로 margin 값을 일괄로 적용하거나, margin-위치를 통해서 개별적으로 지정할 수 있습니다. 

 

 

선택자 {
     margin: 크기 | 백분율 | auto;
}

 

border 속성 값을 지정할 때와 마찬가지로, margin의 속성 값은 한 개부터 네 개까지 작성하는 개수에 따라서 적용 규칙이 달라진다. border와 동일하므로 이전의 내용도 함께 참고하시기 바랍니다. 

 

#margin1 { margin: 50px; }
#margin2 { margin: 30px 50px; }
#margin3 { margin: 30px 20px 50px; }
#margin4 { margin: 30px 50px 30px 50px; }

 

위의 id 기준으로 margin1은 네 개의 방향이 모두 50px로 적용된다. margin2의 경우 top+bottom은 30px / left+right는 50px로 적용된다. margin3의 경우 top 30px, right 20px, bottom + left는 50px로 적용된다. margin4는 당연히 top 30px, right 50px, bottom 30px, left 50px가 적용됩니다.

 

 

 


 

 

○ margin으로 문서 위치 가운데 정렬하기

 

텍스트 요소를 정렬할 때는, text-align 속성을 사용해서 정렬을 진행하게 됩니다. 그런데, 어떤 HTML문서 레이아웃 전체를 '화면의 중앙'에 배치해야 하는 상황이 발생하면 어떻게 해야 할까요? 이럴 때 다름 아닌 margin 속성 값을 응용할 수 있습니다. 

 

어떤 특정 요소를 브라우저 중앙에 배치하기 위해서는, 일단 해당 요소의 width가 정의되어 있어야 합니다. 그리고 해당 요소의 margin-left, margin-right를 auto로 설정하면 됩니다. 그럼 자연스럽게 브라우저 전체 너비에서 요소의 너비를 뺀 값을 요소의 좌우 마진으로 계산하게 됩니다. 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body {
            background-color: black;
        }
        #container {
            text-align: center;
            border: 2px solid red;
            background-color: yellowgreen;
            width: 500px;
            margin: 25px auto;
            padding: 25px;
        }
    </style>
</head>
<body>
    <div id="container">태그 가운데 정렬을 테스트 합니다.</div>
</body>
</html>

 

브라우저의 좌우 마진은 자동으로 결정된다

 

 

 


 

 

○ margin overlap(마진 중첩)의 이해

 

일단 마진 중첩 현상에 대해서 간단하게 정의를 진행해 보겠습니다. 우선 어떤 <div> 요소의 margin 값이 30px로 지정되었다고 가정해 봅시다(top, right, bottom, left). 그런데 이 <div>요소 두 개가 위아래로 딱 붙어서 배치된다면, 두 <div> 요소 사이의 거리는 어떻게 될까요? 

 

이론적으로 위에 있는 <div> 박스는 margin-bottom이 30px이고, 아래에 있는 <div> 박스는 margin-top이 30px인 셈이 됩니다. 그럼 실제로 두 개의 <div>는 위 아래 사이에 총 60px의 거리를 두게 될 것 같습니다. 

 

하지만, 실제로는 이렇게 두 박스 요소의 거리가 결정되지 않습니다. 30px의 거리를 위아래로 두게 됩니다. 이것이 margin overlap(마진 중첩) 또는 margin collapse(마진 상쇄) 현상이라고 합니다. 이 마진 중첩 현상은, 위와 아래 요소마진이 겹칠 때 더 큰 마진 값으로 적용되는 현상을 의미합니다.

 

하지만 주의할 점은, 이 마진 중첩 현상은 세로로 배치되는 요소에 대해서만 적용되며 좌우의 마진 값이 만나는 경우에는 발생하지 않는다는 것입니다.

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            margin: 50px;
        }
        #box1 { background-color: red; }
        #box2 { background-color: yellow; }
        #box3 { background-color: blue; }
    </style>
</head>
<body>
    <div id="box1">box1입니다.</div>
    <div id="box2">box1입니다.</div>
    <div id="box3">box1입니다.</div>
</body>
</html>

 

마진이 50px인데, 위 아래로는 100px이 아닌 50px이 적용되었다