일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 딥다이브
- useState
- react
- CSS
- 완전탐색
- 해시
- 병합 정렬
- 알고리즘
- BOJ
- node.js
- state
- 백준
- JS
- hash
- 리액트
- 자료구조
- 기술면접
- 최소공배수
- 정렬
- sort
- JavaScript
- 코테
- 정규표현식
- 프로그래머스
- 자바스크립트
- 코딩테스트
- 합병 정렬
- Node
- 연결리스트
- 브루트포스
- Today
- Total
가치투자자
[CSS] 선택자 본문
선택자 (Selector)
우리가 원하는 UI를 만들기 위해 HTML에 스타일(디자인, 레이아웃 등)을 적용해줘야 한다. 이때 HTML 문서에서 우리가 원하는 요소에만 CSS를 적용하기 위해 선택자(selector) 가 필요하다.
먼저, 선택자에 CSS를 적용하는 방법부터 살펴보겠다.
예를 들어, h1 태그에 12px 크기의 빨간색 글씨로 CSS를 적용하고 싶을 때, 아래처럼 선택자 뒤에 {}를 써주고, 그 안에 우리가 원하는 스타일을 객체 형태(프로퍼티와 값)로 적어주면 된다.
1. 기본 선택자
1-1. 전체 선택자 (Universal Selector)
HTML 문서 내의 모든 요소를 선택하는 선택자다. 별표(*) 로 모든 HTML를 선택할 수 있다.
아래 예시처럼 head 태그를 포함해 모든 요소에 CSS가 적용된다. 전체 선택자는 마진이나 패딩, 폰트 등 초기화하거나 기본 세팅을 위해 자주 사용된다.
예시>
* {
color: skyblue;
}
CSS 선택자
- 기본 선택자
- 가상 클래스 선택자
- 가상 요소 선택자
실제 적용 사례>
* {
margin: 0;
padding: 0;
}
1-2. 태그 선택자 (Type Selector)
태그 선택자는 특정 태그를 모두 선택하는 선택자다. 특정 태그명 를 적고 그 뒤에 스타일을 적어주면 된다.
아래 예시에서 ol 태그만 CSS를 적용하고 싶을때 가능하다.
예시>
<body>
<h3>CSS 선택자</h3>
<ol>
<li>기본 선택자</li>
<li>가상 클래스 선택자</li>
<li>가상 요소 선택자</li>
</ol>
</body>
ol { color: skyblue; }
CSS 선택자
- 기본 선택자
- 가상 클래스 선택자
- 가상 요소 선택자
1-3. 클래스 선택자 (Class Selector)
클래스 선택자는 특정 클래스를 가진 모든 요소를 선택하는 선택자다. CSS에서 콤마(.) 클래스명 형식으로 스타일을 적어주면 된다.
또한, 공백을 기준으로 여러 클래스명을 가질 수 있다. 아래처럼 특정 클래스에 대해 CSS를 정의해두면, 다른 태그에 재사용 할 수 있다.
아래 예시에서도 text-center에 대한 CSS를 정의해두었기에 여러번 반복해서 재사용할 수 있는 것이다.
예시>
<body>
<h3 class="text-center">CSS 선택자</h3>
<ol>
<li class="text-center">클래스 선택자</li>
<li class="text-center text-green">ID 선택자</li>
</ol>
</body>
.text-center { text-align: center; }
.text-green { color: green; }
CSS 선택자
- 클래스 선택자
- ID 선택자
1-4. ID 선택자 (ID Selector)
ID 선택자는 특정 ID를 가진 요소를 선택하는 선택자다. CSS에서 샵(#) ID명 형식으로 스타일을 적어주면 된다.
ID는 클래스와 달리 중복될 수 없는 유일한 값이기에 특정한 요소에만 어떤 스타일을 적용하고 싶을때 주로 사용된다.
아래 예시에서 공통적인 스타일은 클래스로 주고, textBold 아이디를 가진 요소에만 특정 스타일을 부여했다.
예시>
<body>
<h3 class="text-center">CSS 선택자</h3>
<div>
<p class="text-center">기본 선택자</p>
<p class="text-center">가상 클래스 선택자</p>
<p class="text-center" id="textBold">가상 요소 선택자</p>
</div>
</body>
.text-center { text-align: center; }
#textBold { font-weight: bold; }
CSS 선택자
기본 선택자
가상 클래스 선택자
가상 요소 선택자
1-5. 어트리뷰트 선택자 (Attribute Selector)
어트리뷰트 선택자는 특정 attribute(속성)을 가진 모든 요소를 선택하는 선택자다. 선택자[어트리뷰트] 형식으로 요소를 선택할 수 있다.
아래 유형1을 살펴보면, div태그 내의 title라는 attribute에 스타일을 부여했다.
유형1>
<body>
<h4 id="textBold">가치엔진 개발자 블로그</h4>
<div title="subtitle first">1. JavaScript</div>
<div title="subtitle-first">2. TypeSript</div>
<div>3. React</div>
</body>
div[title] { color: blueviolet; }
가치엔진 개발자 블로그
유형2>
선택자[어트리뷰트="값"] 형식으로 특정 attribute 중 특정 value를 가지는 요소를 선택할 수 있다.
아래 예시에서 subtitle 값을 가진 요소를 선택해 스타일을 부여했다.
<body>
<h4 id="textBold">가치엔진 개발자 블로그</h4>
<div title="subtitle-first">1. JavaScript</div>
<div title="subtitle-second">2. TypeSript</div>
<div title="subtitle-third">3. React</div>
</body>
div[title="subtitle-first"] { color: brown; }
가치엔진 개발자 블로그
유형3>
선택자[어트리뷰트~="값"] 형식으로 특정 attribute 중 특정 value를 가지는 요소만 선택할 수 있으며, 이 value에 다른 단어가 붙어있으면 적용이 되지 않는다.
<body>
<h4 id="textBold">가치엔진 개발자 블로그</h4>
<div title="subtitle first">1. JavaScript</div>
<div title="subtitle-first">2. TypeSript</div>
<div title="subtitle-second">3. React</div>
</body>
div[title~="subtitle"] { color: darkblue; }
가치엔진 개발자 블로그
유형4>
선택자[어트리뷰트|="값"] 형식으로 특정 attribute 중 특정 value를 가지는 요소만 선택할 수 있으며, 이 value로 시작하거나 "-" 문자가 곧바로 뒤에 붙어 있어도 선택할 수 있다.
아래의 예시를 보면, 값이 subtitle로 시작하는 모든 요소에 스타일이 적용되고 있다.
<body>
<h4 id="textBold">가치엔진 개발자 블로그</h4>
<div title="subtitle first">1. JavaScript</div>
<div title="subtitle-first">2. TypeSript</div>
<div title="subtitle-second">3. React</div>
</body>
div[title|="subtitle"] { color: chocolate; }
가치엔진 개발자 블로그
유형5>
선택자[어트리뷰트^="값"] 형식으로 특정 attribute 중 특정 value로 시작하는 요소를 선택할 수 있다.
아래의 예시를 보면, a태그의 href의 값 중 https://로 시작하는 요소에만 스타일을 적용하고 있다.
<body>
<h4>블로그 리스트</h4>
<a href="https://www.test.com">https://www.test.com</a><br>
<a href="http://www.test.com">http://www.test.com</a>
</body>
a[href^="https://"] { color: coral; }
블로그 리스트
유형6>
선택자[어트리뷰트$="값"] 형식으로 특정 attribute 중 특정 value로 끝나는 요소를 선택할 수 있다.
아래의 예시를 보면, a태그의 href의 값 중 .html로 끝나는 요소에만 스타일을 적용하고 있다.
<body>
<h4>파일 리스트</h4>
<a href="test.html">html 파일</a><br>
<a href="test.js">js 파일</a>
</body>
a[href$=".html"] { color: crimson; }
파일 리스트
유형7>
선택자[어트리뷰트*="값"] 형식으로 특정 attribute 중 특정 value을 포함하는 요소를 선택할 수 있다.
아래의 예시를 보면, div태그의 class 중에서 값으로 subtitle을 가지고 있는 요소에만 스타일을 적용하고 있다.
<body>
<h4>가치엔진 개발자 블로그</h4>
<div class="title">1. Front-end</div>
<div class="subtitle">1) JavaScript</div>
<div class="subtitle">2) CSS</div></br>
<div class="title">2. CS</div>
<div class="subtitle">1) 자료구조</div>
<div class="subtitle">2) 알고리즘</div>
</body>
div[class*="subtitle"] { color: darkorchid; }
가치엔진 개발자 블로그
2. 복합 선택자 (Combinator)
복합 선택자에 들어가기에 앞서, 부모, 형제, 자식, 자손이 어떤 개념인지 알고 갈 필요가 있다.
아래 사진을 보면, div 태그를 기준으로 한 단계 상위에 있는 section 태그가 부모 요소이며, 한 단계 하위에 있는 p 태그가 자식 요소라 한다. 그리고 n단계 아래에 있는 요소들이 자손 요소다. 자식 요소도 자손 요소에 포함된다. 형제 요소는 div 태그와 같은 선상에 있는 h1 태그, img 태그들이 이에 해당한다.
2-1. 자식 선택자 (Child Combinator)
자식 선택자는 선택자 A의 자식 요소 중 모든 선택자 B를 선택한다. 선택자A > 선택자B 형식으로 스타일을 부여할 수 있다.
아래 예시를 보면, div 태그 내에서 한 단계 아래 있는 모든 p 태그에 스타일이 적용된다. 다만, div 태그의 자손 요소인 div > span > p 태그는 자식 요소가 아니니 적용되지 않는다.
<body>
<h3>가치엔진 개발자 블로그</h3>
<div>
<p>1. JavaScript</p>
<p>2. TypeScript</p>
<span><p>3. React</p></span>
</div>
<p>4. Redux</p>
</body>
div > p { color: red; }
가치엔진 개발자 블로그
1. JavaScript
2. TypeScript
3. React
4. Redux
2-2. 자손 선택자 (후손 선택자, Descendant Combinator)
자손(후손) 선택자는 선택자 A의 자손 요소 중 모든 선택자 B를 선택한다. 선택자A 선택자B 형식으로 중간에 공백 을 기준으로 선택자 B에 스타일을 부여할 수 있다. 아래 예시를 보면, div 태그 내에서 있는 모든 p 태그에 스타일이 적용된다.
<body>
<h3>가치엔진 개발자 블로그</h3>
<div>
<p>1. JavaScript</p>
<p>2. TypeScript</p>
<span><p>3. React</p></span>
</div>
<p>4. Redux</p>
</body>
div p { color: red; }
가치엔진 개발자 블로그
1. JavaScript
2. TypeScript
3. React
4. Redux
2-3. 형제 선택자 (동위, Sibling Combinator)
유형1> 일반 형제 선택자 (General Sibling Combinator)
일반 형제 선택자는 선택자 A 뒤에 있는 형제 요소 중 모든 선택자 B를 선택한다. 선택자A ~ 선택자B 형식으로 스타일을 부여할 수 있다.
아래 예시를 보면, p 태그 뒤에 있는 형제 요소 중 모든 ol 태그에 스타일이 적용된다.
<body>
<h3 id="text-bold">가치엔진 개발자 블로그</h3>
<div>Tech Stack</div>
<ol>
<li>1. JavaScript</li>
<li>2. TypeScript</li>
<li>3. React</li>
<li>4. Redux</li>
</ol>
<p>Tool</p>
<ol>
<li>1. Figma</li>
<li>2. Git</li>
</ol>
</body>
p ~ ol { color: blue; }
가치엔진 개발자 블로그
- 1. JavaScript
- 2. TypeScript
- 3. React
- 4. Redux
Tool
- 1. Figma
- 2. Git
유형2> 인접 형제 선택자 (Adjacent Sibling Combinator)
인접 형제 선택자는 선택자 A 바로 뒤에 있는 형제 요소 선택자 B를 선택한다. 선택자A + 선택자B 형식으로 스타일을 부여할 수 있다.
아래 예시를 보면, div 태그 바로 뒤에 있는 형제 요소 ol 태그에만 스타일이 적용된다.
<body>
<h3 id="text-bold">가치엔진 개발자 블로그</h3>
<div>Tech Stack</div>
<ol>
<li>1. JavaScript</li>
<li>2. TypeScript</li>
<li>3. React</li>
<li>4. Redux</li>
</ol>
<p>Tool</p>
<ol>
<li>1. Figma</li>
<li>2. Git</li>
</ol>
</body>
div ~ ol { color: red; }
가치엔진 개발자 블로그
- 1. JavaScript
- 2. TypeScript
- 3. React
- 4. Redux
Tool
- 1. Figma
- 2. Git
References
- https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Selectors
- https://poiemaweb.com/css3-selector
- https://www.w3schools.com/cssref/css_selectors.php
'Programming > HTML, CSS' 카테고리의 다른 글
[HTML] 시멘틱 태그(semantic tag)란? (2) | 2023.06.17 |
---|---|
[CSS] position (0) | 2023.06.04 |
[CSS] display (0) | 2023.06.03 |
[CSS] 선택자 : 가상 클래스 & 가상 요소 (0) | 2023.04.21 |
[CSS] Flexbox 레이아웃 (0) | 2023.04.17 |