1.1 CSS 레이아웃이란? 그리드가 아닌 구성요소의 집합
웹페이지를 제작할 때에 가장 먼저 생각해야 하는 것은 화면의 분할이 아니라 웹페이지의 구성요소들과 이 구성요소들의 관계를 정립하는 것이다.
이렇게 구성요소와 구성요소들의 그룹을 확실하게 이해 해야 의미에 맞는 마크업을 이용하여 웹페이지를 퍼블리시 할 수 있게 된다.
1) 레이아웃에 사용되는 두가지 속성 position vs. float
- position
position은 static, relative, absolute의 세가지 값을 가질 수 있다.
1) static : 기본값
2) relative : static과 같지만 offset을 지정할 수 있고, 하위 엘리먼트 offset의 기준점이 된다.
3) absolute : 화면상에서 다른 컨텐츠에 위치에 영향을 미치지 않고 위치 지정이 가능하다.
- float
float은 left, right, none의 세가지 값을 가질 수 있다.
1) left : 엘리먼트를 좌측으로 배치함.
2) right : 엘리먼트를 우측으로 배치함.
3) none : float 시키지 않음
Position을 사용하면 코드상에서 제일 하단에 있는 블록을 페이지의 상단으로 이동 시킬 수 있을 정도로 자유로운 블록의 배치가 가능하다. 이에 반해 float은 지정된 위치에서 좌측 또는 우측으로만 배치가 가능하기 때문에 position과 같이 자유로운 블록 배치는 힘들다. 하지만 float된 블록의 높이가 유동적으로 변경되어도 레이아웃 조정이 손쉽기 때문에 보통 컬럼을 사용해야 하는 레이아웃에 사용된다.
2) relative와 absolute의 관계
absolute position은 relative position과 같이 사용하게 되면 보다 다양하고 자유로운 위치 조정이 가능해 진다.
absolute position을 사용했을때, top, left, right, bottom의 속성으로 offset을 지정하게 되는데 보통 이 경우 absolute position 블록의 상위에 아무것도 없기 때문에 이 offset이 브라우져 좌상단을 기준으로 지정된다.
하지만 absolute position 블록의 상위에 relative position 블록이 있으면 이 offset의 기준이 상위의 relative position 블록의 좌상단이 된다.
3) float 속성
float 속성을 이용해서 레이아웃을 작성할 때에는 컬럼 전체의 폭을 고정하기 위해서 바깥쪽에 감싸는 블록을 하나 두어야 한다.
또한 블록이나 엘리먼트를 float할 때에는 항상 width나 height를 지정해 주어서 확실한 영역을 차지하도록 하게 하고 float이 끝난 위치 바로 다음에 오는 엘리먼트에서는 clear 시켜주어서 전체 모양이 일그러지지 않게 주의하여야 한다.
또 float된 블록은 자신이 포함하고 있는 컨텐츠의 높이 만큼 영역이 확보되는 점도 주의하여야 한다.
float 속성은 하위 블록에 영향을 미치기 때문에 이 float 속성을 없애주는 clear 속성을 같이 사용해야 한다.
가장 기본적인 clear 속성의 사용은 float된 블록이나 이미지가 더이상 하위에 영향을 미치지 않게 하기 위해서 사용한다.
2. 목록(List)
웹사이트 컨테츠의 절반은 리스트라고 할 수 있을 정도로 리스트는 컨텐츠에서 상당히 많이 사용되는 형태이다.
□ ul (unordered list) : 순서가 없는 리스트
□ ol (ordered list) : 순서가 있는 리스트
□ dl (definition list) : term(<dt>), definition(<dd>) 쌍으로 이루어진 리스트
1) 목록의 여백과 모양
list를 나타내는 엘리먼트의 가장 큰 특지은 불렛이나 번호 등이 자동으로 나온다는 것이다.
<dl>은 자동으로 출력되는 것이 없고 단지 <dd>에 기본마진이 있는 것만 신경써서 스타일을 정의해주면 된다.
<ol>, <ul>은 하나의 <li> 좌측에 기본적으로 여백이 생기고 이 여백에 불렛등이 나오게 된다.
3. 박스 모델(Box Model)
Box는 컨텐츠 영역(width, height), 패딩영역(padding), 보더영역(border), 마진영역(margin), offset(top, right, bottom, left)으로 구성되어 있다. 가장 안쪽 영역은 width, height 속성으로 그 크기가 결정된다.
실제적으로 화면에서 보이는 영역은 컨텐츠, 패딩, 보더 영역이고 그 외곽의 마진과 offset은 실제적으로 화면상에서 box라고 인식 되어지지는 않는다.