CSS 이야기: CSS 2.1과 2의 관계

현재 공식적인 CSS 최종 권고안은 1998년에 발표된 CSS 2이고, 이를 보완한 CSS 2 리비전 1(CSS 2.1)이 2007년 권고안 후보(CR: Candidated Recommendation)로서 발표되었습니다. 즉, CSS 2.1은 아직 최종 권고안이 아니고, 최종 권고안이 되기 위한 과정을 밟고 있는 단계지요.

그럼 한 가지 질문을 던져보겠습니다. 과연 CSS 2와 CSS 2.1 중 어떤 규격을 웹 브라우저 같은 사용자 에이전트가 더 잘 지원할까요? CR 단계에 있는 CSS 2.1일까요? 아니면 오래전에 만들어진 CSS 2일까요?

처음 CSS를 접했을 때 저는 당연히 CSS 2를 더 잘 지원할 것이라 믿었습니다. CSS 2.1은 불완전한 규격이라 생각했고, 무엇보다 인터넷 익스플로러 7, 파이어폭스 2, 오페라 9 등의 브라우저가 발표된 2006년 당시까지도 CSS 2.1은 초안(working draft) 단계에 머물고 있었으니까요.

하지만, 실제로 CSS 2 기능 중 상당수는 최신 브라우저에서도 아직 지원되지 않고 있습니다. 또한, W3C가 제공하는 CSS 검증 서비스 같은 경우 기본적으로 CSS 2.1을 기준으로 결과를 알려줍니다. 그렇다면 왜 이런 현상이 생겼을까요?

이런 의문에 대한 해답은 CSS 2.1 규격 소개에서 찾을 수 있습니다. 그 내용을 바탕으로 CSS 2.1이 왜 만들어졌고, 현재 어떠한 위치를 차지하고 있는지 알아보겠습니다.

CSS 2.1을 제정한 이유

먼저, 규격을 제정한 W3C가 밝힌 이유를 요약해봤습니다.

CSS 2가 발표된 1998년 이후로 많은 사람들이 CSS를 이용하면서 CSS 2 규격에 포함된 다양한 오류가 밝혀졌다. 이런 오류는 정오표를 발표를 통해서 계속 수정되고 있지만, 이런 사항을 CSS 규격 자체에 반영할 기회는 지금까지 없었다.”

“문제들의 상당수는 새로 등장할 CSS 3 규격에서 처리되겠지만, 현재 상태가 CSS 2의 구현과 상호 운영성(interoperability)에 걸림돌이 되고 있다. CSS 2.1 규격은 이런 상황을 해결하기 위해 만들어졌다.”

즉, CSS 2.1은 CSS 2의 오류를 해결하려는 목적으로 만들어졌음을 알 수 있습니다. 하지만, XHTML 1.0에서처럼 오류를 반영한 새 버전(second edition)을 내놓는 대신 개정판(revision) 제정을 선택했는데 그만큼 규격 적용과 구현에 중대한 영향을 미치는 변화가 이루어졌다는 뜻입니다. W3C의 프로세스 문서에 따르면 이미 발표된 최종 권고안에 새로운 기능을 추가하기 위해서는 규격을 새로 만들 때와 동일한 일련의 과정을 거쳐야 합니다. 그래서 CSS 2.1을 초안(working draft) 단계부터 새로 시작한 것이지요.

이런 변화의 배경에는 CSS 커뮤니티의 지속적인 피드백과 비판이 있었습니다. 그 예로 오페라 브라우저 개발에 참여하고 있는 Anne van Kesteren의 CSS 2.1 관련 글 일부를 인용하겠습니다.

CSS 2.1의 가장 중요한 변화는 이상(W3C의)이 아닌 브라우저에 초점을 맞췄다는 사실이다. CSS 2의 일부 내용은 쓸모가 없거나 비합리적이고, 브라우저는 비합리적인 규격을 보다 합리적인 다른 방식으로 구현해왔다.”

그럼 CSS 2.1은 어떻게 사용자 에이전트에 초점을 맞췄을까요? W3C는 그 방향성을 다음과 같이 밝히고 있습니다.

  • CSS 2 내용 중에서 널리 받아들여지고 구현된 부분에 대한 호환성은 계속 유지한다.
  • 발표된 모든 CSS 2 오류를 반영한다.
  • CSS 2 규격과 완전히 다른 방식으로 구현이 이루어진 경우에는 일반적인 방식을 따르도록 규격을 변경한다.
  • 현재까지 구현되지 않아서 CSS 사용자들이 받아들이지 않은 CSS 2 기능은 제거한다.
  • CSS 3에서 폐기될 CSS 2 기능을 제거함으로써 CSS 3에 도입될 기능을 대신 받아들이도록 장려한다.
  • 경험적으로 CSS 2를 구현하는데 필요하다고 여겨지는 속성 값은 새롭게 추가한다.

