5주차 08
08-1 CSS와 박스 모델
CSS 박스 모델이란 웹 문서의 내용을 박스 형태로 정의하는 방법이다. 이 박스 모델이 모여 웹 문서를 이루는 것이다. 박스 모델에는 마진과 패딩, 테두리 등 박스가 여러 겹 들어 있다
블록 레벨 요소와 인라인 레벨 요소
박스 모델은 블록 레벨 요소인지 인라인 레벨 요소인지에 따라 나열 방법이 달라진다.
블록 레벨 요소
태그를 사용해 요소를 삽입했을 때 혼자 한줄을 차지하는 것이다. 한줄을 차지한다는 것은 해당 요소의 너비가 100%라는 뜻이다. 따라서 블록 레벨 요소의 왼쪽이나 오른쪽에 다른 요소가 올수 없다. 블록 레벨 요소를 만드는 대표적인 태그로 <h1>, <div>, <p> 등이 있다.
인라인 레벨 요소
한줄을 차지하지 않는다. 콘텐츠만큼만 영역을 차지하고 나머지 공간에는 다른 요소가 올 수 있다. 한줄에 인라인 레벨 요소를 여러개 표시할 수 있다. 인라인 레벨 요소를 만드는 태그로 <span>, <img>, <strong> 등이 있다.
박스 모델의 기본 구성
앞에서 배운 웹 문서의 블록 레벨 요소는 모두 박스 형태입니다. 스타일 시트에서는 이렇게 박스 형태인 요소를 박스 모델(box model)요소 라고 한다. 웹 문서 안에서 여러 요소를 원하는 위치에 배치하려면 CSS 박스 모델을 잘 알고 있어야 한다.
박스 모델은 콘텐츠 영역, 박스와 콘텐츠 영역 사이의 여백인 패딩(padding), 박스의 테두리(border), 그리고 여러 박스 모델 사이의 여백인 마진(margin)등의 요소로 구성된다. 이때 마진 이나 패딩은 웹 문서에서 다른 콘텐츠 사이의 간격이나 배치 등을 고려할 때 필요한 개념이다.
콘텐츠 영역의 크기를 지정하는 width, height 속성
박스 모델에서 콘텐츠 영역의 크기를 지정할 때 너비는 width, height 속성을 사용한다 |종류|설명| |:---:|-----| |크기|너비나 높이의 값을 px이나 em단위로 지정한다. |백분율|박스 모델을 포함하는 부모 요소를 기준으로 너빗값이나 높이값을 백분율(%)로 지정한다. |auto|박스 모델의 너빗갑소가 높잇값이 콘텐츠 양에 따라 자동으로 결졍된다. 기본값|
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
#a {
width: 200px;
height: 200px;
}
</style>
<body>
<input type="text" id="a"><br>
<input type="text">
</body>
</html>
박스 모델의 크기를 계산하는 box-sizing 속성
width 속성과 height 속성은 박스 모델에서 콘텐츠 주변의 여백이나 테두리를 뺀 콘텐츠 영역의 크기를 가리킨다. 그래서 웹 문서에 여러가지 요소를 배치할 때 실제 박스 모델이 차지하는 크기는 콘텐츠 영역 외에도 콘텐츠와 테두리 사이의 여백, 테두리 두께까지 계산해야 한다.
웹 문서에서 텍스트와 이미지 등의 다양한 요소를 배치할 때 매번 패딩과 테두리의 값을 계산해서 박스 모델의 크기를 넣어야한다. 하지만 box-sizing 속성을 사용하면 너비와 높이를 어떻게 결정할 것인지에 따라 border-box와 content-box 를 사용해 boxsize를 계산할 수 있다.
border-box
테두리까지 포함해서 너빗값을 지정
content-box
콘텐츠 영역만 너빗값을 지정
box-shadow 속성
CSS에서 box-shadow 속성을 사용하면 그림자 효과를 줄 수 있다. 그림자는 이미지 또는 <div>와 같이 전체 영역에 지정하여 넣을수 있는데 box-shadow에서 그림자 위치나 색상, 흐림 정도 등을 지정하려면 다음과 같은 형식으로 사용한다.
기본형 box-shadow: <수평 거리> <수직 거리> <흐림 정도> <번짐 정도> <색상> inset
box-shadow의 속성값에서 수평 거리와 수직 거리는 반드시 지정해야 한다.
|종류|설명| |:---:|-----| |수평 거리|그림자가 가로로 얼마나 떨어져 있는지를 나타낸다. 양숫값은 요소의 오른쪽에,음숫값은 요소의 왼쪽에 그를 만든다.| |수직 거리|그림자가 세로로 얼마나 떨어져 있는지를 나타낸다. 양숫값은 요소의 아래쪽에, 음숫값은 요소의 위쪽에 그림자를 만든다. |흐림 정도|이 값을 생략하면 0을 기본값으로 하여 진한 그림자를 표시한다. 값이 커질수록 부드러운 그림자를 표시하며, 음숫값은 사용할 수 없다. |번짐 정도|양숫값을 사용하면 모든 방향으로 그림자가 퍼져서 박스보다 그림 자가 크게 표시된다. 반대로 음숫값은 모든 방향으로 그림자가 축소되어 보인다. |색상|한가지만 지정할 수도 있고, 공백으로 구분해서 여러 개의 색상을 지정할 수도 있다. |inset|그림자를 안쪽으로 표시한다.|
테두리 스타일 지정
박스 모델을 사용해 웹 문서에 요소를 배치하려면 각 박스 모델의 크기와 여백, 테두리 스타일 등을 고려해야 한다. 네 방향 모두 같은 테두리를 사용할 수도 있고 각각 다르게 사용할 수도 있다
박스 모델의 방향
박스 모델은 상하좌우 4개의 방향이 있어서 테두리나 마진, 패딩 등을 지정할 때 한꺼번에 똑같이 지정하거나, 모두 다르게 지정할 수도 있다.
박스 모델의 방향을 맨 윗부분은 top, 오른쪽은 right, 아랫부분은 bottom 왼쪽은 left라고 한다.
border-style
테두리 스타일을 지정하는 border-style 속성의 기본값은 none이므로 속성값을 따로 지정하지 않으면 테두리 색상이나 두께를 지정하더라고 화면에 표시되지 않는다.
border-style 속성 종류 |종류|설명| |:---:|------| |none|테두리가 없다. 기본값| |hidden|테두리를 감춘다. border-collapse: collapse일 경우 다른 테두리도 표시되지 않는다.| |solid|테두리를 실선으로 표시한다.| |dotted|테두리를 점선으로 표시한다.| |dashed|테두리를 짧은 직석으로 표시한다.| |double|테두리를 이중선으로 표시한다. 두사이의 간격이 border-width값이 된다| |groove|테두리를 창에 조각한 것처럼 표시한다. 홈이 파인 듯 입체 느낌니 난다.| |inset|표에서 border-collapse: spperate일 경우 전체 박스 테두리가 창에 박혀 있는 것처럼 표시되고, 표에서 border-collapse: collapse일 경우 groove와 똑같이 표시된다. |outset|표에서 border-collapse: spperate일 경우 전체 테두리가 창에서 튀어나온 것처럼 표시되고, 표에서 border-collapse: collapse일 경우 ridge와 똑같이 표시된다.| |ridge|테두리가 창에서 튀어나온 것처럼 표시된다.
border-width
border-width 속성을 사용하면 테두리 두께를 지정할수 있다.
직접 크기를 입력할 수도 있고 thin, medium, thick같은 예약어를 사용할 수도 있다.
기본형 border-width: <크기> | thin | medium | thick
테두리 두께를 4방향 모두 다르게 지정하고 싶다면 border-top-width, border-right-width처럼 border와 width사이에 방향을 넣는다.
border-color
border-color 속성은 박스 모델에서 테두리 색상을 지정할 수 있다.
border
테두리 스타일과 두께, 색상을 한꺼번에 표현할 수 있다. border-top이나 border-right처럼 속성 이름에 방향을 함께써서 따로 지정할 수도 있다.
border-radius
border-radius 속성을 사용하면 꼭짓점 윗부분에 원이 있다고 가정해서 둥글게 처리힌다. 원의 반지름을 이용하면 둥근 정도를 나타낼 수 있다.
기본형 border-radius: <크기> | <백분율>
border-top-radius 처럼 border와 radius 사이에 위치를 넣으면 꼭짓점마다 따로 둥글게 처리할 수 있다.
여백을 조절하는 속성
두 박스 모델 사이의 여백은 마진, 한 박스 모델에서 테두리와 내용사이의 여백은 패딩이라고 한다.
margin
마진은 요소 주변의 여백을 의미한다. 따라서 마진을 이요하면 요소와 요소 사이의 간격을 조절할 수 있다.
기본형 margin: <크기> | <백분율> | auto
마진 속성에서 값을 하나만 지정하면 4방향 모두 같이 지정되지만 값이 여러개면 top -> right -> bottom -> left순으로 적용된다.
margin 속성을 사용하여 웹 문서를 가운데 정렬하기
margin 속성을 사용해 웹 문서의 내용을 화면 중앙에 배치하려면 우선적으로 배치할 요소의 너빗값이 정해져 있어야 한다. 그리고 margin-left와 margin-right의 속성값을 auto로 지정한다. 이렇게 지정하면 CSS는 웹 브라우저 화면의 너비에서 요소 너빗값을 뺀 나머지 영역을 좌우 마진으로 자동 계산한다.
마진 중첩
박스 모델에서 마진을 지정할 때 주의해야 할 것이 있다. 요소를 세로로 배치할 경우에 각 요소의 마진과 마진이 서로 만나면 마진값이 큰 쪽으로 겹쳐지는 문제인다, 이런 형상을 마진 중첩 또는 마진 상쇄라고 한다
padding
패딩이란 콘텐츠 영역과 테두리 사이의 여백을 말한다. 패딩과 마진은 여백의 위치만 박스 모델에서 패딩을 지정하는 방법은 마진과 거의 같다.
웹 문서의 레이아웃 만들기
display 속성
display 속성을 사용하면 블록 레벨 요소와 인라인 레벨 요소를 서로 바꿔서 사용할 수 있다. display 속서은 주로 웹 문서의 내베게이션을 만들면서 메뉴 항목을 가로로 배치할 때 많이 사용하고, 이미지를 표 형태로 배치 할 수도 있다. |종류|설명| |:---:|-----| |block|인라인 레벨 요소를 블록 레벨 요소로 만든다.| |inline|블록 레벨 요소를 인라인 레벨 요소로 만든다.| |inline-block|인라인 레벨 요소와 블록 레벨 요소의 속성을 모두 가지고 있으면 마진과 패딩을 지정할 수 있다.| |none|해당 요소를 화면에 표시하지 않는다.|
float
웹 문서를 만들다 보면 <p> 태그처럼 문단의 왼쪽이나 오른쪽에 이미지를 나란히 표시해야 할 경우가 있다. 그런데 <p> 태그는 블록 레벨 요소이므로 이미지와 나란히 한 줄에 배치할수 없다. 이럴 때는 float 속성을 사용하여 이미지를 표시하고 그 주변에 텍스트가 둘러 싸도록 할 수 있다.
float 속성은 웹 요소를 문서 위에 떠 있게 만든다. 떠 있다는 의미는 요소가 왼쪽 구석이나 오른쪽 구석에 배치된다는 것을 말한다.
float 속성값 |종류|설명| |:---:|-----| |left|해당 요소를 문서의 왼쪽에 배치한다.| |right|해당 요소를 문서의 오른쪽에 배치한다.| |none|좌우 어느 쪽에도 배치하지 않는다.|
clear
float 속성을 사용해 웹의 요소를 왼쪽이나 오른쪽에 배치하면 그 다음에 넣는 다른 요소에도 똑같은 속성이 전달된다. 따라서 float 속성이 더 이상 유용하지 않다고 알려 주는 속성이 필요한데 그것이 바로 clear 속성이다
웹 요소의 위치 지정하기
left, right, top, bottom 속성
postion 속성으로 기준 위치를 정한 뒤 요소의 위치를 left, right, top, bottom 속성에서 선택하고 속성값을 지정한다 |종류|설명| |:---:|-----| |left|기준 위치와 요소 사이에 왼쪽으로 얼마나 떨어져 있는지 지정| |right|기준 위치와 요소 사이에 오른쪽으로 얼마나 떨어져 있는지 지정 |top|기준 위치와 요소 사이에 위쪽으로 얼마나 떨어져 있는지 지정 |bottom|기준 위치와 요소 사이에 아래쪽으로 얼마나 떨어져 있는지 지정
position
position 속성을 이용하면 텍스트나 이미지 요소를 나란히 배치할 수도 있고 원하는 위치를 선택할 수 있습니다.
position 속성값 |종류|설명| |:---:|-----| |static|문서의 흐름에 맞춰 배치한다| |relative|위칫값을 지정할 수 있다는 점을 제외하면 static과 같다| |absolute|relative값을 사용한 상위 요소를 기준으로 위치를 지정해 배치한다.| |fixed|브라우저 창을 기준으로 위치를 지정해 배치한다.|
Last updated