CSS 박스 모델 정리

Flex·2022년 2월 19일
0

CSS 모음

목록 보기
5/14
post-thumbnail

CSS 박스 모델에 대해 정리해보았다.
박스 모델은 브라우저 - 개발자도구 - Styles 가장 하단에서 살펴볼 수 있다.


📦 박스 모델

박스 모델 : CSS를 구성하는 기반이 되는 개념이다. 설계자 역할을 한다.

  • 특정 웹사이트 분석시 복잡한 레이아웃으로 보일 수 있지만 사실은 사각형의 집합으로 이루어져있다.

  • 부모자식 관계를 가진다.
    --> 사각형이 겹겹이 층을 쌓아 구성되어있다.

  • 이미지가 동그라미일 수는 있지만 브라우저가 크기를 계산할 때는 박스 기준으로 계산된다.

1) content : 콘텐츠가 표시되는 영역.
진짜 내용을 담고 있는 핵심 영역이다.
width, height 로 크기 지정이 가능하다.

2) padding : 콘텐츠와 테두리(border) 사이의 여백.

3) border : padding 과 margin 사이의 테두리.
디폴트값은 0으로, 존재는 하지만 눈에 보이지 않는다.

4) margin : 가장 바깥 쪽 레이어.
콘텐츠와 패딩, 테두리를 둘러싸면서 다른 요소 사이 공백 역할을 한다.


📦 콘텐츠 크기 속성

1. width

width : 요소의 너비를 설정한다. 기본값은 콘텐츠 영역의 너비이다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/width

2. height

height : 요소의 높이를 지정한다. 기본값은 콘텐츠 영역의 높이다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/height

width와 height의 공통점

  • 초기값auto 이다.
  • 상속되지 않는 속성이다.
  • Inline 요소에는 적용 불가능하며, Block 요소에만 적용 가능하다.

3. max-width & min-width

  • max-width : 요소의 최대 너비를 지정한다.
  • min-width : 요소의 최소 너비를 지정한다.

4. max-height & min-height

  • max-height : 요소의 최대 높이를 지정한다.
  • min-height : 요소의 최소 높이를 지정한다.

Q) max- 와 min-, 언제 쓰일까요? 🤔

A) 반응형 웹사이트를 만들 때 주로 사용됩니다.
상속되는 속성이 아니기 때문에 Block 요소의 크기가 더이상 늘거나 줄지 않게 지정할 수 있어요!


📦 margin (단축 속성)

margin : 요소의 네 방향 바깥 여백 영역을 설정한다.

  • margin-top, margin-right, margin-bottom, margin-left단축 속성이다.
  • 디폴트값은 상하좌우 모두 0 이다.

  • 자식에게 상속되지 않는다.

  • 절대길이상대길이 모두 사용 가능하다.
    ❗️여기서 % 는 viewport 에서가 아닌 부모 width 의 백분율이다.

값에 따른 방향

한 개의 값 = 모든 네 면의 여백
두 개의 값 = 상&하, 좌&우
세 개의 값 = 상, 좌&우, 하
네 개의 값 = 상, 우, 하, 좌 (시계방향)

순서로 지정한다.
padding / border 도 동일하다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/margin


📦 마진 상쇄 (margin collapsing)

마진 상쇄, 마진 겹침, 마진 중복, ... 등으로 불린다.
💢 실제 디자인 업무 시 약간의 빡침을 요한다. 우선 알아두도록 하자.

  • 여러 블록(block) 요소들의 위/아래 margin 이 경우에 따라
    가장 큰 크기를 가진 margin 으로 결합(상쇄) 되는 현상이다.

  • margin-topmargin-bottom 에만 일어난다.

  • 버그(Bug) 는 아니며 CSS 명세에 공식적으로 적혀있는 정상적인 현상이다.

  • 아래 3가지 경우에 일어난다.

1. 인접 형제

  • 두 형제 요소의 위/아래 여백이 만나 상쇄된다.

2. 부모-자식요소 간

  • 부모 블록에 border, padding, inline content 가 없어서 부모와 자식의 margin-top 이 만나는 경우

  • 부모 블록에 border, padding, inline content 가 없고,
    부모-자식을 분리할 height 값이 지정되지 않아 부모와 자식의 margin-bottom 이 만나는 경우

✅ 다행히도 부모와 자식 요소 사이를 나눌 수 있는 속성이 1px 이라도 존재한다면 발생하지 않는다.

Example

#parent {
  width: 100px;
  height: 100px;

  margin-top: 30px;

  background-color: cadetblue;
}

#child {
  width: 30px;
  height: 30px;

  margin-top: 40px;

  background-color: indianred;
}

--> 부모의 margin-top 이 자식의 것과 겹쳐 상쇄된 것을 확인할 수 있다.

3. 빈 블록

  • border, padding, content 가 없고, height 또한 존재하지 않으면, 해당 블록의 margin-topmargin-bottom 이 상쇄된다.

  • 내용이 없는 Block 요소에서만 발생한다.
    --> 위와 아래가 만나 상쇄된다.


📦 padding (단축 속성)

요소의 네 방향 안쪽 여백 영역을 설정한다.
padding-top, padding-right, padding-bottom, padding-left단축 속성이다.

  • 음수값은 사용할 수 없다.

  • % 는 viewport 에서가 아닌 부모 width 의 백분율이다.

  • margin 과 다르게 padding 상쇄는 존재하지 않는다.

  • 값에 따른 방향은 margin 과 동일하다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/padding


📦 border

border-style, border-width, border-color 세 가지 속성 모두
값에 따른 방향 을 가진다.

1. border-style

border-style : 요소 테두리 네 면의 스타일을 지정한다.

  • 기본값은 none 이다.
    --> none 일 경우에는 선의 굵기와 색을 지정해줘도 보이지 않게 된다.

  • solid, dotted, dashed, ... 등 많은 키워드 값이 있다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/border-style

2. border-width

border-width : 요소 네 면 테두리의 굵기를 설정한다.

  • thin, medium, thick 세 가지 키워드를 갖고 있다.

  • 각 키워드의 굵기를 정의한 명세는 없기 때문에 결과는 구현별로 상이할 수 있다.
    --> 단위로 굵기를 지정해주는 것이 좋다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/border-width

3. border-color

border-color : 모든 면의 테두리 색상을 설정한다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/border-color

4. border (단축 속성)

border : 요소의 테두리를 설정한다.
border-style, border-width, border-color 의 값을 설정한다.

  • 스타일을 지정하지 않으면 none 이 되기 때문에 스타일은 필수로 지정하자.

  • 속성의 순서는 상관없다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/border

Q) border 와 outline 의 차이는 뭔가요? 🤔

borderoutline 은 매우 유사하지만, 다음의 두 가지 차이점이 존재합니다.

1. outline 은 요소 콘텐츠의 밖에 그려지며 절대 공간을 차지하지 않습니다.
2. 명세에 따르면 outline 은 직사각형일 필요는 없습니다.


📦 border-radius

border-radius : 요소 테두리 경계의 꼭짓점을 둥글게 만든다.

  • 하나의 값 = 원형 꼭짓점
    두 개의 값 = 타원형 꼭짓점

  • 주어지는 값은 모서리에 들어가는 원의 반지름이다.

  • 백분율 값을 사용하게 되면 다음과 같다.
    가로축 값 = 요소 박스의 너비에 대한 백분율
    세로축 값 = 요소 박스의 높이에 대한 백분율

  • 값에 따른 방향은 margin 과 비슷하나 왼쪽 상단에서부터 시계방향으로 적용된다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/border-radius


📦 box-sizing

box-sizing : 요소의 너비와 높이를 계산하는 방법을 지정한다.

  • content-box (디폴트값)와 border-box 두가지 값을 가진다.
  1. content-box : 콘텐츠 영역만 포함한다.
  2. border-box : 콘텐츠 영역, 안쪽 여백과 테두리를 포함한다.
    --> 사람이 한번에 이해하기 쉽다.
  • 바깥쪽 여백은 별도의 영역이다.

  • 두 값의 계산하는 방식에 테두리를 포함하는지 여부의 차이가 있다.
    widthheight의미하는 영역이 완전히 달라진다.

🦊 MDN Link : https://developer.mozilla.org/ko/docs/Web/CSS/box-sizing

profile
💵 오늘을 살자

0개의 댓글

관련 채용 정보