당신은 모를 수도 있는 CSS의 7가지 단위
우리가 잘 알고 있는 CSS기술을 사용하는 것은 쉽고 간단하지만 새로운 문제에 맞닥드리면 해결하기 어려워집니다.
웹은 항상 성장하고 있고, 새로운 해결법 역시 계속 성장하고 있습니다. 그러므로, 웹 디자이너와 프론트 엔드 개발자로서 우리의 노하우를 활용할 수 밖에 없다는 것을 잘 알고 있습니다.
우리의 특별한 방법을 알면서, 단 한 번도 사용하지 않더라도 언젠가 필요한 때가 오면 정확한 방법을 실무에 적용할 수 있다는 뜻이기도 합니다.
오늘, 저는 이전엔 알지 못했던 몇 가지의 CSS 방법을 알려드리려고 합니다. 몇몇 수치 단위들은 픽셀이나 em과 비슷하지만 당신은 아마 단 한 번도 들어본 적 없을겁니다. 시작해볼까요.
어쩌면 당신에게 조금 익숙할 수 있는 단위로 시작해보죠.
em
은 현재의 font-size
를 정의합니다. 일례로, body 태그에 em
값을 이용해 폰트 사이즈를 지정하면 모든 자식 요소들은 body의 폰트 사이즈에 영향을 받습니다.< body > < div class = "test" >Test</ div > </ body > |
body { font-size : 14px ; } div { font-size : 1.2em ; // calculated at 14px * 1.2 , or 16.8px } |
여기, div에
font-size
를 1.2em
으로 지정했습니다. 이 예제에서는 14px을 기준으로 1.2배의 폰트 사이즈로 표현이 됩니다. 결과적으로 16.8px
의 크기가 됩니다.
그런데 여기 em으로 정의한 폰트 사이즈를 각각의 자식에 선언하면 어떤 일이 생길까요? 같은 CSS를 적용한 동일한 코드를 추가해보았습니다. 각각의 div는 각 부모의 폰트 사이즈를 상속받아 점점 커지게 됩니다.
< body > < div > Test <!-- 14 * 1.2 = 16.8px --> < div > Test <!-- 16.8 * 1.2 = 20.16px --> < div > Test <!-- 20.16 * 1.2 = 24.192px --> </ div > </ div > </ div > </ body > |
이것은 어떤 경우엔 바람직하겠지만 대부분의 경우, 단순하게 단일 사이즈로 표현하기도 하지요. 이런 경우 바로
rem
단위를 사용하면 됩니다. rem
의 "r"은 바로 "root(최상위)"를 뜻합니다. 최상위 태그(요소)에 지정한 것을 기준으로 삼으며, 보통 최상위 태그는 html
태그입니다.html { font-size : 14px ; } div { font-size : 1.2 rem; } |
이전 예제에서 만든 복잡한 단계의 세 div는 모두
16.8px
의 폰트 사이즈로 표현되었습니다.그리드시스템에 좋겠죠.
rem은 폰트에서만 사용하진 않습니다. 예를 들어, 그리드 시스템이나
rem
을 이용한 기본 폰트 사이즈 기반으로 만든 UI 스타일, 그리고 em
을 이용해 특정 위치에 특별한 사이즈를 지정할 수도 있습니다. 보다 정확한 폰트 사이즈나 크기 조정을 가능하게 해줄 겁니다..container { width : 70 rem; // 70 * 14px = 980px } |
개념적으로 보면, 이 아이디어는 여러분의 콘텐츠 사이즈를 조절 할 수 있는 인터페이스 전략과 유사합니다. 그러나 모든 경우에 반드시 이런 방법을 따를 필요는 없습니다.
지금 사용이 가능한가?
rem (root em) 단위의 호환성은 caniuse.com에서 확인할 수 있습니다.
vh와 vw
반응형 웹디자인 기술은 퍼센트 값에 상당히 의존하고 있습니다. 하지만 CSS의 퍼센트 값이 모든 문제를 해결할 좋은 방법은 아니지요. CSS의 너비 값은 가장 가까운 부모 요소에 상대적인 영향을 받습니다. 만약 너비값과 높이값을 부모 요소의 너비값의 뷰포트에 맞게 사용할 수 있다면 어떨까요? 바로
vh
와 vw
단위가 그런 의도에 맞는 단위라는 사실.vh
요소는 높이값의 100분의 1의 단위입니다. 예를 들어 브라우저 높이값이 900px
일때 1vh
는 9px이라는 뜻이 되지요. 그와 유사하게 뷰포트의 너비값이 750px
이면 1vw
는 7.5px
이 됩니다.
이 규칙에는 무궁무진한 사용방법이 있습니다. 예를 들면, 최대 높이값이나 그의 유사한 높이값의 슬라이드를 제작할때 아주 간단한 CSS만 입력하면 됩니다.
.slide { height : 100 vh; } |
스크린의 너비값에 꽉 차는 헤드라인을 만든다고 상상해보세요.
vw
로 폰트 사이즈를 지정하면 쉽게 달성할 수 있습니다. 저 사이즈는 브라우저의 너비에 맞춰 변할 것입니다.지금 사용 가능한가?
뷰포트 vw, vh 단위의 호환성은 caniuse.com에서 확인할 수 있습니다.
vmin과 vmax
vh
와 vw
이 늘 뷰포트의 너비값과 높이값에 상대적인 영향을 받는다면 vmin
과 vmax
는 너비값과 높이값에따라 최대, 최소값을 지정할 수 있습니다. 예를 들면 브라우저의 크기가 1100px 너비, 그리고 700px 높이일때 1vmin
은 7px이 되고 1vmax
는 11px이 됩니다. 너비값이 다시 800px이 되고 높이값이 1080px이 되면 vmin
은 8px이 되고 vmax
는 10.8px
이 됩니다.
어때요, 이 값들을 사용할 수 있나요?
언제나 스크린에 보여지는 요소를 만든다고 상상해보세요. 높이값과 너비값을
vmin
을 사용해 100으로 지정합니다. 예를 들어 터치화면 양 변에 가득차는 정사각형 요소를 만들때는 이렇게 정의하면 됩니다..box { height : 100 vmin; width : 100 vmin; } |
만약 커버처럼 뷰포트 화면에 보여야 하는(모든 네 변이 스크린에 꽉 차 있는) 경우에는 같은 값을
vmax
로 적용하면 됩니다..box { height : 100 vmax; width : 100 vmax; } |
알려드린 이 규칙들을 잘 조합해 활용하면 뷰포트에 맞는 매우 유연한 방식으로 사이즈 조절을 가능하게 할 수 있습니다.
지금 사용 가능한가?
뷰포트 단위: vmin, vmax의 호환성은 caniuse.com에서 확인할 수 있습니다.
ex와 ch
ex
와 ch
단위는 현태 폰트와 폰트 사이즈에 의존한다는 점에서 em
그리고 rem
과 비슷합니다. em
과 rem
과 다른 점은 이 두 단위가 font-family
에 의존한다면 다른 두 단위는 폰트의 특정 수치에 기반한다는 점입니다.ch
단위, 또는 글꼴 단위는 제로 문자인 0
의 너비값의 "고급 척도"로 정의됩니다. 흥미로운 의견은 에릭 마이어의 블로그에서 확인할 수 있습니다. 그러나 기본 컨셉은 monospace 폰트의 N
의 너비값을 부여 받았다는 것이며, width: 40ch;
는 40개의 문자열을 포함하고 있다는 뜻입니다. 이 특정 규칙은 점자 레이아웃에 기반하고 있지만, 이 기술의 가능성은 간단한 어플리케이션 그 이상으로 확장할 수 있습니다.ex
단위의 정의는 "현재 폰트의 x-높이값 또는 em
의 절반 값"이라고 할 수 있습니다. x-높이값
은 소문자 x의 높이값이기도 합니다. 폰트의 중간 지점을 알아내기 위해 자주 사용하는 방법입니다.
이 단위는 타이포그래픽에서 세밀한 조정을 할 때 많이 사용합니다. 예를 들어, 위첨자 태그인
sup
에게 position을 relative로 하고 bottom 값을 1ex라고 하면 위로 올릴 수 있습니다. 아래첨자 역시 비슷한 방법으로 아래로 내릴 수 있습니다. 브라우저는 위첨자와 아래첨자의 기본값을vertical-align
으로 정의하고 있지만, 보다 정교한 사용법을 알고 싶다면 아래와 같이 작성할 수 있습니다.sup { position : relative ; bottom : 1 ex; } sub { position : relative ; bottom : -1 ex; } |
지금 사용 가능한가?
여러분의 막강한 CSS 도구들의 무한한 확장과 지속되는 개발환경에 계속 눈을 뜨고 지켜보세요 아마 특정 문제를 해결하기 위해 예상치 못한 해결방법으로 이 애매한 특정 단위들을 사용할 수도 있을 것입니다. 새로운 스펙들을 시간을 들여 읽어보세요. cssweekly와 같은 좋은 사이트에도 가입해서 지속적인 뉴스를 업데이트 받아보세요. 그리고 주간 업데이트에 가입하는 거 잊지 마세요. 무료 튜토리얼과 Tuts+의 웹디자인에서 나오는 다양한 자료들을 만날 수 있습니다.
CSS 단위의 여신들.
댓글
댓글 쓰기