카테고리 보관물: CSS

CSS3 – 웹표준과 W3C

 

1. CSS3의 모듈

CSS3는 CSS2.1의 확장버전으로 CSS2.1이 HTML 요소의 효과를 위한 도구였지만 CSS3는 이 효과를 보다 멋지게 표현하기 위한 도구라고 할 수 있습니다. CSS3 단계부터는 CSS항목(Specification)에 대한 개별적인 개발이 아닌 모듈형태로 개발이 되면서 하나의 모듈에는 많은 항목이 있고 하나의 모듈은 독립체로 사용됩니다. 이러한 모듈에는 선택자(Selectors), 텍스트(Text), 배경(Background) 등 여러개가 있습니다. 이러한 모듈 형태의 잇점은 모든 CSS항목이 완료되기를 기다리지 않아도 단계별 발표를 할 수 있다는 것입니다. 즉 하나의 모듈만 완료되더라도 다음에 나오는 개발단계를 단독으로 거칠 수 있기 때문에 웹브라우저의 적용이나 사용이 보다 빨리 이루어진다는 것입니다.
<W3C >

위 표에서 보면 CSS Transform은 Working Draft로 되어있지만 웹브라우저에는 적용이 되어있어서 사용이 가능합니다. 아직 W3C의 최종 Recommendation을 거치지 않았는데도 사용이 가능한 것이죠. 웹브라우저 제작자들은 이러한 단계의 CSS를 사용하기 위해서는 아래처럼 독자적인 Prefix를 붙여서 사용합니다.

transform: rotate(30deg);
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Safari and Chrome */
-o-transform: rotate(30deg); /* Opera */
-moz-transform: rotate(30deg); /* Firefox */

2. W3C의 웹개발 단계

작년 9월 W3C(World Wide Web Consortium)에서 CSS4의 선택자 모듈에 관한 Working Draft를 발표했습니다 . 이것이 웹브라우저에 적용이 되면 웹디자인이 휠씬 편리해질 것입니다. W3C는 웹표준을 관리하기 위한 세계적인 기관으로 40여개 국가의 여러 기업, 기관들이 참여하여 웹에 사용되는 각종 웹언어를 개발하고 시험하기위해 단계별 발표를 합니다. Working Draft는 이러한 여러 단계중에 초기에 속합니다. 단계별 수준은 다음과 같습니다.

1. Working Draft

웹 커뮤니티의 리뷰를 위해 발표되는 단계로 리뷰를 통해 수정이 가해지고 여러단계의 Working Draft를 거칠 수 있습니다. Draft는 초안을 의미합니다.

2. Last Call

최종 주석을 위한 마감시간이 정해진 Working Draft입니다. 개발자 그룹의 의도대로 모듈이 작동하는 단계이지만 이후에도 중요한 수정이 가해지거나 다음단계로 넘어가기 위한 계획에 포함될 수도 있습니다.

3. Candidate Recommendation

모듈이 충분한 조건을 갖추고 안정적이며 웹브라우저 제작자들에게 적용을 권장할 만하고 개발자들도 상시 사용이 가능한 수준의 단계로 이때부터는 웹브라우저별로 달려있는 Prefix를 뗄 수가 있습니다. 이 단계에서도 수정이 가해질 수도 있지만 심각한 정도의 수정은 아닙니다.

4. Proposed Recommendation

최종 서명을 위한 W3C Advisory Committee에 보내질 정도로 성숙하여 충분한 리뷰를 거친 단계입니다. 이 단계이후로는 수정은 거의 없습니다.

5. Recommendation

완성, 종료를 의미하며 “표준”이라고 말할 수 있는 단계입니다.

3. CSS3의 주요 내용

이미지를 사용하지 않는 시각적 효과

이전단계의 CSS에서는 이미지 파일을 사용해야지만 가능했던 시각적 효과를 단지 코드만을 이용하여 가능하도록 했습니다. 예를 들면 둥근 모서리(rounded corners), 그림자 효과(drop shadows), 반투명 배경(semitransparent backgrounds), 그래디언트(gradients), 이미지 테두리(images for borders)가 있습니다. 이러한 새로운 속성들은 주로 배경(Background)이나 테두리(Border), 컬러, Image Values 모듈에 있습니다.

Box transformations

