박스모델
CSS에서 화면 구성요소를 다루기 위한 방법으로 레이아웃을 구성할 때 중요한 개념
포지셔닝
화면 배치를 위한 속성들을 활용하는 기법
-> 박스모델을 정의하고 레이아웃을 설계해서 원하는 위치에 구성요소를 자유롭게 배치
1. CSS 단위 px, % 등
1) 절대 단위 : 화면의 크기나 해상도에 따라 달라지는 단위로 특정용도 외 사용을 지양한다.
사용용도 : 박스의 크기를 지정할 때 px, 폰트 크기 지정할 떄 pt를 주로 사용
2) 상대 단위 : 부모 요소를 기준으로 상대적인 크기를 지정하는 단위
상대 단위 종류
- % : 100%를 기준으로 하는 상대 크기
- em : 부모 요소의 기본 크기를 1em으로 상대적인 크기 지정 -> 부모의 크기 변경시 변한다.
- rem : 부모가 아닌 최상위 root[like 브라우저 default]를 기준으로 상대적인 크기 지정 -> 기본 값이 변하지 않는다.
- vw, vh : 뷰포터 너비와 뷰포트 높이 1%에 비례
- vmin, vmax : 뷰포트 너비와 높이 중 더 작은 치수와 더 큰 치수 1%에 비례
- v가 붙은 단위 : 뷰포트와 관련된 단위로 사용자에게 보이는 영역을 말한다
- 반응형 웹 디자인과 관련된 단위
2. 박스모델
1) 박스 개요
html 문서의 기본요소들은 보이진 않지만 기본적으로 박스형태로 정의된다.
웹페이지의 레이아웃은 이러한 박스들을 상하좌우로 적절하게 배치하는 것을 의미한다.
안쪽 순서대로
- content : 콘텐츠 영역 -> 텍스트 및 이미지의 실제 영역
- padding : 테두리와 컨텐츠 사이의 안쪽 여백
- border: 박스를 둘러싼 테두리 영역 [보통 보이지 않게 설정]
- margin : 박스의 외부영역 다른 박스와의 여백
2) 박스 크기
박스 요소에 크기를 지정할 경우 기본적으로 콘텐츠 영역에 적용되지만
실제 박스 크기는 border, margin, padding이 모두 더해져야 한다.
- <div width = "300px"> : 콘텐츠 영역이 300px [즉, 박스 영역과 무관하게 콘텐츠 영역이 300px]
- 박스 크기 계산을 편하게 하려면 border 기준
- box-sizing 속성 : border-box로 지정 [default : content-box, 부트스트랩의 경우에도 border-box가 기본]
3) border 속성
- border-width
- 테두리 두께 지정
- border-style
- 테두리 모양 지정 [4곳의 테두리 각각 다르게 지정 가능 ex. border-top-style]
- border-color
- 테두리의 색상 지정
- border-radius
- 테두리의 모서리를 둥글게 하는 속성 [반지름의 크기를 px, %등의 단위 이용]
- Shorthand
- 여러 속성을 묶어 단축형으로 사용
- border : width, style, color 순 나열
div{
border-width: 2px 10px 4px 20px;
border-width: 2px 10px;
}
div{
border:5px solid red;
border-left: 5px solid red;
}
4) margin 속성
박스와 인접 요소간의 여백
p{margin :10px 5px 15px 20px;} //top right bottom right 순
p{margin :10px 5px 15px;} // top, right left, bottom
p{margin :10px 5px;} //top bottom, right left
p{margin :10px;} //All
- auto: 브라우저가 자동으로 마진 조정 -> 박스요소를 가운데 정렬 할 때 사용
- inherit: 부모 요소의 마진 속성 상속
3. 레이아웃
박스의 배치 방법을 결정하는 속성[position]과 나란히 배치되는 박스 콘텐츠 지정하는 속성[float, display]가 있다.
1) 그리드 시스템 [table, float/display, flexbox, css grid]
화면을 테이블 형태로 격자로 나누는 것을 말하며 [css 라이브러리인 bootstrap의 경우 12개까지 컬럼 분할]
1~3 컬럼 구조
- 가로폭을 100%로 두고 분할하는 영역을 원하는 비율로 크기 지정
- 하나의 컬럼안에서 분할이 필요하면 해당 컬럼을 100%로 가정하고 분할
2) 컨테이너
다른 구성요소를 포함하는 박스영역
즉, 실제 구현할 때는 <div> 속에 다른 <div>가 들어가는 형태
<div class="container">
<div class="header">
</div>
<div class="contents">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div class="footer">
</div>
</div>
- container class는 header, contents, footer를 가지는 컨테이너
- contents class는 box 클래스 요소를 가지는 컨테이너
4. position
박스 구성요소를 배치하기 위한 속성 [중요]
1) static
- 포지션 속성의 기본값
- 나열한 순서대로 배치 원하는 위치에 배치 불가
- 왼쪽에서 오른쪽으로 추가, 공간이 없으면 다음 줄
- div 같은 블럭 요소들의 경우 위에서 아래로 배치 [float 속성을 이용해 좌우로 배치 가능]
2) relative
- static처럼 순서대로 배치되지만, 원하는 위치 지정 가능
- 원래 있던 위치로부터 상대적인 위치에 지정 가능
- 음수값으로 지정을 하면 반대방향으로 지정
3) abolute
- 요소를 좌표로 원하는 위치에 배치
- 부모요소를 기준으로 가장 가까운 상위 요소 중 포지션 속성이 relative인 요소
- 상위 요소가 없다면 브라우저 좌측 상단을 기준
- 박스속에 박스를 넣는다면 div-> relative, div-> absolute로 위에서 부터 거리와 왼쪽으로 부터 거리를 지정
4) fixed
- absolute 속성과 같이 좌표로 위치 지정하지만 기준이 브라우저 창
- 페이지를 스크롤하더라도 고정, 항상 같은 위치 유지
5) z-index
- 박스들이 중첩되는 경우 박스들의 수직 위치 조정
- 맨 위로 보내기, 맨 뒤로 보내기
- 높을수록 위로, 작을 수록 아래로 배치
- -인 경우 기준 콘텐츠의 아래쪽
- position 속성이 적용될 경우에만 작용
5. float/display
1) float 속성
- div같은 block 요소를 화면위에 떠있는 형식으로 배치 가능
- 좌측이나 우측부터 정렬되는 박스 콘텐츠 배열 가능
- float
- float: left, float: right;를 지정해 width는 콘텐츠 표시하기 위해 필요한 만큼만 차지하고 공간을 비워둠
- float 속성이 더이상 동작하지 않기 원하면 clear 속성 지정
- clear
- float 속성 중지
- float:left; -> clear:left;로 무효화
- clear: both; -> 기본상태로 돌리는 방법
2) display 속성
요소를 보여주는 방식을 지정하는 속성
콘텐츠를 보이지 않게 하거나 float을 대체해 나란히 배치하는데 사용가능
- none: 보이지 않음, visibility:hidde 속성과 유사하지만 none의 경우 영역 자체가 사라짐
- block: 블록 박스 [div의 기본 속성]
- inline: 인라인 박스 [span의 기본 속성]
- inline-block : block과 inline의 중간 형태
- block과 inline
- block
- width=100%인 태그들로 요소를 나란히 배치 불가
- inline
- 콘텐츠의 크기만큼만 자리차지해 다른 콘텐츠와 나란히 배치가능
- width와 height 사용 불가 [원하는 크기로 지정 불가]
- inline-block
- block 태그에 inline속성 가지도록 변경 가능 [반대도 가능]
- 즉, inline 속성인 다른 콘텐츠와 나란히 배치하면서 block 속성인 width와 height을 지정 가능
- block
6. 박스요소 정렬
문서내 영역을 정렬하기 위해 박스 요소들로 배치
1) 블럭 요소 가운데 정렬
- margin:auto;
- <div>등으로 블럭 박스를 만들었을 경우
- width 속성이 100%이거나 정의되지 않으면 정렬 불가
.box-center{
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
}
2) 블럭 요소 좌우 정렬
- margin: absolute;
- position 속성을 absolute로 두고 좌우로 원하는 위치에 정렬
.box-right{
margin: absolute;
right: 0px;
width: 50%;
border: 3px solid green;
padding: 10px;
}
3) 블럭 요소 수직 정렬
- padding 속성으로 박스의 안쪽 위/아래 여백을 동일하게 지정
.box-vcenter{
border: 3px solid green;
padding: 50px 0; //위/아래 50px, 좌/우 0
}
4) 이미지 가운데 정렬
- 부모 요소의 속성에 text-align : center를 사용하는 방법
- img 태그만 사용하면 블록 속성으로 바꿔서 margin:auto를 사용하는 방법
div{\
text-align:center;
}
img{
display: block;
margin: auto;
}
<div>
<img src="a.jpg">
</div>
'Programming > Web Programming (2021)' 카테고리의 다른 글
[웹프로그래밍] 9. 복합 셀렉터 (0) | 2021.05.17 |
---|---|
[웹프로그래밍 실습] 8. 박스모델과 포지셔닝 (0) | 2021.05.10 |
[웹프로그래밍 실습] 7. CSS 셀렉터와 스타일 속성 (0) | 2021.05.03 |
[웹프로그래밍] 7. CSS 셀렉터와 스타일 속성 (0) | 2021.05.03 |
[웹프로그래밍 프로젝트] 1. HTML로 포탈 메인화면 만들기 (0) | 2021.04.19 |