새로운 CSS 레이아웃
이 책은 grid-layout, flex-layout을 주로 다루는 책이다.
이 책에서 다루는 내용들 중 새롭거나 기업해둘만 한 것 위주로 글을 써본다.
1. display: table을 사용하면 높이가 동일한 레이아웃을 만들 수 있다.
2. 컴포넌트를 조합하여 페이지를 제작하는 방식이 유행했었는데, 이런 방법을 아토믹 디자인(atomic design)이라고 한다.
3. 제작한 사이트에 대한 문제를 확인할 수 있는 사트가 있는데 팀 카들렉(tim kadlec)이 만든 '내 사이트가 지불하는 비용은?(What Does My Site Cost? - https://whatdoesmysitecost.com/)'
4. 레이아웃을 잘 만드는 것도 중요하지만, 웹 사이트의 성능과 속도를 고려하며 만드는 것도 중요하다.
5. shape-outside라는 css 속성이 있다. 이 속성은 float 속성이 있을 때에만 사용 가능하다. shape-outside: circle(50%)라면, 왼쪽에는 이미지가 있고, 이미지 옆에는 동그라미 모양으로 글이 쓰여진다.
6. multi-column-layout(column-width, column-count) 속성이 있다. 이 속성은 연속적인 콘텐츠를 여러 컬럼으로 나누어 배치할 때 사용하는데 뉴스 기사를 예로 들 수 있다.
아래부터는 flex-layout, grid-layout과 관련된 내용들이다.
flex-layout
- align-items: 컨테이너 내부의 모든 flex 아이템에 적용
- align-self: 개별 flex 아이템에 사용 가능, 값을 덮어쓸 수 있음
- space-between: 아이템 사이의 공간을 똑같은 크기로 표시
- space-around: 모든 아이템 양쪽에 똑같은 크기의 마진을 부여
- space-evenly: 모든 공백을 동일하게 배분(아이템-아이템과 컨테이너-아이템 사이의 크기가 동일)
- flex-grow: flex 아이템이 flex-basis에 설정한 크기보다 커질 수 있는지를 설정한다.
- flex-shrink: flex 아이템이 flex-basis에 설정한 크기보다 작아질 수 있는지를 설정한다.
- flex-basis: flex 아이템의 너비(flex-direction: row)나 높이(flex-direction: column)를 설정할 때 사용 가능하다. 모든 flex 아이템에 flex-basis 속성을 200px로 설정한다면, 브라우저는 각 flex 아이템에 200px 크기의 공간을 할당한다.
grid-layout
- auto-fit: 아이템의 개수가 부족해도 빈 공간을 남겨두지 않음(각 아이템에 균등하게 분배)
- auto-fill: 아이템의 개수가 부족해서 끝에 빈 공간이 생겨도 그대로 남겨둠
따라서, 트랙의 개수를 그대로 유지하고 싶다면 auto-fill, 아이템의 개수가 트랙의 개수보다 작은 경우 콘텐츠가 컨테이너를 채우도록 하고 싶다면 auto-fit
feature queries
media query가 화면 크기나 종류의 지원을 확인하는 용도라면 feature query는 css의 기능 지원을 확인하는 용도이다. grid-layout이나 flex-layout을 사용할 때에는 feature query가 필요하다.
@supports (display: grid) {
// css grid가 지원되는 브라우저에서만 적용되는 코드
.container {
display: grid;
...
}
}
@supports (display: -ms-grid) {}
@supports (display: grid) or (display: -ms-grid) {}
@supports (display: grid) and (shape-outside: circle(50%) {}
조언
이 책의 마지막에서 조언을 하나 한다. 그 조언이 마음에 와닿아 적어본다.
새로운 것을 가지고 놀 시간을 가져라.
개인 프로젝트를 해도 좋고, 코드펜이나 JS빈 같은 환경을 활용해도 좋다.
자신의 한계를 시험해보라.
작업이 생각대로 되지 않을 때에는 질문을 해보라.
다른 사람들이 해준 답변을 보고 자신의 아이디어나 요구사항들을 공유하는 일도 두려워하지 말라.
댓글
댓글 쓰기