본문 바로가기
HTML&CSS

CSS 선택자

by 융디's 2024. 4. 19.
728x90
CSS 선택자

CSS 선택자

@2024.03.28

캐스케이딩(우선 순위)

같은 요소가 여러 개 선언된 경우, 우선 적용하는 순위를 알아보자.
💡
인라인 방식(1000) > ID 선택자(100) > Class 선택자(10) > Tag 선택자(1) > * 선택자(0)
  • 점수가 가장 높은 선언이 우선 적용
  • 만약 점수가 같다면, 가장 마지막에 해석된 선언이 우선 적용

전체 선택자(*)

페이지에 있는 전체 요소를 대상으로 삼아 스타일 적용
* {
	/* 모든 요소에 대한 스타일 */
  margin : 0;
  padding : 0;
  }
  • 간단한 테스트로는 괜찮으나, 많이 사용하면 브라우저에 과부하가 걸리기 때문에, 사용하지 않는 것이 좋다.
  • *를 자식 선택자에도 사용 가능하다
    • #container * {} → container div의 자식 요소 전체를 대상으로 적용

요소 선택자(Type Selector)

/* 태그에 따라 한 페이지에 있는 모든 요소를 대상으로 적용 */

p {
    /* 모든 <p> 요소에 대한 스타일 */
}
  • ex) ul 태그를 대상으로 적용한다면 → ul{ }

아이디 선택자(#idname)

/* id를 대상으로 삼아 스타일을 적용 */

#header {
    /* id="header"를 갖는 요소에 대한 스타일 */
}
  • 유일한 요소에만 스타일을 적용하기 때문에 유연성이 없고, 재활용이 어렵다.

클래스 선택자(.classname)

/* 클래스를 대상으로 삼아 스타일을 적용 */

.container {
    /* class="container"를 갖는 모든 요소에 대한 스타일 */
}
  • id와 다르게 여러 개의 요소를 대상으로 정할 수 있다.
  • 스타일을 한 그룹의 요소에 적용할 때는 class를 사용

하위 선택자(Descendant Selector)

/* 특정 요소의 하위 요소중 특정한 요소를 선택 */

div p {
    /* <div> 요소 내의 모든 <p> 요소에 대한 스타일 */
}
  • 선택자를 이용해 더 상세히 작업할 때 사용

속성 선택자(attributes selector)

/* 특정 속성을 갖는 요소를 선택 */

[href] {
    /* href 속성을 갖는 모든 요소에 대한 스타일 */
}

a[title] {
    /* title 속성을 갖는 <a> 요소에 대한 스타일 */
}

[type="button"] {
    /* type="button" 속성을 갖는 요소에 대한 스타일 */
}

a[href="http://net.tutsplus.com"] {
		/* "http://net.tutsplus.com"로 연결된 모든 <a> 요소에 대한 스타일 */
}

a[href*="naver"] {
		/* naver가 있는 연결된  <a> 요소에 대한 스타일 */
}

a[href^="http"] {
		/* 속성 앞의 값이 특정 값으로 시작하는 <a> 요소에 대한 스타일 */
}

a[href$=".jpg"] {
		/* 속성 앞의 값이 특정 값으로 끝나는 <a> 요소에 대한 스타일 */
}

자식 선택자(Child Selector)

/* 특정 요소의 직계 자식 요소를 선택 */

ul > li {
    /* <ul> 요소의 직계 자식인 모든 <li> 요소에 대한 스타일 */
}
  • x y 와 x>y의 차이점은 후자가 직계 자식만 선택한다는 것 (손자 선택 안 함)

인접 형제 선택자(Adjacent Sibling Selector)

/* 특정 요소의 다음에 나오는 형제 요소를 선택 */

h2 + p {
    /* <h2> 요소 다음에 나오는 첫번째 <p> 요소에 대한 스타일 */
}

<h2>인접 형제 선택자</h2>
<p>Paragraph 1</p>

<p>Paragraph 2</p>

  • p 태그 중 위에 첫 번째 p 태그만 적용되고, 두 번째는 적용 안됨

일반 형제 선택자 (General Sibling Selector)

/* 특정 요소의 형제 요소 중 모든 다음에 나오는 요소를 선택 */

h2 ~ p {
    /* <h2> 요소 다음에 나오는 모든 <p> 요소에 대한 스타일 */
}
  • 인접 형제 선택자는 앞의 선택자 바로 뒤에 오는 첫 번째 요소만 선택하나,

    일반 형제 선택자는 앞에 선택자 아래에 있는 모든 뒤에 요소를 선택

가상 클래스 선택자(Pseudo-class Selector)

/* 특정 상태나 조건에 따라 요소를 선택 */

a:hover {
    /* 마우스가 요소 위에 있을 때의 <a> 요소에 대한 스타일 */
}
a:link {
    /* 하이퍼링크(anchor)가 아직 방문되지 않은 상태의 링크를 스타일링 */
}
a:visted {
    /* 클릭했었거나 방문했던 페이지에 있는 <a> 요소에 대한 스타일 */
}

/* 체크박스가 체크되었을 때의 스타일 */
input:checked {
    /* 스타일 */
}

가상 요소 선택자(Psedo-element Selector)

/* 특정 요소의 특정 부분을 선택 */

p::first-line {
    /* <p> 요소의 첫 번째 줄에 대한 스타일 */
}

p::first-letter {
    /* <p> 요소의 첫 단락의 첫글자에 대한 스타일 */
}

부정 선택자(Not Selector)

/* 특정 선택자를 제외한 모든 요소를 선택 */

:not(.highlight) {
    /* highlight 클래스를 갖지 않은 모든 요소에 대한 스타일 */
}

div:not(.highlight) {
    /* 모든 div중에서 highlight 클래스를 갖지 않은 모든 요소에 대한 스타일 */
}

선택자 결합(Combination of Selectors)

/* 여러 선택자를 결합하여 특정 요소를 더 정확하게 선택 */

.container p {
    /* class="container"를 갖는 요소 내의 모든 <p> 요소에 대한 스타일 */
}

N번째 자식 요소 선택자

/* div의 2번째 자식 요소에 대한 스타일 */
div:nth-child(2) {
    /* 스타일 */
}

/* div의 4번쨰마다 자식 요소에 대한 스타일 */
div:nth-child(4n) {
    /* 스타일 */
}

/* ul의 끝에서 3번째 자식 요소에 대한 스타일 */
ul:nth-last-child(3) {
    /* 스타일 */
}
  • nth-child는 변숫값을 정수로 받으며 0으로 시작하지 않는다.
  • 자식 요소의 변수 집합을 선택하는데도 이 방법을 사용 가능하다.

N번째 타입 요소 선택자

/* p 타입 중 2번째 요소에 대한 스타일 */
p:nth-of-type(2) {
    /* 스타일 */
}

/* div 타입 중 끝에서 2번째 요소에 대한 스타일 */
div:nth-last-of-type(2) {
    /* 스타일 */
}

첫/끝 자식 요소 선택자

/* 첫 번째 li 요소에 대한 스타일 */
li:first-child {
    /* 스타일 */
}

/* li 요소 중 마지막 자식 요소에 대한 스타일 */
li:last-child {
    /* 스타일 */
}
  • 부모 요소의 첫 번째/마지막 자식만 대상으로 삼는다.
  • 목록에서 맨 처음과 맨 마지막 항목에서 테두리 선을 제거하는데 이 방식을 흔히 사용

단일 자식 요소 선택자

/* span 요소 중 부모 안에 자식으로 하나만 있는 경우에 대한 스타일 */
span:only-child {
    /* 스타일 */
}

단일 타입 요소 선택자

/* p 타입 중 부모 안에서 하나만 있는 경우에 대한 스타일 */
p:only-of-type {
    /* 스타일 */
}
  • 부모 컨테이너에 형제 요소가 없는 요소를 대상으로 스타일 지정

첫 번째 타입 요소 선택자

/* div 타입 중 첫 번째 요소에 대한 스타일 */
div:first-of-type {
    /* 스타일 */
}
  • 해당 요소의 첫 번째 형제 선택자 선택

가상 요소 앞/뒤

/* 모든 <p> 요소의 내용 앞에 생성된 가상 요소에 대한 스타일 */
p::before {
    /* 스타일 */
}

/* 모든 <div> 요소의 내용 뒤에 생성된 가상 요소에 대한 스타일 */
div::after {
    /* 스타일 */
}

728x90

'HTML&CSS' 카테고리의 다른 글

웹 페이지 레이아웃  (1) 2024.04.19
CSS 속성  (1) 2024.04.19
CSS  (1) 2024.04.19
시맨틱 구조  (1) 2024.04.19
TAG  (1) 2024.04.19