css selector

CSS: 선택자(Selector)

1.CSS selector

특정 요소를 선택을 해주는 요소 css 규칙에 따라 선택을 할 수 있다.

2. Selector의 종류

2-1 전체 선택자

패턴 설명
* HTML페이지 내부의 모든 태그를 선택 한다.
* {
  margin: 0px;
  padding: 0px;
}

전체 선택자를 사용하게 되면 모든 요소를 읽어가야 하기 때문에 로딩속도가 느려질 수 있다. 자주 사용하지 않는것이 좋다.

2-2 태그 선택자

패턴 설명
E 태그명이 E인 특정 태그를 선택한다.
div{
  background-color:black;
}

HTML 태그에 스타일을 적용 시킨다 하지만 개발자가 클래스에 스타일 지정하는게 우선순위가 높다.

2-3 클래스 선택자

패턴 설명
.className 엘리먼트에 부여된 클래스 속성 이름을 선택한다.
 .className-01 {
   background:yellow;
   width:400px;
   height:200px;
 }
 div.className-02{
   background:black;
   width:400px;
   height:200px;
 }

class 앞에 .을 직어주면 해당 속성값이 지정된다. 또 class명 앞에 엘리먼트를 사욯하면 해당 엘비먼트들 중에 클라스명이 같은 곳에 스타일이 지정된다.

2-4 ID 선택자

패턴 설명
#ElementID 엘리먼트에 부여된 ID 값이 일치하는 요소를 선택한다.
 #id-01{
   position:relative;
   top:10px;
   left:30px;
 }

ID 선택자는 #를 사용한다. ID선택자의 우선순위가 클래스 선택자의 우선순위보다 높다. 우선 적용되어야 할 경우 ID선택자를 사용하는것이 더 좋다.

2-5 복합 선택자

패턴 설명
E F E요소의 자손인 F요소를 선택한다.
E > F E요소의 자식인 F요소를 선택한다.
/* 하위 선택자*/
div p {
  border:1px solid black;
}

/* 자식 선택자 */
div > p {
  border:1px solid black;
}

하위 선택자 경우 div 밑에 있는 모든 P를 전부 선택 한다. 자식 선택자 경우 div 밑 바로 자식 p만 선택 한다.

2-6 인접 형제 선택자

패턴 설명
E + F E요소를 뒤따르는 F요소를 선택한다. (E요소가 앞에 전재하면 F를 선택한다.)
E ~ F E요소의 자식인 F요소를 선택한다. (E가 F보다 먼저 등장하지 않으면 선택하지 않는다.)
/* 인접 형제 선택자 */
label + p {
  border:1px solid black;
}

/* 일반 형제 선택자 */
label ~ p {
  border:1px solid black;
}

같은 부모 요소를 가지는 요소들을 형제 관계라고 말한다.

인접 형제 선택자는 형제들 중 첫번째 동생 요소가 조건을 충족시킬 때에만 스타일 적용한다. (동생이 여러명 있다고 하도 첫번째 요소만 적용) 일반 형제 선택자는 조건을 충족하는 모든 동생 요소에 스타일을 적용 한다.

두 선택자 모두 형요소에는 적용이 되지 않는다.

2-7 속성 선택자

패턴 설명
E[attr] attr을 정의한 요소 E를 선택한다.
E[attr=’val’] attr 속성의 값이 정확하게 val과 일치하는 요소 E를 선택한다.
E[attr~=’val’] attr 속성 값에 val이 포함되는 요소를 선택한다.(띄어 쓰기를 통해 여러개 올 수있는 속성값중 하나만 일치해도 선택 된다.)
E[attr^=’val’] attr 속성 값에 val으로 시작하는 요소를 선택한다.
E[attr$=’val’] attr 속성 값에 val으로 끝나는 요소를 선택한다.
E[attr*=’val’] attr 속성 값에 val이 포함되는 모든요소를 선택한다.
E[attr|=’val’] attr 속성 값이 정확하기 val이거나 val-으로 시작되는 요소 E를 선택한다.
/* E[attr]형식 */
a[href] { background: yellowgreen; color: black; }

