기본 선택자는 HTML 문서에서 모든 요소를 선택하는 데 사용되는 선택자입니다. HTML 요소를 전체적으로 스타일링할 때 사용됩니다.
* {
color: black; /* 스타일 규칙 */
}
li {
color: black; /* <li> 요소에 대한 스타일 규칙 */
}
.example {
color: black; /* 클래스가 "example"인 요소에 대한 스타일 규칙 */
}
#header {
color: black; /* 아이디가 "header"인 요소에 대한 스타일 규칙 */
}
CSS 복합 선택자는 여러 선택자를 결합하여 특정 요소를 더 정확하게 선택하는 데 사용됩니다. 다양한 복합 선택자를 사용하여 더 특정한 규칙을 적용할 수 있습니다.
span.orange {
color: black; /* 태그가 span이면서 클래스가 "orange"인 요소에 대한 스타일 규칙 */
}
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li>
</ul>
</div>
<div>당근</div>
<div>토마토</div>
<span class="orange"></span> <!-- 선택 -->
ul > .orange {
color: black; /* ul의 자식요소중 클래스가 "orange"인 요소에 대한 스타일 규칙 */
}
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> <!-- 선택 -->
</ul>
</div>
<div>당근</div>
<div>토마토</div>
<span class="orange"></span>
div .orange {
color: black; /* div 안의 모든 클래스가 "orange"인 요소에 대한 스타일 규칙 */
}
<div>
<ul>
<li>사과</li>
<li>딸기</li>
<li class="orange">오렌지</li> <!-- 선택 -->
</ul>
</div>
<div>당근</div>
<div>토마토</div>
<span class="orange"></span> <!-- 선택 -->
.orange + li {
color: black; /* 클래스가 "orange"인 요소 다음에 나오는 li 요소에 대한 스타일 규칙 */
}
<ul>
<li>딸기</li>
<li>수박</li>
<li class="orange">오렌지</li>
<li>망고</li> <!-- 선택 -->
<li>사과</li>
</ul>
.orange ~ li {
color: black; /* 클래스가 "orange"인 요소 다음에 나오는 모든 형제 li 요소에 대한 스타일 규칙 */
}
<ul>
<li>딸기</li>
<li>수박</li>
<li class="orange">오렌지</li>
<li>망고</li> <!-- 선택 -->
<li>사과</li> <!-- 선택 -->
</ul>
가상 클래스 선택자는 HTML 문서의 특정 상태나 구조를 나타내는데 사용되는 CSS 선택자입니다. 가상 클래스는 일반적으로 콜론(:
)으로 시작하며, 특정한 조건이나 상태에 해당하는 요소를 선택할 때 사용됩니다.
<div class="box"></div>
.box {
width: 100px;
height: 100px;
background: yellowgreen;
/* box가 변할 때 1초동안 애니메이션을 넣어줌 */
transition: 1s;
}
.box:hover {
/* 마우스가 링크 위에 있을 때의 스타일 규칙 */
width: 200px;
background: green;
}
}
<div class="box"></div>
.box {
width: 100px;
height: 100px;
background: yellowgreen;
transition: 0.5s;
}
.box:active {
/* 버튼이 클릭되고 있는 동안의 스타일 규칙 */
width: 200px;
background: royalblue;
}
<input type="text">
input {
}
input:focus {
background-color: blueviolet;
}
<div>
요소는 기본적으로 :focus
를 받을 수 있는 요소가 아니지만 tabindex
속성을 추가하면 <div>
요소에도 :focus
를 줄 수 있습니다.
<div class="box" tabindex="-1"></div>
.box {
width: 100px;
height: 100px;
background: yellowgreen;
transition: 0.2s;
}
.box:focus {
width: 200px;
background: royalblue;
}
.fruits div:first-child {
color: red; /* 클래스가 "fruits"인 요소 내부의 첫 번째 div 요소에 대한 스타일 규칙 */
}
<!-- div가 .fruits의 첫 번째 자식요소가 아닐 경우 규칙이 적용되지 않습니다. -->
<div class="fruits">
<div>사과</div> <!-- 선택 -->
<div>키위</div>
<span>참외</span>
<p>자몽</p>
<h3>포도</h3>
</div>
.fruits h3:first-child {
color: red; /* 클래스가 "fruits"인 요소 내부의 마지막 h3 요소에 대한 스타일 규칙 */
}
<!-- h3가 .fruits의 마지막 자식요소가 아닐 경우 규칙이 적용되지 않습니다. -->
<div class="fruits">
<div>사과</div>
<div>키위</div>
<span>참외</span>
<p>자몽</p>
<h3>포도</h3> <!-- 선택 -->
</div>
.fruits *:nth-child(2) {
color: red;
/* 클래스가 "fruits"인 요소 내부의 모든 자식 요소 중 두 번째 자식 요소에 대한 스타일을 정의 */
}
<div class="fruits">
<div>사과</div>
<div>키위</div> <!-- 선택 -->
<span>참외</span>
<p>자몽</p>
<h3>포도</h3>
</div>
.fruits li:nth-child(2n) {
color: red;
}
<ul class="fruits">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
<li>item6</li>
<li>item7</li>
<li>item8</li>
<li>item9</li>
<li>item10</li>
</ul>
.fruits li:nth-child(3n + 1) {
color: red;
}
.fruits li:nth-child(even) {
color: red;
}
.fruits li:nth-child(odd) {
color: red;
}
.fruits li:nth-child(n + 3) {
color: red;
}
/* 결과적으로 "Item 3", "Item 4", "Item 5"에 텍스트가 적용됩니다. */
.fruits *:not(span) {
color: red;
}
/* 클래스가 "fruits"인 요소 내부의 모든 자식 중 span을 제외하고 나머지 자식 요소에 대한 스타일을 정의 */
<div class="fruits">
<div>사과</div>
<div>키위</div>
<span>참외</span>
<p>자몽</p>
<h3>포도</h3>
</div>
가상 요소 선택자는 문서의 특정 부분에 스타일을 적용하는 데 사용됩니다. 가상 요소는 HTML 문서에 실제로 존재하지 않는 요소를 대상으로 하며, 콘텐츠의 일부분이 아니라 특정 상태나 위치에 스타일을 적용하는 데 사용됩니다.
ul li::before {
content: "item";
color: red;
}
/* ul 요소 안에 있는 li 요소의 내용 앞부분에 content를 추가하고 스타일을 정의 */
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
ul li::after {
content: "item";
color: red;
}
/* ul 요소 안에 있는 li 요소의 내용 뒷부분에 content를 추가하고 스타일을 정의 */
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
속성 선택자는 특정한 조건을 만족하는 요소에 대해 스타일을 적용하는 데 유용합니다. 각 예시 코드에서 [...]
안에 있는 부분이 속성 선택자의 형태이며, 그 뒤에 중괄호 {}
안에 스타일 규칙이 옵니다.
a[href] {
color: red; /* a 태그중에서 href 속성을 가진 모든 링크에 스타일 적용 */
text-decoration: underline;
}
<a href="https://www.google.co.kr/">Google</a>
<a href="https://www.naver.com/">Naver</a>
[type="text"] {
color: red; /* type 속성 값이 "text"인 모든 요소에 스타일 적용 */
}
<input type="text" value="Hello"> <!-- 선택 -->
<input type="password" value="12345">
[class^="btn-"] {
color: red;
border: 2px solid blue;
/* class 속성 값이 "btn-"로 시작하는 모든 요소에 스타일 적용 */
}
<button class="btn-first">FIRST</button> <!-- 선택 -->
<button class="btn-second">SECOND</button> <!-- 선택 -->
<button>Normal</button>
[class$="first"] {
color: red;
border: 2px solid blue;
/* class 속성 값이 "first"로 끝나는 모든 요소에 스타일 적용 */
}
<button class="btn-first">FIRST</button> <!-- 선택 -->
<button class="btn-second">SECOND</button>
<button>Normal</button>
선택자 우선순위는 스타일 규칙이 적용되는 우선 순위를 나타냅니다. 스타일 규칙이 충돌할 때, 브라우저는 이 우선순위를 기반으로 어떤 스타일을 적용할지 결정합니다. 같은 요소가 여러 선언의 대상이 된 경우, 우선순위가 높은 선택자가 적용됩니다.
!important
를 사용하면 해당 스타일 규칙이 다른 스타일을 덮어 씌우기 때문에 다른 스타일을 적용하기 어려워집니다.!important
를 많이 사용하면 유지보수가 어려워집니다.!important
는 특별한 상황에서만 사용해야 하며, 최대한 피하는 것이 좋습니다.p {
color: black !important;
}
<div style="color: red;">
#example {
color: black;
}
.example {
color: black;
}
a[href] {
color: red;
}
li {
color: black;
}
* {
color: black;
}
:not(p) {
color: black;
}
.list li.item { color: black; } /* 21점 */
.list li:hover { color: black; } /* 21점 */
.box::before { color: black; } /* 11점 */
#example span { color: black; } /* 101점 */
header .menu li:nth-child(2) { color: black; } /* 22점 */
:not(.box) { color: black; } /* 10점 */
<body>
<div class="hello">Hello</div>
</body>
.hello { /* 10점 */
color: green;
}
.hello { /* 10점 */
color: red; /* 선택 */
}
<body>
<div class="hello">Hello</div>
</body>
div.hello { /* 11점 */
color: red; /* 선택 */
}
.hello { /* 10점 */
color: green;
}