이 또한 시각적 효과를 위한 모듈로 박스의 위치를 조정한다든가 2D, 3D 공간 효과를 위한 모듈입니다. 예를들면 회전(Rotating), 확대 축소(Scaling), 기울이기(Skewing)입니다.

폰트 모듈

이제 폰트의 사용은 방문자의 컴퓨터에 내장된 폰트에 의존하지 않아도 됩니다. @font-face는 폰트파일을 서버에 업로드하여 웹디자이너가 원하는 폰트로 모든 방문자에게 동일한 폰트를 보여줄 수 있습니다.

강력한 선택자

CSS3에서는 십수개의 새로운 선택자를 도입했습니다. 대부분 pseudo-class와 attridute 선택자들입니다. HTML 요소의 특정한 부분을 타게팅하므로 웹디자인시 다양한 선택자는 자유로운 디자인을 가능하게 합니다.

Transitions and animations

CSS3의 트랜지션은 하나의 스타일에서 다른 스타일로의 부드럼고 점차적인 변화가 가능합니다. 예를 들면 마우스 오버시 버튼 색상의 변화를 줄 수 있습니다. 이는 애니메이션의 단순한 효과이지만 트랜지션모듈에 포함되고 애니메이션 모듈은 별도의 모듈로서 좀더 복잡한 스타일의 변화나 동작이 가능합니다. 이는 플래시나 자바스크립트가 필요하지 않습니다.

미디어쿼리(Media Queries)

미디어쿼리 모듈은 여러개의 스타일 시트를 여러종류의 스크린 사이즈에 따라서 변화가 가능하도록 합니다. 모바일 웹 시대에 적합한 모듈입니다.

다중 컬럼 레이아웃(Multiple-column layouts)

CSS3는 다중 컬럼 레이아웃이 쉽도록 새로운 모들을 개발했습니다. Multicolumn Layout은 하나의 그룹에 있는 텍스트가 신문처럼 여러개의 컬럼으로 나뉠 수 있도록 하는 모듈입니다. Flexible Box Layout은 기존의 position이나 float가 하는 것보다도 신축성있게 여러개의 블럭을 수평이나 수직으로 나열할 수 있는 모듈입니다. 이밖에도 Template Layout이나 Grid Positioning과 같은 실험적인 모듈이 있습니다.

4. CSS와 웹브라우저

CSS3는 현재 국민 웹브라우저인 인터넷 익스플로러로 인해서 거의 사용되지 않고 있습니다. IE9버전이 지원을 하기는 하지만 제한적입니다. 캔아이유즈닷컴 에 가면 CSS뿐만 아니라 현재 개발중이거나 발표된 웹 언어의 사용이 웹브라우저별로 가능한지 확인할 수 있습니다.

각 항목을 선택하면 5대 브라우저에서 어떤 버전이 가능한지 확인이되고 모바일 웹브라우저도 나옵니다.

CSS3의 애니메이션 부분을 보면 구글 크롬, 애플 사파리, 파이어폭스 등은 많은 버전이 지원이 가능하지만 인터넷 익스플로러는 아직 지원이 안되고 있습니다. 우리나라 국민의 대다수인 90%가 IE를 사용하고 있고 CSS의 적(Enemy)인 IE6버전을 사용하는 사람도 7%나 됩니다.

MS가 웹브라우저를 독점하던 시절의 IE6는 전세계적으로 90%이상의 점유율을 기록했습니다. 그 후유증이 위와같은 표로 나타납니다. IE는 지난해 말 공식적으로 인터넷 익스플로러 6버전을 사용하는 경우 업그레이드할 것을 권유하는 메시지를 띄우기로 결정했다고 합니다. 또한 위 사이트에 가면 IE가 지원하는 프로젝트인 IE6 카운트다운 에 참여할 수가 있죠. 즉 MS에서 제공하는 코드를 웹페이지에 삽입하면 IE6을 사용하는 방문자는 아래와 같은 메시지가 나옵니다.

한글을 선택하면 위 박스처럼 안내 메시지가 나옵니다. 우리나라의 컴퓨터 보급률에 비하면 7%는 적은 숫자죠. 이 버전을 사용하는 분들도 그만한 사정이 있는 것이겠죠.

5. CSS3와 모바일 웹브라우저

