#1. 박스모델

1. CSS 관점에서의 HTML 태그 분류

1) Block level 요소

  • 자기가 속한 영역의 너비를 모두 차지하여 블록을 형성한다.
  • 같은 태그를 연속해서 사용할 경우 문단을 구성하므로 줄바꿈이 되어 표시된다.
  • <p>, <div>, <h(n)>, <ol>, <ul>,<li>

 

2) Inline 요소

  • 자기에게 필요한 만큼의 공간만 차지한다.
  • 같은 태그를 연속해서 사용할 경우 문장을 구성하기 때문에 줄바꿈 없이 표시된다.
  • <span>, <font>, <strong>, <b>, <u>, <i>, <address>

 

3) 대체 요소

  • 이미지, 입력요소 등 텍스트가 아닌 다른 형태로 표시되는 요소로서 Inline에 속한다.
  • <img>, <input>, <select>, <textarea>

 

2. 박스 모델

  • 브라우저가 요소를 렌더링 할 때 각각의 요소는 기본적으로 사각형 형태로 영역을 차지한다. (이 영역을 박스라 표현한다.)
  • 박스는 block-level 요소를 의미하는 것으로 대표적인 태그는 <div> 가 있다.
  • CSS의 박스모델은 박스의 크기, 위치,  색, 배경, 테두리 모양등을 구성하는데 영향을 주는 속성들을 말한다.

※ 박스는 4개의 영역으로 구성되고, 크기를 정의할 수 있는 속성을 가진다.

  • 콘텐츠 영역 : whidth, height
  • 안쪽 여백 : padding
  • 경계선(테두리) : border
  • 바깥쪽 여백 : margin

 

1)  width, height 속성

  • width : 내용 영역의 가로 폭, 박스의 넓이는 특별히 명시하지 않을 경우 자신이 속한 부모를 가득 채운다.
    • 단위는 px과 %를 사용한다.
  • height : 내용 영역의 세로 높이, 박스의 높이는 특별히 명시하지 않을 경우 자신이 포함하고 있는 내용만큼만 형성된다.
    • 내용이 없다면 높이도 0이다. 단위는 px과 %를 사용한다.

 

2) border 속성

  • border 속성은 요소가 차지하고 잇는 영역에 테두리를 그린다.
  • 속성값으로 테두리 굵기, 모양, 색을 지정할 수 있다. (여러가지 속성을 한번에 지정하는것을 단축속성 이라고 한다.)
span {
  border: 2px(테두리 굵기) solid(모양) green(색);
}

※ 사용 가능한 모양 속성값

  • none : 투명 (기본값)
  • solid : 직선
  • dotted : 점선
  • dashed : 끊긴선 (긴 점선)

※ border 속성의 하위 속성

border 속성에 지정하는 값들은 따로따로 지정할 수 있다. (잘 안쓰임)

  • border-top : 위쪽에만 테두리를 지정한다.
  • border-right : 오른쪽에만 테두리를 지정한다.
  • border-bottom : 아래쪽에만 테두리를 지정한다.
  • border-left : 왼쪽에만 테두리를 지정한다.
  • border-color : color 정의 방식과 동일
  • border-width : 두께를 정의. thin, medium, thick 등의 키워드 또는 px, em, rem 등의 단위로 지정
  • border-style: 테두리 모양 정의. 모양 속성값을 사용할 수 있다.
  • border-radius : 요소의 테두리를 둥글게 해준다.

 

3) padding 속성

  • 컨텐츠 주변에 여백을 정의하기 위한 속성으로 컨텐츠영역과 border 사이에 위치한다.
  • 여백은 상,하,좌,우 4개의 면에 존재하는 영역이다.
span {
  padding: 10px
} /* 상,하,좌,우 모두 같은 값이 지정된다. */

※ 위치에 따른 속성 정의

아래 속성들은 단 하나의 값만 갖는다.

  • padding-top : 상단 여백 지정
  • padding-right : 오른쪽 여백 지정
  • padding-bottom : 하단 여백 지정
  • padding-left : 왼쪽 여백 지정

 

※ 여러 값을 한번에 정의

  • 하나의 값만 지정 : 상, 하, 좌, 우 모두 같은 값이 적용된다.
