오로지 CSS만으로 어떤 사물을 그럴듯하게 표현해 놓은 것을 보면 항상 신기해하는데 이번에 목격한 것(WWDC 2011 Session Video 중)은 오직 CSS의 Linear Gradient property를 써서 리본(ribbon)을 그려낸 것으로 다음과 같이 쓰였다.

.ribbon {
  background-image: 
    -webkit-linear-gradient(left#900#f33 10pxrgba(255, 0, 0, 0) 50px),
    -webkit-linear-gradient(135degtransparent 25%red 25%); /* Chrome 10+, Saf5.1+ */
  background-image: 
    -moz-linear-gradient(left#900#f33 10pxrgba(255, 0, 0, 0) 50px),
    -moz-linear-gradient(135degtransparent 25%red 25%); /* FF3.6 */
  background-image: 
    -ms-linear-gradient(left#900#f33 10pxrgba(255, 0, 0, 0) 50px),
    -ms-linear-gradient(135degtransparent 25%red 25%); /* IE10 */
  background-image: 
    -o-linear-gradient(left#900#f33 10pxrgba(255, 0, 0, 0) 50px),
    -o-linear-gradient(135degtransparent 25%red 25%); /* Opera 11.10+ */
  background-image: 
    linear-gradient(left#900#f33 10pxrgba(255, 0, 0, 0) 50px),
    linear-gradient(135degtransparent 25%red 25%);
}

앞으론 CSS property만으로 어떤 형태를 표현하고 있는지 짐작이나 할 수 있을까?(이)란 제목의 글 마저 읽기 →

스마트 폰 사용자가 증가하면서 덩달아 급격히 늘고 있는 모바일 브라우징으로 말미암아 다양한 화면 크기에 적절히 대처하려는 시도로 최근 주목받고 있는 웹 디자인 패턴이 Responsive Web Design이다.

CSS3 Media Queries를 써서 서로 다른 디바이스의 화면 크기에 맞춰 적당한 layout을 구현해서 최적화된 브라우징 경험을 제공하려는 것인데, 오래전부터 이곳 블로그도 모바일 기기만을 위한 링크를 따로 제공하고 있지만 별로 만족스럽지는 않았는데, 최근 올라온 CSS3 media queries를 사용한 웹 디자인 소개 글을 참고해서 “반응형 웹 디자인”을 구현해 보았다.

윗글에 설명된 내용 중 중요한 것 몇 가지를 간추리면, 우선 Internet Explorer 8 이하 버전에선 CSS3 media queries를 알아듣지 못하기 때문에 JavaScript의 도움이 필요하다. 대표적으로 아래 두 가지가 있다.

여러 media types와 더불어 min-width와 max-width의 media queries만 쓴다며 크기도 작고 실행속도도 빠른 Respond가 안성맞춤.

다음에 웹 페이지에 포함된 그림은 화면 크기에 맞게 그 크기도 줄어들고 늘어나야 하는데 다음과 같이 지정해준다.

img {
  max-width: 100%;
  height: auto;
}
.ie8 img {
  width: auto; /* for IE8 only */
}

Viewport 정의는 다음과 같이.

<meta name="viewport" content="width=device-width, initial-scale=1.0">

이미 viewport에 맞게 디자인하였다면 iOS의 Text 크기 자동 조절 기능은 필요 없을 것이다.

html {
  -webkit-text-size-adjust: 100%;
}

덤으로, jQuery plugin인 FitText를 쓰면 header와 같은 곳에 사용된 큼지막한 글자도 화면 크기에 맞게 자동으로 그 크기를 조절해줄 수 있다.

이젠 Responsive Web Design이 선택이 아닌 필수가 되면서, 작은 화면에 보일 ‘content’가 더 돋보이게 되는 순간이다.

기타 참고 사이트:

  • Media Queries – Responsive Web Design을 적용한 사이트를 모아놓았다.
  • 320 and up – A ‘tiny screen first’ boilerplate extension.
  • tinySrc – 작은 화면의 휴대용 기기를 위한 그림 크기 자동 조절/전달 서비스.
  • imgsizer.js – 작은 크기로 축소된 그림이 구 버전 IE(IE7 이하)에서도 흉하게 보이지 않도록 해주는 스크립트.
  • Detect Mobile Browser – Open source mobile phone detection.

현재 제정되고 있는 CSS3 Module 중 CSS Multi-Column Layout Module은 Candidate Recommendation 상태로 거의 권고 마무리 단계에 이르렀으며, 웹 브라우저의 지원 상황도 다른 모듈보단 비교적 양호한 상태이다.

물론, IE나 기타 미지원 브라우저를 위한 간단한 JavaScript pollyfill도 마련되어 있으며, 아무런 조치를 취하지 않아도 원래 내용을 전달하는 데는 별문제가 없어서, 지금 당장 써먹어도 큰 불편은 없다고 할 수 있는데 요놈의 쓰임새는 다음과 같다.

.two-col {
  -webkit-column-count: 2;
  -webkit-column-gap : 20px;
  -webkit-column-rule: 1px dashed #ccc;
  -moz-column-count: 2;
  -moz-column-gap : 20px;
  -moz-column-rule: 1px dashed #ccc;
  column-count: 2;
  column-gap : 20px;
  column-rule: 1px dashed #ccc;
}

이렇듯 그 사용 방식도 명확해서 이해하기도 쉬운데, 브라우저별 구현 방식에서 아직 몇 가지 소소한 차이가 있어서 예상치 못한 부작용을 가져올 수도 있다. Safari와 Firefox의 CSS3 Multi-Column Layout Module 구현 버그(이)란 제목의 글 마저 읽기 →

@font-face {
  font-family: 'MyFontFamily';
  src: url('myfont-webfont.eot?') format('eot'),
       url('myfont-webfont.woff') format('woff'),
       url('myfont-webfont.ttf') format('truetype'),
       url('myfont-webfont.svg#svgFontName') format('svg');
}

새 @font-face 문법은 전에 문제가 되었던 Android 플랫폼에서도 잘 보인다고 함.
The New Bulletproof @Font-Face Syntax

과거 WebKit 브라우저에서의 CSS3 Gradients 용법은 Mozilla에서 사용되던 것과 달리 독자적인 문법이 사용되었는데, 이것이 CSS Image Values and Replaced Content Module Level 3에 제시된 용법을 지원하기 시작하면서 통일화되었다는 소식.

당장은 먼저 WebKit nightly build부터 적용되고 나중에 Safari의 정식 버전에서도 이 용법을 지원하게 된다. 물론 과거 사용되던 용법도 얼마간 계속 지원될 예정이다.

div {
  background-image: -webkit-gradient(linear, left topright top, color-stop(0%red), color-stop(51%green), color-stop(100%blue)); /* Safari */
  background-image: -webkit-linear-gradient(leftredgreenblue); /* WebKit nightly */
  background-image: -moz-linear-gradient(leftredgreenblue); /* Modzilla Firefox */
}

물론, 아직 Opera와 IE9의 지원 상황은 불투명해서 이들만을 위한 대체 용법도 신경 써야 하지만 그동안 혼용되어 사용되던 용법의 통일은 환영할 일. 현재 제안된 표준안은 아직 draft 상태로 앞으로 그 용법이 또 바뀔 가능성은 남아 있다.