특히 세 번째와 네 번째 항목이 사용자 에이전트에 대한 존중을 잘 보여줍니다. 규격을 내놓고 따르기를 강요하는 것이 아니라 사용자 에이전트의 일반적인 구현 방식에 따라서 규격을 수정하겠다는 뜻이니까요.

다섯 번째 항목에 대해서는 앞서 언급한 Anne van Kesteren의 글에 좋은 예가 있습니다.

CSS 3에서는 ::marker 가상 요소가 도입될 예정이므로 display 속성 값인 marker가 제거되었다. 마찬가지로 CSS 3 Speech 모듈과의 상위 호환성을 위해서 aural 미디어 타입 사용을 금지(deprecate)시키고 대신 speech 미디어 타입을 도입했다.”

위에 언급된 display: markeraural 미디어 타입을 제대로 지원하는 사용자 에이전트는 극히 드뭅니다(aural을 지원하는 Emacspeak같은 일부를 제외하고). 만약 CSS 3에 도입될 기능이라 해도 현재 사용자 에이전트가 폭넓게 지원하고 있다면 얘기는 달라졌을 것이라 생각합니다.

마지막 방식에 따라서 전부 다섯 가지 항목에 대한 속성 값이 추가되었는데 CSS 2.1 부록 C에 수록된 200가지가 넘는 변경 사항과 비교해보면 극히 미미한 변화라고 생각합니다.

CSS 2.1의 상위 호환성과 하위 호환성, 그리고 위치

CSS 2.1의 호환성에 대해서 W3C는 다음과 같이 설명하고 있습니다.

CSS 2 스타일 시트는 CSS 2.1과의 상위 호환성을 완벽히 보장하지 못하지만, CSS 2.1 기능에 한정된 스타일 시트는 최신 사용자 에이전트의 지원과, 앞으로의 상위 호환성을 확보하기가 더 쉽다. 하위 호환성을 지키지 못한다는 점은 바람직하지 않지만, CSS 2.1 리비전을 통해 얻게 될 장점은 충분히 가치있다고 믿는다.”

CSS 2.1은 CSS 2를 기반으로 만들어졌고, CSS 2를 대체하려는 목적을 갖고 있다. CSS 2의 일부는 CSS 2.1에도 그대로 유지되고, 일부는 변경되었으며 일부는 삭제되었는데 삭제된 부분이 미래의 CSS 3 규격에서 다시 사용될 수도 있다. 미래의 규격은 CSS 2.1을 참조해야 하지만 CSS 2.1에서 누락된 CSS 2 기능이 필요할 경우에는 CSS 2의 해당 기능을 참조하거나 이러한 기능을 포함하고 있는 CSS 3 모듈을 참조할 것이다.”

† 사실 “상위 호환성”이나 “하위 호환성”은 쉽게 설명할 수 있는 개념이 아닙니다. 처음에는 먼저 이 두 용어를 정의한 다음 설명할 생각이었는데 자료를 찾아보니 간단한 문제가 아니더군요. 그래서 이 글에서는 따로 설명하지 않겠습니다.

핵심은 CSS 2.1이 CSS 2의 추가 버전이 아니고, CSS 2를 완전히 대체할 규격이라는 사실입니다. 전례가 있는지 잘 모르겠지만 개인적으로는 CSS 2.1이 최종 권고안이 되면 CSS 2 규격은 폐기될 가능성도 있다고 생각합니다. 앞서 언급한 W3C의 프로세스 문서에는 특정 권고안에 심각한 오류가 있거나 특허권 문제가 있을 때 권고안 자체를 폐기시킬 수도 있다고 명시되어 있는데 그럴 경우에는 이후 발표되는 모든 기술 문서에서 해당 권고안을 참조할 수가 없기 때문에 CSS 2.1에서 삭제된 CSS 2 기능을 CSS 3에서 참조해야 할 경우를 생각하면 가능성이 크지는 않겠지만이요.

결론적으로, CSS 3로 넘어가기 전까지는 사실상 CSS 2.1이 최종 권고안이나 마찬가지라고 생각합니다. 웹 페이지를 제작하는 실무자가 신경써야 할 규격도 CSS 2.1이겠지요. 일례로 마이크로소프트사는 인터넷 익스플로러 8이 CSS 2.1을 완전히 지원할 것이라고 밝히고 있으며, 웹 표준 지원에 관한 오페라 기술 문서에는 오페라 9가 극히 일부를 제외한 모든 CSS 2.1 규격을 따른다고 명시되어 있습니다.

CSS 2.1의 미래