/* E[attr="val"]형식 */
input[type="text"] { width: 150px; border: 1px solid #000; }

/* 라디오 버튼이 체크된 것들 선택*/
input[type="radio"]:checked { width: 150px; border: 1px solid #000; }

/* E[attr$="val"]형식 */
a[href$=".xls"] { background: darkgreen; }

2-8 가상 클래스 선택자

가상클래스는 웹 문서의 소스에는 실제 존재하지 않지만 필요에 의해 임의로 가상의 선택자를 지정한다.

링크 선택자(The link pseudo-classes)와 동적 선택자(The user action pseudo-classes)

패턴 설명
E:link 방문하지 않은 링크 E를 선택한다.
E:visited 방문한 링크 E를 선택한다.
E:active E요소에 마우스 클릭이나 키보드 엔터가 눌린 동안 E를 선택한다.
E:hover E요소에 마우스가 올라가 있는 동안 E를 선택한다.
E:focus E요소에 포커스가 있는 동안 E를 선택한다.

링크 엘리먼트 사용시 링크선택자를 통해 스타일을 줄수 있다.


구조적 가상 클래스 선택자(Structural pseudo-classes)

패턴 설명
E:root 문서의 최상의 요소를 선택한다.
E:nth-child(n) 앞으로 지정된 순서와 일치하는 요소가 E면 선택한다.
E:nth-last-child(n) 뒤로부터 지정된 순서와 일치하는 요소 E면 선택한다.
E:nth-of-type(n) E요소 중 앞으로부터 순서가 일치하는 E요소를 선택한다.
E:nth-last-of-type(n) E요소 중 끝으로 부터 순서가 일치하는 E요소를 선택한다.
E:first-child 첫 번째 등장하는 요소가 E면 선택한다.
E:last-child 마지막에 등장하는 요소가 E면 선택한다.
E:first-of-type E요소 중 첫번째 E를 선택한다.
E:last-of-type E요소 중 마지막 E를 선택한다.
E:only-child E요소가 유일한 자식이면 선택한다.
E:only-of-type E요소가 유일한 타입이면 선택한다.
E:empty 텍스트 및 공백을 포함하여 자식요소가 없는 E를 선택한다.

nth-child와 nth-of-type의 가장 큰 차이점은 바로 해당하는 태그의 순서를 말하는지 아니면 부모 속성에서 특정 태그를 가진 자식 속성에서 몇번째 해당하는지의 차이라고 보면된다.


  • nth-child : 모든 자식의 순서에서 찾음
  • nth-of-type: 해당하는 자식 태그 요소에서의 순서를 찾음

그 외의 선택자

언어선택자

패턴 설명
E:lang(ko) HTML LANG 속성의 값이 ‘ko’으로 지정된 요소를 선택한다.

부정선택자

패턴 설명
E:not(S) S가 아닌 E요소를 선택 한다.

목적 선택자

패턴 설명
E:target E의 URI가 요청되면 선택합니다. (따라서 E는 ID가 지정되어 있어야 합니다.)

UI 요소 선택자.

패턴 설명
E:enabled 사용 가능한 폼 콘트롤(input, textarea, select, button) E를 선택합니다.
E:disabled 사용 불가능 폼 콘트롤(input, textarea, select, button) E를 선택합니다.
E:checked 선택된 폼 컨트롤(checkbox,radio)) E를 선택합니다.

가상 엘리먼트 선택자

패턴 설명
E:first-line E 요소의 첫 번째 라인을 선택
E:first-letter E 요소의 첫번째 문자를 선택
E:before E 요소의 시작 지점에 생선된 요소를 선택
E:after E 요소의 끝 지점에 생선된 요소를 선택

css 적용 우선 순위

!important > id [ 100 ] > class [ 10 ] > tag [ 1 ] > * [ 0 ]

reference