CSS의 문법은 크게 두 부분으로 나누어 볼 수 있는데, Selector와 Declaration(선언)이다. selector에서는 스타일링을 할 요소를 선택하고 선언부에서는 그 요소에 적용할 스타일링을 구체적으로 작성한다. 지금까지는 선언부에서 사용되는 속성들과 그 값들에 대해 알아보았다. 이제부터는 우리가 스타일링 하고싶은 요소를 선택, 지정하는 문법에 대해 알아보자.
selector {
property: value;
}
Type, Class, Id
- type | html 태그를 직접 선택
- p { background-color: #0066ff; }
- class | html 태그에 지정된 클래스를 이용해서 요소를 선택
- 동일한 클래스를 가지고 있는 모든 요소에 같은 스타일링을 할 때 유용하게 사용
- 하나의 요소는 띄어쓰기로 구분된 여러개의 클래스를 가질 수 있고, 이 때 클래스로 요소를 지정하는 방법은 아래와 같다.
- <button class=" menu-btn cancel " type="button">Cancel</button>
- .menu-btn{ width: 100%; }
- .cancel{ width: 100%; }
- .menu-btn.cancel{ width:100%; } | 띄어쓰기 없이 두 class를 dot으로 연결하면, class가 menu-btn 이고 cancel인 요소를 지정할 수 있다.
- <button class=" menu-btn cancel " type="button">Cancel</button>
- id | html 태그에 지정된 id를 이용해서 요소를 선택
- #user-info { width:100%; }
- 여러 개를 한번에 작성하는 것도 가능 | .div.box.active, #user-info.box 등
Child, Descendant, Siblings
이 때 child는 direct child를 말하고, descendant는 direct child 뿐만 아니라, 더 깊은 레벨로 중첩되어있는 모든 자식요소까지를 통틀어 말한다. 즉 descendant 안에 child가 포함된다.
<section class="progress">
<h1 class="progress-title fs-medium fw-regular">Loding...</h1>
<ul class="progress-list" aria-hidden="true">
<li class="first">
<h1>title 1</h1>
<p>contents 1</p>
</li>
<li class="second">
<h1>title 2</h1>
<p>contents 2</p>
</li>
<li class="third">
<h1>title 3</h1>
<p>contents 3</p>
</li>
</ul>
</section>
- parent > child | section > h1
- parent desecendants | section h1
- sibling1 + sibling2
- .first + li | class가 first인 요소의 다음 형제 요소 중 li 태그인 요소를 하나만 선택
- sibling1 ~ sibling2
- .first ~ li | class가 first인 요소의 다음 형제 요소 중 li 태그인 요소를 모두 선택
Attributes
특정 속성을 가지고 있는 요소를 선택할 수 있다. 예를 들어 type 속성이 text인 input 요소를 모두 선택하려면 다음과 같이 작성할 수 있다.
- input[ type = "text" ]{width: 100%;}
- a[ href *= ".com" ] { color: blue; } | href 속성 값에 ".com"이 포함되어 있는 모든 요소를 선택
- a[ href $= ".com" ] { color: blue; } | href 속성 값이 ".com"으로 끝나는 모든 요소를 선택
Pseudo-classes :
pseudo classes는 어떤 상태(state)나 조건(condition)을 만족했을 때 사용할 수 있는 선택자를 말한다(pseudo-element와는 다름).
Structural Pseudo-classes
- element:first-child | 형제 요소로 이루어진 그룹에서 첫번째 요소를 선택
- li:first-child | li 태그이자, 첫번째 자식인 요소를 선택, 위의 코드에서 클래스가 first인 li 태그가 선택된다
- element:last-child
- element:nth-child(n) | 형제 요소로 이루어진 그룹에서 n번째 요소를 선택
- li:nth-child(2)
- li:nth-child(2n) | li의 짝수번 째 요소
- li:nth-child(2n+1) | li의 홀수번 째 요소
- 이 때 그룹에서 li가 첫번째 자식 요소이어야 한다.
- element:nth-of-type(n) | 똑같은 태그의 형제 요소 그룹에서 n번째 요소를 선택
- span:nth-of-type(3n) | span의 요소를 3의 배수 단위로 선택(3번째, 6번째, 9번째 span...)
User-action Pseudo-classes
사용자의 action에 따라 변하는 상태를 선택할 수 있다.
- element:hover | 요소 위에 마우스를 올렸을 때를 선택
- element:active | 요소를 클릭하는 순간을 선택
- element:checked | 선택된 라디오 버튼이나 체크박스를 선택
- element:focus | 요소에 focus가 되었을 때(??? 입력가능한 상태?)
- input 계열 요소에서 주로 사용
The :focus CSS pseudo-class represents an element (such as a form input) that has received focus. It is generally triggered when the user clicks or taps on an element or selects it with the keyboard's Tab key.
Priorities(선택자 우선순위)
- ID
- Class
- Pseudo-class도 여기에 포함
- Type
<p id="text" class="a b c d e f g">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Eius ipsam
accusantium obcaecati, veritatis assumenda quia et mollitia voluptatibus
dignissimos soluta culpa? Quia, esse mollitia deleniti ad sapiente
assumenda corporis illum!
</p>
#text {
color: blue;
}
.a.b.c.d.e.f.g {
color: red;
}
서로 같은 요소를 지정하고 있는데, 스타일링이 충돌하면 selector 우선순위에 의해 id 선택자를 이용한 color: blue; 스타일링이 최종 렌더링에 반영된다.
+) Rule Breaker | 선택자 우선순위 규칙을 무시함, 피치 못할 경우에만 사용
- inline style | html 태그 내부에 style attribute를 이용하는 방법
- id 선택자로 지정한 스타일링보다 높은 우선순위를 갖는다.
- !important
- inline style로 지정한 스타일링보다 높은 우선순위를 갖는다.
- p { color: blue !important; }
'Study > CSS' 카테고리의 다른 글
Libraries (0) | 2022.05.23 |
---|---|
etc | box-shadow, overflow, transform, visibility (0) | 2022.05.20 |
Background (0) | 2022.05.19 |
Typography & SR only (0) | 2022.05.18 |
Float & Pseudo Element (0) | 2022.05.18 |