요소는 하나 이상의 CSS선언에 영향을 받을 수 있다. 이때 충돌을 피하기 위해 CSS적용 우선순위가 필요한데 이를 캐스캐이딩 ( Cascading Order )이라고 한다.
캐스캐이딩에는 다음과 같이 세가지 규칙이 있다.
- 중요도
CSS가 어디에 선언 되었는지에 따라서 우선순위가 달라진다.- 명시도
대상을 명확하게 특정할수록 명시도가 높아지고 우선순위가 높아진다.- 선언순서
선언된 순서에 따라 우선 순위가 적용된다. 즉, 나중에 선언된 스타일이 우선 적용된다.
직접 HTML문서 내부에 삽입 하는 방식 보통 게시판이나 블로그에서 글을 쓸 때와 같이 페이지 내에 link나 style요소를 사용할 수 없을 때 사용하거나 스크립트를 통해 데이터 바인딩으로 요소를 제어할 때도 인라인 스타일을 사용한다.
<h1 style="color: red; font-size: 2em;">Hello World</h1>
HTML 문서와 CSS 문서를 분리하지 않고 넣는 방법이다. 간단한 스타일을 사용하거나 해당 스타일을 오로지 해당 페이지만 쓴다거나, 임시적으로 테스트를 위한 페이지를 만들 때 주로 사용한다.
<style>
h1{
color: red;
font-size: 2em;
}
</style>
<h1>Hello World</h1>
분리된 디자인 파일로 관리하며 홈페이지 스타일을 일관성 있게 유지/보수하며 효율성을 극대화 할 수 있다. HTML 문서의 head 요소 안에 link 요소를 통해서 css파일을 연결하는 방법. ( link 요소를 여러 개 넣음으로써, 여러 css파일을 연결 가능하다. )
<link rel="stylesheet" href="css/index.css">
<h1>Hello World</h1>
h1{
color: red;
font-size: 2em;
}
1. head 요소 내의 style 요소
2. head 요소 내의 style 요소 내의 @import 문
3. <link>로 연결된 CSS 파일
4. <link>로 연결된 CSS 파일 내의 @import 문
5. 브라우저 디폴트 스타일시트
1. 속성값 뒤에 !important; 를 붙인 속성 ( !important의 경우 종료마크인 ; ( 세미클론 ) 안쪽에 작성되어야 한다.)
2. 태그에 직접적으로 style 속성을 넣는 방식 ( 인라인스타일 방식 )
3. #id로 지정한 속성
4. 클래스, :추상클래스로 지정한 속성
5. 태그이름으로 지정한 속성 ( 태그 선택자 )
6. 전체 선택자
7. 상위 요소 (부모) 에 의해 상속된 속성
<!DOCTYPE html>
<html>
<head>
<style>
p { color: red !important; }
#thing { color: blue; }
div.food { color: chocolate; }
.food { color: green; }
div { color: orange; }
</style>
</head>
<body>
<p id="thing">Will be Red.</p>
<div class="food">Will be Chocolate.</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<style>
p { color: blue; }
p { color: red; }
.red { color: red; }
.blue { color: blue; }
</style>
</head>
<body>
<p>Will be RED.</p>
<p class="blue red">Will be BLUE.</p>
</body>
</html>
*{
margin: 0;
padding: 0;
border : 0;
}
div{
margin: 0;
padding: 0;
}
<div class="name"></div>
.name{
margin: 0;
padding: 0;
}
<div id="name"></div>
#name{
margin: 0;
padding: 0;
}
<h1>인접 / 관계 선택자 Study</h1>
<ul class="temp_main">
<li>인접 선택자1
<ul class="temp_sub1">
<li class="temp1">인접 선택자2</li>
<li class="temp2">인접 선택자3</li>
<li class="temp3">안접 선택자4</li>
</ul>
</li>
<li>인접 선택자5
<ul class="temp_sub2">
<li class="temp4">인접 선택자6</li>
<li class="temp5">인접 선택자7</li>
<li class="temp6">인접 선택자8</li>
</ul>
</li>
</ul>
이런 예시가 있을 때 만약 .temp_main li를 하면 하위 li들 ( 자식 자손 )이 전부 선택되고 .temp_main > li를 하면 직계자식인 인접선택자 1과 인접선택자 5만 선택된다. ( 상속되는 property들은 상속된다. )
'+' 형제들이 있을경우 앞에 선택자의 바로 뒤 형제를 선택한다.
.temp1+li 하면 .temp2가 선택된다.
'~' 형제들이 있을경우 앞에 선택자의 뒤의 형제들을 선택한다.
.temp1~li 하면 .temp2, .temp3이 선택된다.
속성선택자는 태그 안의 속성에 따라 스타일을 지정하는 선택자 방식이다.
값의 조건에 따라 다양한 스타일을 지정할 수 있기 때문에 활용도가 높다.
기본 문법 '엘리먼트명[속성명]'
패턴 | 의미 |
---|---|
E[attr] | 'attr' 속성이 포함된 요소 엘리먼트를 선택합니다. |
E[attr="val"] | 'attr' 속성의 값이 정확하게 '속성값'과 일치하는 엘리먼트를 선택합니다. |
E[attr~="val"] | 'attr' 속성의 값에 '속성값'이 포함되는 요소를 선택합니다. ( 공백으로 분리된 값이 일치해야 합니다. ) |
E[attr^="val"] | 'attr'속성의 값이 '속성값'으로 시작하는 요소를 선택합니다. |
E[attr$="val"] | 'attr'속성의 값이 '속성값'으로 끝나는 요소를 선택합니다. |
E[attr*="val"] | 'attr'속성의 값에 '속성값'이 포함되는 요소를 선택합니다. |
E[attr│="val"] | 'attr'속성의 값이 정확하게 '속성값'이거나 '속성값-'으로 시작되는 엘리먼트를 선택합니다. |
property | Inherit |
---|---|
width/height | no |
margin | no |
padding | no |
border | no |
box-sizing | no |
display | no |
visibility | yes |
opacity | yes |
background | no |
font | yes |
color | yes |
line-height | yes |
text-align | yes |
vertical-align | no |
text-decoration | no |
white-space | yes |
position | no |
top/right/bottom/left | no |
z-index | no |
overflow | no |
float | no |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
.text-red {
color: red;
border: 1px solid #bcbcbc;
padding: 10px;
}
</style>
</head>
<body>
<div class="text-red">
<h1>Heading</h1>
<p>Paragraph<strong>strong</strong></p>
<button>Button</button>
</div>
</body>
</html>
color는 상속되는 프로퍼티로서 자식 요소는 물론 자손 요소까지 적용된다. 하지만 button처럼 요소에 따라 상속 받지 않는 경우도 존재한다. border, padding은 상속되지 않는 요소로 하위 요소에 적용되지 않는다. ( 상속받지 않는 요소 또는 상속되지 않는 프로퍼티는 상속시켜줄 프로퍼티 속성값에 inherit을 사용하면 명시적으로 상속받게 할 수 있다. )
주석 (comment)
주석은 브라우저에서 표시되지 않지만, 문서 정리에 도움을 준다.
CSS의 주석은 한 줄 주석 여러줄 주석 둘다 /* */로 감싸준다.
주석은 오류 검색을 위한 디버깅에 아주 좋다.