padding: 10px;
/* 상, 하, 좌, 우 */
  • 2개의 값만 지정 : 첫번째는 상/하, 두번째는 좌/우의 값이 적용된다.
padding: 10px 20px;
      /* 상/하, 좌/우 */
  • 3개의 값만 지정 : 첫번째는 상, 두번째는 좌/우, 세번째는 하의 값이 적용된다. 
padding: 10px 20px 30px;
        /* 상, 좌/우, 하 */
  • 4개의 값 지정 : 상단부터 시계방향으로 적용된다. (상, 우, 하, 좌 순서)
padding: 10px 20px 30px 40px;
        /* 상, 우, 하, 좌 */

 

4) margin 속성

  • 컨텐츠 주변에 여백을 정의하기 위한 속성으로 border 밖의 여백을 정의한다.
  • 박스는 기본적으로 브라우저의 좌측 상단에 배치되는데 margin 값이 생기면 margin 값 만큼 밀려난다.
    • 여백이 작용하는 방향에 다른 박스가 존재하면 박스도 같이 밀려난다.
  • margin에 음수값을 설정할 경우 화면 밖으로 나가거나 다른 요소를 끌어당기는 특성을 갖는다.
    • 즉, 자신이나 다른 박스의 위치에 영향을 주는 속성이다.
span {
  margin: 10px
} /* padding과 동일하게 상,하,좌,우 모두 같은 값이 지정된다. */
  • 위치에 따른 속성 정의나 여러 값을 한번에 정의하는 것은 위의 padding 과 동일하다.
  • 두 요소가 서로 마주보는 방향으로 margin 값이 작용할 경우 값이 겹쳐진다.

※ margin의 auto값 사용

  • margin-left: auto; : 박스가 부모의 오른쪽에 배치된다. 
  • margin-right: auto; : 박스가 부모의 왼쪽에 배치된다. (기본값)
    • 둘다 auto값 적용시 박스가 부모의 가운데 배치된다.
  • margin: auto; : 값이 하나인 경우 상,하,좌,우 모두 적용되지만 auto는 상,하에 대해서는 동작하지 않기 때문에 좌,우에만 값을 정의한 것과 동일하게 작용한다.

 

3. 박스의 크기 구성

1) 속성들의 총합

  • 박스의 크기는 관련 속성들의 총합으로 이루어 진다.
  • 테두리와 여백은 내용영역(width, height)의 크기 바깥으로 형성된다.
  • 가로넓이 : border-left + padding-left + [width] + padding-right + border-right
  • 세로넓이 : border-top + padding-top + [height] + padding-bottom + border-bottom

 

2) 중첩 관계에서의 박스크기

  • 자식 요소의 크기 총 합은 부모 요소의 width, height를 벗어날 수 없다.
  • 자식 요소의 width, height를 %로 부여할 경우 부모의 width, height를 기준으로 한다.
  • 자식이 부모를 가득 채우기 위해서는 부모의 크기에서 자식의 padding과 border를 뺀 만큼 크기를 지정해야 한다.

 

3) auto 값의 사용

  • CSS에서는 박스모델의 크기를 정의할 때 padding과 border의 크기를 계산해서 정의해야한다.
    • auto 속성값은 그 계산을 자동으로 처리해준다.
  • width 속성에 사용하는 경우, 부모 요소의 width에서 현재 자신의 padding, border 크기를 뺀 나머지를 자동으로 계산해준다.
  • height 속성에 사용하는 경우, 자신이 포함하고 잇는 내용만큼 높이를 구성한다. (박스의 기본 특성)

 

5) 박스의 가변 크기 지정

  • min-width : 최소 넓이 지정. 내용이 없더라도 이 속성이 지정한 만큼 넓이가 보장된다. (내용이 많아지면 넓이도 커진다.)
  • max-width : 최대 넓이 지정. 이 속성의 값 이상 커지지 않는다.
  • min-height : 최소 높이 지정. 내용이 많아지면 넓이도 커진다.
  • max-height : 최대 높이 지정. 이 속성의 값 이상 커지지 않는다.
span {
  max-height: 50px;
}

 

6) overflow 속성

  • overflow 속성은 x축, y축을 모두 처리한다.
  • 가로 혹은 세로 방향만 처리하고자 하는 경우 overflow-x, overflow-y 속성을 사용할 수 있다.

※ 사용 가능한 속성값

  • visible : 기본값. 벗어나는 내용이 부모 요소를 벗어나도록 그대로 둔다.
  • scroll : 벗어나는 내용에 대하여 스크롤 처리한다. 이 속성이 부여되면 부모 요소는 항상 스크롤바의 트랙을 표시한다. (맥에서는 항상 표시하지 않는다.)
  • hidden : 벗어나는 내용에 대하여 화면에 표시되지 않도록 잘라낸다.
  • auto : 내용이 벗어나지 않을 경우에는 박스의 기본 모양대로 표시되지만, 내용이 벗어날 경우에는 scroll 처리가 된다.
span {
  overflow: hidden;
}

 

7) box-sizing 속성

  • 요소의 width와 height를 계산하는 방법을 지정한다.
  • 너비와 높이가 포함할 영역을 변경함으로써 너비와 높이의 계산 방법을 결정할 수 있다.

※ 사용 가능한 속성값

  • content-box : 기본값. 너비와 높이가 컨텐츠 영역만을 포함한다. 
    • 요소의 너비를 100px로 설정하면 영역은 100px의 너비를 가지고, 테두리와 안쪽 여백은 이에 더해진다.
  • border-box : 너비와 높이가 안쪽 여백과 테두리까지 포함한다.
    • 요소의 너비를 100px로 설정하고 테두리와 안쪽 여백을 추가하면, 컨텐츠 영역이 줄어들어 총 너비 100px을 유지한다. 
    • 너비와 높이가 같더라도 box-sizing 속성 값에 따라 크기가 달라질 수 있다.
div {
  box-sizing: border-box; 
}

 

4. display 속성

1)  display 속성이란?

  • HTML 태그마다 블록레벨 요소인지 인라인 요소인지 보여지는게 다른데, display 속성은 요소를 어떻게 보여줄지 결정하는 속성이다.
  • 블록레벨 요소인 태그를 인라인 요소로, 인라인 요소를 블록레벨 요소로 바꿔주는 역할을 한다.
div {
  display: inline;
} /* 블록레벨 요소인 div 태그를 인라인 요소로 바꿈 */

a {
  display:block;
} /* 인라인 요소인 a 태그를 블록 요소로 바꿈 */

 

2) display 속성의 속성값

  • block : 블록레벨 요소로 처리, 어떤 요소를 문단처럼 구성(한줄을 모두 차지)할 수 있도록 한다. (줄바꿈, width/height가 적용된다.)
  • inline : 인라인 요소로 처리, 어떤 요소를 문장처럼 구성(글자처럼 한줄에 이어짐)할 수 있도록 한다. (줄바꿈x, width/height를 적용할 수 없다.)
  • inline-block : 인라인으로 배치하되, 블록 레벨 요소의 속성을 추가할 수 있도록 처리한다. (크기 지정이 가능한 문장 요소)
  • none : 어떤 요소를 디스플레이(표시) 하지 않는다.
  • flex : 아이템들을 가로 방향 혹은 세로 방향으로(1차원 배치) 배치할 수 있는 방식으로 요소의 크기가 불분명하거나 동적인 경우에도 각 요소를 정렬할 수 있는 효율적인 방법을 제공한다.
    • 동적인 flexbox 컨테이너를 블록 요소처럼 표시
  • grid : flex와는 다르게 2차원으로 배치하는 방식으로 colum과 row의 비율이나 크기를 지정한다.
  • table : table 요소처럼 표현
  • table-row : tr 요소처럼 표현
  • table-cell : td 요소처럼 표현

 

※ Flex에 대해 더 알아보기 https://chan-co.tistory.com/55

'국비수업 > HTML & CSS' 카테고리의 다른 글

[CSS] Position 속성  (0) 2022.03.07
[CSS] Float 속성  (0) 2022.03.04
[CSS] 폰트 관련 속성 / 문단 관련 속성  (0) 2022.03.02
[CSS] CCS의 기본구조 / 선택자  (0) 2022.03.01
[HTML] 멀티미디어 / 입력 요소  (0) 2022.02.26

+ Recent posts