현재 모바일 웹 시장은 무한합니다. 미국의 리서치 기관인 가트너의 보고에 의하면 내년이면 모바일이 데스크탑을 넘어선다고 합니다. 모바일 웹브라우저는 HTML5와 CSS3를 적극 지원하고 있습니다. 특히 모바일 디바이스용으로 나온 제이쿼리 모바일 버전은 이 두가지 언어를 사용해야만 가능합니다.

웹브라우저 제작자가 새로운 기술인 CSS3와 HTML5의 지원 여부는 모바일시장에 달려있다고 생각됩니다. HTML5는 다양한 컨텐트 제작이 가능하므로 거의 대부분의 웹브라우저가 서로 새로운 기술을 지원하려고 적극 나서고 있습니다. 현재 HTML5의 다양한 속성도 웹브라우저 시장의 점유를 위해서 신속히 도입하려고 하죠. HTML5는 원래 2022년에나 표준으로 승인이 날 예정이지만 웹브라우저가 먼저 적용을 시키므로서 상단한 부분이 빠른 시일내에 모든 웹브라우저에 적용될 것입니다.

CSS3 – border-radius 속성 사용하기

CSS3의 border-radius는 CSS기초부분에서 많이 다루었는데 그만큼 웹페이지에서 많이 사용하는 속성입니다. 인터넷 익스프로러 8버전이하에서는 지원을 하지 않기 때문에 이미지 파일을 이용하여 여러가지 방법으로 둥근 모서리를 만들었죠. IE에서 이것만 지원해도 웹디자인은 쉬워질텐데 말이죠.

1. 웹브라우저별 접두어(Prefix)

 

border-radius 속성은 IE8이하 버전을 제외하고는 거의 모든 웹브라우저에서 지원합니다. 우리나라에서는 IE의 사용자가 아주 많습니다. IE8 이하 버전의 사용자도 아직도 많은 수를 차지합니다. 그렇기 때문에 이미지를 이용하여 둥근 모서리의 박스를 만들어서 사용할 수 밖에 없습니다. 위 표를 보면 파이어폭스 3.6이나 안드로이드 브라우저 2.1에 접두어(Prefix)인 -moz-와 -webkit-이 붙어있는데 이 버전에서 border-radius를 사용하기 위해서는 이 접두어를 붙여야 효과가 나온다는 의미입니다.

border-radius 속성은 아주 많이 사용하기 때문에 대부분의 웹브라우저에서는 접두어 없이 사용이 가능하지만 다른 속성들, 예를 들면 gradient 같은 경우 아래 사진과 같이 웹브라우저의 모든 버전에 접두어를 사용해야 원하는 효과가 나옵니다.

이와같이 접두어를 사용해야하는 것은 이전글 에서 알아보았듯이 이 속성들은 W3C의 웹개발 발표단계에서 Working Draft 단계에 있기 때문입니다. 이는 아직 시험단계로 웹브라우저 제작자들이 각자의 웹브라우저에 적용을 하여 모든 웹브라우저 같은 결과를 나타낼때까지 시험을 거치게 됩니다. 그래서 통일된 효과가 나오면 W3C에서 Candidate Recommendation단계로 승인을 하여 접두어를 뗄 수가 있게 됩니다. 그러면 위 표도 깨끗해질 것입니다. 그때까지는 웹브라우저 제작자들은 CSS3의 각 속성을 적용시키고 실험을 하므로 업그레이드가 빈번하게 일어납니다. 작년같은 경우 파이어폭스가 무려 6단계의 업그레이드를 했습니다. 파이어폭스에서는 4주간의 간격을 두고 업그레이드하기로 했답니다.

2. border-radius 속성 사용하기

border-radius.zip

#header {
background:#fff;
border:1px solid #888;
padding: 20px 20px;
border-radius:15px;
}

첨부파일을 다운받아 압축을 풀고 CSS파일을 텍스트에디터에 열고 #header 에 위처럼 border-radius:15px;를 추가 한 다음 저장하고 웹브라우저에서 확인합니다. 모서리가 둥글게 나타납니다. 속성값인 15픽셀은 반지름을 의미합니다.

모든 블럭요소의 성격을 가진 요소에 border-radius:15px;를 추가해 봅니다. #content, h2, #sidebar, blockquote, #footer에 추가하고 웹브라우저에서 보면 위처럼 나옵니다.

#header {
background:#fff;
border:1px solid #888;
padding: 20px 20px;
-moz-border-radius:15px;
-webkit-border-radius:15px;
border-radius:15px;
}

앞에서 알아본 것처럼 모든 버전에서 사용이 가능하게 하려면 위처럼 접두어가 붙은 속성과 값을 입력합니다. 접두어가 붙은 것을 상위에 놓고 없는 것은 아래에 배치합니다. 왜냐하면 접두어를 붙여야만 사용이 가능하다가도 나중에 수정을 하여 업그레이드되면 접두어가 없이 사용할 수 있는 것이 표준이므로 표준인 것이 표준이 아닌것보다 우선적용할 수 있기 때문입니다. CSS는 마지막에 선언된 것이 이전에 선언된 것보다 우선 적용하게 됩니다. CSS에서 C는 Cascading의 약자인데 이러한 우선적용원리를 의미합니다.

3. border-radius의 단축형

위에서 border-radius의 속성값으로 하나의 값을 입력했지만 사각형의 모서리는 4개이므로 4개의 값을 입력할 수가 있으며 서로 다른 값을 사용할 수도 있습니다.

#header {
background:#fff;
border:1px solid #888;
padding: 20px 20px;
-moz-border-radius:15px;
-webkit-border-radius:15px;
border-radius:15px 20px 30px 40px;
}

위처럼 사용하는 것은 단축형입니다. 4가지의 값을 다르게 하면 모서리의 둥근 정도가 다 다르게 나옵니다. 한곳만 수치를 입력하고 3곳을 0으로 하면 한곳만 둥글게 나오게 됩니다. 위 네가지 값의 순서는 다음과 같고 각 코너의 속성은 다르게 할 수도 있습니다.

border-top-left-radius:10px;
border-top-right-radius:10px;
border-bottom-right-radius:10px;
border-bottom-left-radius:10px;

좌측상단에서 시작하여 시계방향입니다. 위처럼 한곳의 모서리만 설정할 수도 있습니다. 원하는 부분만 사용할 수 있는 것이죠. Safari 4 와 Safari iOS 3은 단축형을 사용하지 못합니다.

4. border-radius의 다양한 사용법

위처럼 html에는 <div id=”circle”></div>를 추가하고 CSS에는 가로세로 100픽셀을 설정합니다. 배경색상과 테두릴 설정하고 border-radius를 50px/50px입력합니다. 이것은 앞에서 설정한 가로세로 100픽셀의 반이죠. 이처럼 설정하고 웹에서 보면 둥근 원이 나옵니다. 이것을 변형하여 50px/20px로 수정하면 어떤 모양이 나올까요.

세로를 50픽셀로 줄이고 50px/28px로 했더니 위처럼 나옵니다. 앞의 수치는 수평부분의 곡선이고 뒤의 수치는 수직부분의 곡선입니다.

슬래시를 없애고 수치를 입력하면 위처럼 나옵니다. 앞의 수치는 좌상과 우하의 수치가되고 뒤의수치는 우상과 좌하의 수치가 됩니다.

각 모서리에 대해서 별도로 설정하면 위처럼 나옵니다.

이것을 rotate를 사용해서 회전하면 눈모양이 되겠죠.

테두리를 서로 다른 수치를 넣으면 위처럼 나옵니다. 로고를 만들어도 되겠네요.

border-style 속성을 이용하면 여러가지 다양한 이미지가 나오게 됩니다.

CSS – 알아두면 유용한 CSS 팁

 

웹디자인시 반드시 사용하게 되는 스타일시트 작업에서 알아두면 편리한 팁을 소개합니다.

1. CSS 폰트 스타일 정의 단축형(Shorthand)

폰트에 대하여 정의할때 여러가지 속성과 값을 별도로 정의하게 됩니다.

font-weight: bold;
font-style: italic;
font-variant: small-caps;
font-size: 1em;
line-height: 1.5em;
font-family: verdana,sans-serif;

위와 같이 여러개의 속성과 값을 정의할 수도 있지만 다음과 같이 한줄로 단축형을 사용할 수 있습니다.

font: bold italic small-caps 1em/1.5em verdana,sans-serif

즉 다음과 같은 Syntax로 적용을 해야합니다.

font: font-style font-variant font-weight font-size/line-height font-family;

