CSS 선택자 정리
id: 태그의 식별자, 페이지당 하나의 이름이 존재한다. css에서 #id이름으로 나타낸다.
class: 그룹화, 페이지당 같은 이름의 class가 존재 가능. css에서 .class이름으로 나타낸다.
후손 선택자: 해당 선택자 밑의 모든 선택자들을 모두 선택 : body div (body밑의 모든 div)
표기법 : 선택자1 선택자2
공백으로 구분을 짓는다. ex. div div {}
자손 선택자: 해당 선택자 밑의 모든 선택자들을 모두 선택 body> div (body 보다 한 단계 밑의 모든 div)
표기법: 선택자1 > 선택자2
선택자들 사이에 >로 구분 짓는다. ex. div> p {}
<div id="selector-test">
<div>
div1
<p>div>p</p>
</div>
<div>div2</div>
<div>div3</div>
<div>div4
<div>div4>div</div>
</div>
<div>div5</div>
</div>
위의 코드에서는 selector-test > div를 했을 경우 div4 > div를 제외한 모든 div들이 선택된다.
selector-test div로 후손 선택자를 사용하면 div4 > div를 포함한 모든 div들이 선택된다.
동위 선택자
동위 관계에서 해당 요소 뒤에 나타나는 요소를 선택할 때 사용하는 선택자
선택자1+선택자2 : 선택자 1 바로 뒤에 있는 선택자 2를 선택
선택자1~선택자2: 선택자1 뒤에 위치하는 모든 선택자2를 선택
<h1>제목1</h1>
<h2>제목1 뒤의 제목2</h2>
<div>divbox</div>
<h2>제목2</h2>
<p>p태그</p>
<h2>제목2</h2>
<h2>제목2</h2>
<h1>제목1</h1>
<h2>제목1 뒤의 제목2</h2>
위의 코드에서 h1+h2를 했을 경우 제목1 뒤의 제목2 태그가 선택된다.
h1~h2로 선택하면 2, 4, 6, 7, 9번째의 모든 h2 태그들이 선택된다.
반응선택자
사용자가 특정한 행동을 취했을 때 해당 요소에 스타일을 적용가능하다.
표기법: 태그명:hover {}
ex. div:hover {}
hover : 해당 요소에 마우스를 올렸을 때의 스타일
active: 해당 요소에 마우스 클릭을 하고 있을 때의 스타일 (마우스 클릭을 때면 원상복귀)
구조 선택자
같은 부모를 두고 있는 동일한 태그나 식별자(id, class)를 가진 형제들 간의 순서를 가지고 선택 가능하게 해 준다.
<ul>
<li class="items">menu-1</li>
<li class="items">menu-2</li>
<li class="items">menu-3</li>
<li class="items">menu-4</li>
<li class="items">menu-5</li>
</ul>
menu-1만 선택하고 싶을 경우 ul> li를 하게 되면 모든 li들이 선택된다. 따라서 이럴 경우 구조 선택자를 활용한다.
li:first-chile {} : 같은 부모를 두고 있는 li 태그 들 중 첫 번째 li태그를 선택한다.
li:last-child {} : 같은 부모를 두고 있는 li 태그 들 중 마지막 li태그를 선택한다.
li:nth-child(number) {} : 같은 부모를 두고 있는 li 태그 들 중 number번째에 해당하는 li태그를 선택한다.
- li:nth-child(1) : 같은 부모를 두고 있는 li 태그 들 중 1번째에 해당하는 li태그를 선택한다.
- li:nth-child(2n) : 같은 부모를 두고 있는 li 태그 들 중 짝수 번째에 해당하는 li태그를 선택한다.
- li:nth-child(2n+1) : 같은 부모를 두고 있는 li 태그 들 중 홀수 번째에 해당하는 li태그를 선택한다.
li:nth-last-child(number) : 같은 부모를 두고 있는 li 태그 들 중 마지막부터 number번째에 해당하는 li태그를 선택한다.
.items:nth-child(2n) : 같은 부모를 두고 items 들 중 짝수 번째에 해당하는 li태그를 선택한다.
형태구조 선택자
같은 부모를 두고 있는 태그들이 있는데 태그의 타입이 다를 경우 사용한다.
태그명:first-of-type : 같은 부모를 두고 있는 태그 중 첫 번째 태그를 선택한다.
h1:first-of-child로 선택했을 경우 밑의 코드에선 제목1과 div박스 밖의 제목1이 선택된다. ( div박스 밖의 제목1은 body을 부모로 둔 h1태그가 2개 있다. 이 두 태그 중 첫 번째 태그가 선택된다. )
태그명:last-of-type : 같은 부모를 두고 있는 태그 중 마지막 태그를 선택한다.
나머지 nth-of-child나 nth-last-of-child들은 위의 구조 선택자와 비슷한 맥락이다.
<div>
<h1>제목1</h1>
<h2>제목2</h2>
<h3>제목3</h3>
<h3>제목3</h3>
<h2>제목2</h2>
<h1>제목1</h1>
</div>
<h1>div박스 밖의 제목1</h1>
<h1>div박스 밖의 제목1</h1>
속성선택자
특정한 속성이나 속성값을 가지고 있는 html 요소를 선택한다.
표기법: 태그명[속성명="속성값"] {}
ex. input[type="text"] {}
.jpg와 같이 특정한 접미사로 끝나는 속성값을 가지고 있는 html요소를 선택한다.
표기법: 태그명[속성명$="속성값"] {}
ex. img[ser$="jpg"] {}
특정한 속성의 문자값을 나타낼 때 사용한다.
표기법: 태그명[속성명*="속성값"] {}
ex. div[class*=box]
밑의 html과 css가 있을 때 div[class*=box] 는 div > .box와 같은 의미이며 같은 우선순위를 가진다.
div[class*=box] 를 div > .box 위로 올릴 경우 우선순위에 따라 div > .box스타일이 적용된다.
<div>
<div class="box">div1</div>
<div class="box">div2</div>
<div class="box">div3</div>
<div class="box">div4</div>
<div class="box">div5</div>
</div>
div > .box {
text-align: center;
padding: 10px 30px;
font-size: 40px;
font-weight: 900;
color: aquamarine;
margin-left: 30px;
}
div[class*='box'] {
color: black;
}
※해당 내용들은 따즈아에서 주민정 강사님의 멘토 시리즈 HTML+CS53를 보고 정리한 내용입니다.