현 상태에서 CSS 2.1은 최종 권고안으로 채택될 날만을 기다리고 있습니다. CR 다음 단계인 PR(Proposed Recommendation)로 넘어가기 위해서 반드시 만족시켜야 할 조건 다섯 가지가 CSS 2.1 규격 서문에 나와 있는데 한 가지 요건인 최소한의 CR 기간(6개월)이 이미 지났기 때문에 사용자 에이전트의 지원이 확인되고 내부적인 테스트가 끝나면 머지 않아 PR 단계로 넘어갈 것이고, 최소한 4주간의 PR 단계를 거치면서 최종 검토를 한 후 자문 위원회의 승인을 거쳐 최종 권고안으로 발표될 것입니다.

한 가지 관심을 기울여야 할 부분이 있는데 바로 “위기에 처한 기능(features at risk)” 입니다. 위기에 처한 기능이란 W3C가 공개적으로 사용자 에이전트에게 구현을 재촉하는 기능을 말합니다. 다시 말해서 “빨리 이 기능을 구현하거나, 버그가 있는 구현을 바로잡지 않으면 CR이 끝나는대로 해당 기능을 제거하겠다.”라는 엄포입니다. 그러므로 변화의 가능성이 큰 기능이지요. 이렇게 CSS 2.1에서 위기에 처한 기능은 다음과 같습니다.

  • list-style-type에 사용되는 armenian, georgian, lower-greek 속성 값
  • id 선택자의 다중 id 속성 처리
  • 자동 테이블 레이아웃 알고리즘
  • quotes 속성과 open-quote, close-quote, no-open-quote, no-close-quote 키워드 값
  • XHTML body 요소의 overflowbackground 처리 문제

† 관심을 기울여야 한다고 했는데 사실 실무적으로는 다섯 번째 항목을 제외하면 그리 중요하지 않다고 생각합니다.

다섯 번째 항목에서 XHTML과 HTML에서 body 요소의 overflowbackground 처리가 약간 다릅니다. overflow를 예로 들면 XHTML에서는 최상위 요소(html)에 지정된 overflow 속성 값을 뷰포트에 적용시켜야 하지만, HTML에서는 html 요소의 overflow 값이 visible일 경우에 한해서 body 요소의 속성 값을 뷰포트에 적용시키도록 규정되어 있는데 이런 예외 상황에 대한 처리가 XHTML에 그대로 이어졌다는 내용입니다.

마치며

참 긴 글이지만 결론은 한 줄로 요약할 수 있을만큼 간단합니다. ^^;

웹 제작자에게 중요한 규격은 CSS 2가 아닌 CSS 2.1이다.

나름대로 열심히 자료를 찾고, 해석해봤는데 과연 얼마나 정확한 내용을 담고 있을지 모르겠네요. 특히 CR에서 PR로, 다시 최종 권고안으로 진행되는 과정은 참고한 W3C의 프로세스 문서를 충분히 검토하지 않아서 오류가 있을 가능성이 다분합니다. 오류를 알려주시면 정오표에 수록한 다음 나중에 이 글의 리비전을 만들 때 반영하도록 하겠습니다. :)

댓글 6개가 달렸습니다. 태그: , , ,

  1. 봄눈 | 2008-06-16 23:31

    좋은 글 감사합니다^^ 매번 크게 배우고 가네요~

  2. wystan | 2008-06-17 00:43

    저도 봄눈님께 많이 배우고 있습니다. 고맙습니다. ^^

  3. 성민장군 | 2008-06-21 01:17

    오늘, 아니 어제인가. ㅎ
    너무 반가웠습니다.
    항상 글만 보다가 실제로 뵙게 되니 너무 감동~
    글처럼 외모도 준수하시고.. ㅋㅋ 끝까지 연세는 안밝히시고..
    꼭 알아낼겁니다.
    모두 오늘 했던 얘기들처럼 잘해봐요~ ㅎㅎ

  4. wystan | 2008-06-21 21:02

    과찬이십니다. ^^;
    많이 부족한데 좋게 봐주셔서 고맙습니다.

    어제 모임은 참 즐거웠어요~ 좋은 말씀 많이 들었고요.
    특히 시멘틱 마크업에 대해서 다시 한 번 생각해보는 계기가 되었습니다.
    성민장군님 말씀처럼 웹의 근본은 마크업인데 “표현“에 신경쓰다보니 정작 중요한 것을 소홀히 하게 되네요.

    모두 힘내서 좋은 생각 발전적으로 키워나갈 수 있었으면 좋겠어요~~

  5. | 2009-12-09 12:37

    짱이십니다.
    그럼 혹시 기존사이트에서 css가 2인지 2.1인지 알 수 있는 방법이 있나요?? 단순히 바뀐 속성값을 보고 알 수 있는건가요??

  6. cartes | 2014-09-25 12:07

    좋은 글 감사합니다.

댓글이 닫혔습니다.