여기서 순서는 정해져있으며 두가지 속성인 font-size와 font-family는 항상 있어야합니다. 이 두가지 속성이 없이 앞의 세가지 속성만으로는 적용이 안되며 font-family 속성은 맨 마지막에 와야하고 바로 앞에 font-size 가 있어야 합니다. 앞의 세가지 속성이 없이 사용하면 이때는 이들 생략된 속성에 대해서 기본값(default)이 적용됩니다.

2. 두종류 이상의 클래스(Class) 정의

어떤 요소에 대하여 클래스를 정의할때 대부분 하나의 클래스만 적용해서 사용하지만 하나의 요소에 대하여 두개 이상의 클래스정의가 가능합니다.

<li>…</li>

위 li 요소에 대해서 category라는 클래스와 current라는 클래스가 적용되었고 별도의 속성과 값을 정의하면 됩니다. 두개의 클래스 사이는 빈 스페이스만 있으면 되고 콤마도 필요하지 않습니다. 위 두개의 클래스에 대해서 같은 속성과 값을 정의하게 되는 경우가 있을 수 있는데 이때는 CSS 고유의 특징인 캐스캐이딩(Cascading)에 의해서 나중에 정의된 속성과 값이 적용됩니다.

3. border 속성에도 기본값이라는게 있습니다.

border를 정의할때 보통 border: 1px solid #000 ; 의 형태로 border의 width와 스타일, 색상을 정의하는데 여기서 반드시 필요한 것은 스타일이고 나머지를 생략하면 width는 3에서 4픽셀의 기본값이 적용됩니다. 그리고 색상은 별도로 정의된 폰트의 색상이 적용됩니다.

div {
width:500px;
background:yellow;
margin:6px 0;
color:#f00;
border:solid;
}

예를 들어 위와같이 border 에 대해 solid만 정의하면 border의 폭은 3픽셀, 색상은 #f00의 색상이 적용됩니다.

4. 이미지 대체 텍스트 테크닉(Image Replacement Technic)

웹페이지에 이미지를 올리면 html 속성으로 다음과 같이 alt에 대체 텍스트를 사용합니다.

<h1><img src=”title-image.gif” alt=”Web Design Photoshop” /></h1>

이 대체텍스트라는 것은 검색에 필요하므로 반드시 넣어야하는 것으로 알고 있지만 반드시 그런 것도 아닙니다. 원래는 인터넷 속도가 느리던 시절 이미지가 포함된 웹페이지를 보려면 이미지가 다운로드 될때까지 한참을 기다려야하기 때문에 글자만 보고 싶을때는 이미지가 안보이게 설정하거나 또는 눈이 안보이는 분들을 위해 스크린리더(Screen Reader)를 사용하는 경우 이미지 대신에 나타나도록 하는 기능을 했습니다. 하지만 웹사이트 운용자들이 이 대체텍스트에 많은 키워드를 삽입해서 웹페이지에 검색이 많이 되도록 악용하므로 검색엔진들은 이를 무시합니다. 그러니 이 대체텍스트를 넣는다고 해서 검색에 도움이 되는 것은 아니죠. 다만 이미지가 안나타날 경우에만 대신해서 이 이미지가 뭐라는 의미의, 말 그대로 대체(Alternative) 텍스트로서의 역할을 할 뿐입니다.

그런데 위의 예에서처럼 웹사이트에 타이틀 로고를 사용한 경우 이미지를 넣게 되는데 로고는 아주 중요하므로 대체텍스트만 넣어서는 안되죠. 그래서 사용하는 것이 text-indent라는 속성입니다. 검색엔진은 <h1> 태그를 아주 중요하게 생각하므로 가장 우선순위로 검색대상이 됩니다. 아무리 alt텍스트를 많이 넣어도 무시되니 이 <h1>태그는 반드시 사용해야 검색노출에 도움이 됩니다.

다음과 같은 방법으로 CSS에서 정의하면 됩니다.
<h1>Web Design Photoshop</h1>
h1 {
background: url(title-image.gif) no-repeat;
height: image height
text-indent: -9999px;
}

이렇게 타이틀 제목은 <h1>태그에 의해 검색에 상위를 차지하고 텍스트는 text-indent속성에 의해 9999픽셀만큼 화면의 좌측으로 이동하므로 화면상에 나타나지 않고 배경 이미지인 title-image가 나오게 됩니다. 원하는 이미지를 사용할 수 있는 동시에 검색에도 도움이 되는 방법이 됩니다.