4,552,197 th visitor since 2017.2.1 ( Today : 782 )
Programming
No. 462
Name. swindler
Subject. CSS Style 상속 관련 (초기화)
Main Cate. CSS
Sub Cate.
Date. 2008-07-19 15:53
Hit. 12507 (211.36.27.8)
File.
//중첩된 엘리먼트들에서 상위 엘리먼트에 지정한 속성들을
//하위에 있는 일부 혹은 특정 영역 안의 엘리먼트에서
//속성값을 디폴트 값들로 초기화 할 수 있는 방법이 있는지 궁금합니다.

//모든 속성들을 일일이 지정을 해주어야 하는지요..
//이걸 피하려면 id나 class가 남발(?)될 거 같아서요.

1. 상속의 범위를 제한.
예를 들어 다음과 같은 코드가 있다고 가정 합니다.
[body id="main"]
[div id="locaNavigation"]
[h2]회사소개[/h2]
[/div]
[/body]

CSS 에서는 "사이트 로고" 에 대하여 다음과 같이 선택자를 배열 합니다.
#main #localNavigation h2 {...}

#main 이라는 ID 가 붙어있는 페이지에서,
#localNavigation 이라는 ID 영역에 포함된,
h2 태그에만 Style 을 적용합니다.

즉, 선택자를 쓸 때 h2 {...} 라고만 쓰면 모든 페이지의 h2가 이 속성을 상속 받겠지만 선택자를 저렇게 띄어쓰기 해서 배열하면 상속의 범위가 제한되고 명확 해지겠죠. 현재 페이지에 h2 태그가 만약 또 있는 경우라면 완전히 다른 스타일을 다시 적용할 수 있구요.

이런 방법은 이미 알고 계실줄로 믿습니다.

2. 상속의 범위를 제한하는 방법으로 마크업을 융통성 있게 사용.
중첩된 2단 구조의 [ul] 네비게이션을 만들 때 보통 이렇게 하죠. [ul]-[ul].
[ul]
[li]메뉴1
[ul]
[li]메뉴1_1[/li]
[li]메뉴1_2[/li]
[/ul]
[/li]
[/ul]

이 상황에서 ul 태그에 대하여 Style 을 적용하게 되면 1단계-2단계 모두 상속받죠. 그래서 이런 방법을 쓸 수도 있습니다. 1단계의 목록태그와 2단계의 목록태그를 다르게 사용하는거죠. [ol]-[ul] 식으로 말이죠.
[ol]
[li]메뉴1
[ul]
[li]메뉴1_1[/li]
[li]메뉴1_2[/li]
[/ul]
[/li]
[/ol]

대부분의 웹사이트 메뉴는 이렇게 마크업 해도 무방 합니다. 1단계 메뉴는 보통 순서에도 중요한 의미를 부여하기 때문에 순차적인 마크업을 하고 2단계 메뉴는 비순차 목록으로 마크업을 했습니다. 이 때 1단계 [ol] 태그에 적용된 Style 은 2단계 태그인 [ul] 태그로 상속되지 않기 때문에 효과적으로 상속을 제한하게 되죠.

3. 그럼에도 불구하고 어쩔 수 없이 상속을 제한할 수 없게 되는 경우에는 CSS 의 우선순위 규칙을 이용.
CSS 문서에서 나중에 작성된 코드는 먼저 작성된 코드보다 우선순위를 갖습니다. [li] 태그가 여러번 중첩 되었을 때 가장 자식이 되는 태그에 부여할 Style 은 CSS 코드상으로도 가장 나중에 정의하면 됩니다. 위와 동일한 마크업으로 예를 들면.

[ol]
[li]메뉴1
[ul]
[li]메뉴1_1[/li]
[li]메뉴1_2[/li]
[/ul]
[/li]
[/ol]

이 상황에서는 아래와 같은 순서로 코드를 쓸 수 있겠죠.
li {...} /*부모 스타일을 윗줄에 적용*/
li li {...} /*자식 스타일은 아랫줄에 적용, 부모의 스타일보다 우선권을 가짐*/

부모태그에 적용된 Style은 자식에게 상속되지만 자식태그에 적용될 Style을 아랫줄에서 나중에 다시 정의했기 때문에 상속받으려는 속성과 충돌하는 경우 아래쪽에 정의된 Style 이 우선권을 갖습니다.

4. !important 규칙을 사용.
이 방법도 이미 알고 계실줄로 믿습니다만.
li li {속성:값 important; 속성:값 important;}

이렇게 '속성:값' 을 적은 다음 한칸 띄워서 !important 라고 적으시면 코딩된 순서와 무관하게 무조건 우선순위를 갖습니다.

5. 그 밖에 모든 상황에 적용할 수는 없지만 이런 방법도 있습니다.
[div][div][div] 와 같은 식으로 마크업 되어 있고 첫 번째 [div] 에 Style을 적용했는데 두~세번째 [div]에는 전혀 상속할 필요가 없다고 가정 합니다. 이 때 공용 선택자 '*' 를 이용하여 모든 자식에게 상속되려는 속성을 초기화 시켜 버립니다. 공용 선택자는 모든 태그를 대표 합니다.
div {font-style:italic;}
div * {font-style:normal;}

이런 팁은 경우에 따라서 적용할 수도 있지만 그렇지 못할 수도 있죠. 원치 않는 태그까지 초기화 될 수도 있으니까요.

6. 표준이긴 하지만 IE6 에서 지원하지 않는 선택자 사용법.
div>div {...} 라고 코딩하면 바로 한 단계 아래쪽의 [div] 태그에만 Style 을 적용하게 되어 더이상 이를 손자에게는 상속 시키지 않습니다. 하지만 IE6 에서 지원하지 않기 때문에 향후 몇년간은 사용을 금기시 하여야 하겠습니다. IE8 버전이 나올 때즘에는 확실하게 사용할 수 있을 껍니다. IE7에서는 이를 올바르게 지원하는 것을 확인 하였습니다.




[바로가기 링크] : http://coolx.net/cboard/develop/462



Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog