CSS Selectors와 Specificity

예습을 하고싶었건만 시간은 야속하게 흐르고, 내 집중력은 산으로 가고있고 :clap: 눈뜨니 아침이고 껄껄꺾크흑ㄱㄱ :clap: 정신차리니 밤이더라 껄껄껄

1. Selectors

1.1. Universal Selector

전체 선택자

* {
  property: value;
}

1.2. Type Selector

지정 선택자

type {
  property: value;
}

1.3. Selector list

복수 지정 선택자

type1,
type2 ... {
  property: value;
}

1.4. #ID Selector

id 선택자, #id명, id는 페이지내 한번만, id는 최소한사용

#id {
  property: value;
}

1.5. Class Selector

class 선택자, .class명, 비슷한 스타일끼리 묶어서 구조화할 수 있다.

.class {
  property: value;
}

1.6. Descendant Selector

자손 선택자, parent-tag child-tag(anchor tag), 부모태그 내 자식태그를 선택, class 사용가능

parenttype childtype {
  property: value;
}

.class childtype {
  property: value;
}

parenttype #id {
  property: value;
}

1.7. Adjacent Selector

인접 선택자, +부호 인접 선택자, 형제의 개념

type1 + type2 {
  property: value;
}

1.8. Direct child

직계자손 선택자, type1 > type2, > type1 바로 아래 있는 type2를 지칭

type1 > type2 {
  property: value;
}

1.9. Attribute Selector

속성 선택자, type[attribute=”value”] 등

type[attribute="value"] {
  property: value;
}

type.class {
  property: value;
}

/* include가 포함된 모든 a태그 */
a[href*="include"] {
  property: value;
}

2. Pseudo Classes

선택자 끝에 붙여 상태를 특정하는 키워드

  • :active
  • :checked
  • :first
  • :first-child
  • :hover
  • :not()
  • :nth-child(n)
  • :nth-of-type(n)
type:hover {
  property: value;
}

/* 4번째 태그만 선택 */
type:nth-of-type(4) {
  property: value;
}

/* 2번째 태그마다 선택 */
type:nth-of-type(2n) {
  property: value;
}

3. Pseudo Elements

  • ::after
  • ::before
  • ::first-letter
  • ::first-line
  • ::selection
type::first-letter {
  property: value;
}

/* 문자 긁을시 */
type::selection {
  property: value;
}

4. The Cascade

스타일의 최상단부터 출발한 폭포(cascade)가 아래로 쭉 흘러서 스타일시트 최하단이나 다음 스타일 시트로 넘어간다.

  • .css파일 내 동작
type-a {
  property-a: value-a;
}
type-a {
  property-a: value-A;
}
/* 적용 시 type-a 태그는 하단의 value-A가 적용된다. */
  • head에 명시 동작
<head>
  <meta charset="UTF-8" />
  ...
  <title>Document</title>

  <link rel="stylesheet" href="index.css" />
  <link rel="stylesheet" href="general-styles.css" />
  // 위 링크를 적용한 후 다음 링크로 넘어가 겹치는 부분이 있을 시 아래
  general-styles.css의 명세가 적용된다.
  <head></head>
</head>

5. SPECIFICITY

충돌이 생길 경우 브라우저에서 규칙을 적용한다. 하나 이상의 스타일이 도일한 요소에 적용되거나, 적용될 수 있는 경우 출돌이 발생한다.

/* 예시 */
.class type:pseudo element {
  property: value;
}
type:pseudo element {
  property: value-a;
}
/*
 chrome의 경우 .class type:pseudo element의 스타일을 우선한다.
 각 브라우저가 주어진 선택자의 구체도를 측정하여 더 구체적인 선택자를 우선적용한다.

 동일한 property가 충돌이 날때 우선순위에따라 적용.
*/

5.1. 구체적 기준의 우선도

ID CLASS ELEMENT
ID Selectors Class, Attribute, Pseudo-Class Selectors Element, Pseudo-Element Selectors

좌측으로 갈수록 우선도가 높고, 우측으로 갈수록 우선도는 떨어진다. 태그 내 inline 선택자의 경우 ID선택자보다 더 명시적이므로 우선한다.

5.2. !important

개별스타일 지정에 사용할 수 있는 선택자

<div class="ty" style="color: green;">What color am I?</div>
.ty[style*="color: green"] {
  color: magenta !important;
}

가장 우선순위로 사용됨.

참조

MDN:CSS/Selectors
MDN:CSS/Cascade&Inheritance
CoolColorSelect
Specificity:keegan