일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- node
- TypeScript
- github
- 코드업
- node.js
- java
- media query
- 그럼에도 불구하고
- redux
- react-router-dom
- git
- max-width
- 자바문제풀이
- cleancode
- frontend
- @media
- JavaScript
- 프론트엔드
- react
- HTML
- CSS
- 자바
- 코딩테스트
- 반응형 페이지
- 변수
- 그럼에도불구하고
- webpack
- coding
- JS
- Servlet
- Today
- Total
그럼에도 불구하고
[CSS] 여러가지 선택자 본문
오늘은 여러 가지 선택자에 대해 알아보자
[ 연결 선택자 ]
하위 요소에 스타일을 적용하는 하위 선택자와 자식 선택자
특정 요소를 기준으로 그 안에 포함된 요소를 하위 요소라고 한다.
그리고 현재 요소를 기준으로 바로 한 단계 아래 요소는 자식 요소라고 하며, 그 자식 요소의 한 단계 아래는 손자 요소라고 한다.
[ 하위 선택자 ]
하위 선택자(descendant selector)를 사용하면 부모 요소에 포함된 하위 요소를 모두 선택하며 자손 선택 자라고도한다.
즉, 자식 요소뿐만 아니라 손자 요소, 손자의 손자 요소 등 모든 하위 요소까지 적용된다.
하위 선택자는 상위 요소와 하위 요소를 공백으로 구분한다.
상위요소 하위요소
[ 자식 선택자 ]
자식 선택자(child selector)는 하위 선택자와 다르게 자식 요소에만 스타일을 적용하는 선택자로, 다음과 같이 두 요소 사이에 '>' 기호를 표시해 부모 요소와 자식 요소를 구분한다.
부모요소 > 자식요소
하위 요소에 스타일을 적용하는 하위 선택자와 자식 선택자
웹 문서에서 부모 요소가 같을 경우 형제 관계라고 하고, 형제 관계인 요소에서 먼저 나오는 요소를 형 요소, 나중에 나오는 요소를 동생 요소라고 한다.
[ 인접 형제 선택자 ]
형제 요소 중에서 첫 번째 동생 요소만 선택하는 것을 인접 형제 선택자(adjacent selector)라고 한다.
인접 형제 선택자를 정의할 때는 다음 기본형과 같이 요소1과 요소 2 사이에 '+' 기호를 표시한다.
요소1과 요소 2는 같은 레벨이면서 요소 1 이후 가장 먼저 오는 요소 2를 선택한다.
요소1 + 요소2
[ 형제 선택자 ]
형제 선택자(sibliing selector)는 형제 요소의 스타일을 정의하는데 인접 형제 선택자와 달리 모든 형제 요소에 적용된다.
형제 선택자를 정의할 때는 첫 번째 요소와 두 번째 요소 사이에 '~' 기호를 표시한다.
즉, 요소1과 형제인 요소 2를 모두 선택하는 것이다.
요소1 ~ 요소2
[ 속성 선택자 ]
속성 선택자는 태그 안에서 사용하는 속성값에 따라 요소를 선택하는 역할을 한다.
[ 특정 속성이 있는 요소를 선택하는 [속성] 선택자 ]
HTML 태그를 작성할 때 여러 가지 속성을 함께 사용하는데, 그 속성 값에 따라 원하는 요소를 선택할 수도 있다.
이때 사용하는 것이 [속성]선택자인데, 대괄호([ ]) 사이에 원하는 속성을 입력하면 된다.
input[required] {.... }
// required : 찾으려고 하는 속성 이름
[ 특정 속성값이 있는 요소를 선택하는 [ 속성 = 속성 값 ] 선택자 ]
[속성 = 속성값] 선택자는 주어진 속성과 속성값이 일치하는 요소를 찾아 스타일을 지정할 때 사용한다.
이 형식은 대괄호 ( [ ])안에 속성과 속성 값을 넣고 그 사이에 '=' 기호를 표시한다.
input[type=text] { .... }
// <input> type이 text인 요소
[ 여러 값 중에서 특정 속성값이 포함된 속성 요소를 선택하는 [ 속성 ~= 값 ] 선택자 ]
[속성 ~= 값] 선택자는 여러 속성값 중에서 해당 속성 값이 포함된 요소를 선택한다.
이 선택자는 속성이 하나면서 속성값이 여러 개일 때 특정 속성 값을 찾는데 편리하다.
[class ~= btn] { ... }
// class 값중에 btn이 있는 요소
여기서 주의할 점은, [속성~=값] 선택자는 btn 값과 정확하게 일치하는 요소를 선택한다는 것이다.
만약 first-btn이나 btns 처럼 btn 외에 다른 글자가 속성 값에 포함되어 있으면 선택하지 않는다.
[ 특정 속성값이 포함된 속성 요소를 선택하는 [ 속성 |= 값 ] 선택자 ] ( | => shift + ₩ )
[속성 |= 값] 선택자는 특정 속성값이 포함된 속성에 스타일을 적용한다.
이때 속성값은 한 단어로 일치해야 한다.
앞에서 다룬 [속성 ~= 값] 선택자와 비슷해 보이지만,[속성 ~= 값]은 하이픈(-)으로 연결한 단어에 스타일을 적용하지 않는다는 점에서 [속성 |= 값] 선택자와 차이가 있다.
즉, [속성 |= 값] 선택자는 지정한 값과 정확하게 일치하거나 지정한 값을 포함해서 하이픈(-)으로 연결된 단어도 선택한다.
예를 들어 title 속성 값에 us가 있거나 us-로 연결된 속성 값이 있는 a 요소를 찾는다면 다음과 같이 작성한다.
a[title |= us] {...}
[ 특정 속성값으로 시작하는 속성 요소를 선택하는 [ 속성 ^= 값 ] 선택자 ]
속성 값이 정확하게 일치하지 않더라도 지정한 속성 값으로 시작하는 요소를 찾으려면 [속성 ^= 값] 선택자를 사용한다.
a[title ^= eng] {....}
위의 코드와 같은 경우 eng로 시작하는 title에는 모두 적용할 수 있다.
eng, english english2와 같이 eng로 시작하는 요소라면 모두 적용이 가능하다.
[ 특정 값으로 끝나는 속성 요소를 선택하는 [ 속성 $= 값 ] 선택자 ]
[속성 ^= 값]이 지정한 속성값으로속성 값으로 시작하는 요소를 선택했다면, [속성 $=값] 선택자는 지정한 속성 값으로 끝나는 요소를 선택한다.
[href $= xls] {...}
위의 코드의 경우 링크한 파일 이름의 마지막 단어가 xls인 요소를 찾는다면 적용할 수 있다.
[ 일부 속성값이 일치하는 요소를 선택하는 [ 속성 *= 값 ] 선택자 ]
[속성 *=값] 선택자는 속성값이속성 값이 어느 위치에 있든지 지정한 속성 값이 포함되어 있다면 해당 요소를 선택한다.
[href *= w3] {...}
위의 코드의 경우 href 속성값 중에 'w3'가 포함되어 있다면 적용할 수 있다.
[ 가상 클래스와 가상요소 ]
[ 사용자 동작에 반응하는 가상 클래스 ]
사용자가 웹 요소를 클릭하거나 마우스 포인터를 올려놓는 등 특정 동작을 할 때 스타일이 바뀌도록 만들고 싶으면
가상 클래스 선택자를 사용할 수 있다.
1. 방문하지 않은 링크에 스타일을 적용하는 ':link 가상 클래스 선택자'
웹 문서의 링크 중에서 사용자가 아직 방문하지 않은 링크에 스타일을 적용한다.
2. 방문한 링크에 스타일을 적용하는 ':visited 가상 클래스 선택자'
웹 문서의 링크 중에서 한 번 이상 방문한 링크에 스타일을 적용한다.
3. 특정 요소에 마우스 포인터를 올려놓으면 스타일을 적용하는 ':hover 가상 클래스 선택자'
:hover 선택자는 웹 요소 위로 마우스 포인터를 올려놓을 때 스타일을 적용한다.
4. 웹 요소를 활성화했을 때 스타일을 적용하는 ':active 가상 클래스 선택자'
:active 선택자는 웹 요소의 링크나 이미지 등을 활성화했을 때, 즉 클릭했을 때 스타일을 지정한다.
5. 웹 요소에 초점이 맞추어졌을 때 스타일을 적용하는 ':focus 가상 클래스 선택자'
:focus 선택자는 웹 요소에 초점이 맞추어졌을 때 스타일을 적용한다.
1. :link
2. :visited
3. :hover
4. :active
[ 요소 상태에 따른 가상 클래스 ]
웹 사이트나 애플리케이션 화면에서 요소의 상태에 따라 스타일을 적용할 수 있는데, 이때 가상 클래스 선택자를 사용한다.
1. 앵커 대상에 스타일을 적용하는 ':target 가상 클래스 선택자'
문서에서 같은 사이트나 다른 사이트의 페이지로 이동할 때에는 링크를 이용하고, 같은 문서 안에서 다른 위치로 이동할 때에는 앵커(anchor)를 이용한다.
즉, :target 선택자를 사용하면 앵커의 목적지가 되는 부분의 스타일을 쉽게 적용할 수 있다.
'앵커'는 페이지가 긴 웹 문서에서 특정 요소를 클릭하면 그 위치로 한번에 이동하도록 도와주는 기능이다.
2. 요소의 사용 여부에 따라 스타일을 적용하는 ':enabled와 :disabled 가상 클래스 선택자'
해당 요소가 사용할 수 있는 상태일 때 스타일을 지정하려면 :enabled 선택자를 사용하고, 반대로 사용할 수 없느 ㄴ상태일 때 스타일을 지정하려면 :disabled 선택자를 사용한다.
3. 선택한 항목의 스타일을 적용하는':checked 가상 클래스 선택자'
폼의 라디오 박스나 체크 박스에서 선택된 항목에는 checked라는 속성이 추가된다.
이렇게 checked 속성이 있는 요소의 스타일을 지정할 때 :checked 선택자를 사용하면 편리하다.
4. 특정 요소를 제외하고 스타일을 적용하는':not 가상 클래스 선택자'
':not 선택자'는 이름에서도 알 수 있듯이 부정의 의미가 있다.
여기서 not은 '괄호 안에 있는 요소를 제외한'이라는 의미이다.
not 가상 클래스 선택자
<!DOCTYPE html>
<html>
<head>
<style>
/* input 요소 중에서 type 어트리뷰트의 값이 password가 아닌 요소를 선택 */
input:not([type=password]) {
background: yellow;
}
</style>
</head>
<body>
<input type="text" value="Text input">
<input type="email" value="email input">
<input type="password" value="Password input">
</body>
</html>
결과:
1. :target
2. :enabled, :disabled
3. :checked
4. :not
[ 정합성 체크 셀렉터 (validity pseudo-class) ]
pseudo-class | Desscription |
:valid(셀렉터) | 정합성 검증이 성공한 input 요소 또는 form 요소를 선택한다. |
:invalud(셀렉터) | 정합성 검증이 실패한 input 요소 또는 form 요소를 선택한다. |
<!DOCTYPE html>
<html>
<head>
<style>
input[type="text"]:valid {
background-color: yellow;
}
input[type="text"]:invalid {
background-color: red;
}
</style>
</head>
<body>
<label>입력값이 반드시 필요
<input type="text" required>
</label>
<br>
<label>특수문자를 포함하지 않는 4자리 문자 또는 숫자
<input type="text" value="ab1!"
pattern="[a-zA-Z0-9]{4}" required>
</label>
<br>
<label>핸드폰 번호 형식
<input type="text" value="010-1111-2222"
pattern="^\d{3}-\d{3,4}-\d{4}$" required>
</label>
</body>
</html>
결과:
[ 구조 가상 클래스 ]
구조 가상 클래스란 웹 문서의 구조를 기준으로 특정 위치에 있는 요소를 찾아 스타일을 적용할 때 사용하는 가상 클래스 선택 자이다.
[ 특정 위치의 자식 요소를 선택하는 구조 가상 클래스 선택자의 종류 ]
종류 | 설명 |
:only-child | 부모 안에 자식 요소가 하나뿐일 때 자식 요소를 선택한다. |
A:only-type-of | 부모 안에 A 요소가 하나뿐일 때 선택한다. |
:first-child | 부모 안에 있는 모든요소 중에서 첫 번째 자식 요소를 선택한다. |
:last-child | 부모 안에 있는 모든 요소 중에서 마지막 자식 요소를 선택한다. |
A:first-of-type | 부모 안에 있는 A 요소 중에서 첫 번째 요소를 선택한다. |
A:last-of-type | 부모 안에 있는 A 요소 중에서 마지막 요소를 선택한다. |
:nth-child(n) | 부모 안에 있는 모든 요소 중에서 n번째 자식 요소를 선택한다. |
:nth:last-child(n) | 부모 안에 있는 모든 요소 중에서 끝에서 n번째 자식 요소를 선택한다. |
A:nth-of-type(n) | 부모 안에 있는 A 요소 중에서 n번째 요소를 선택한다. |
A:nth-last-of-type(n) | 부모 안에 있는 A 요소 중에서 끝에서 n번째 요소를 선택한다. |
[ 가상 요소 ]
가상 클래스가 웹 문서의 여러 요소 중에서 원하는 요소를 선택한다면, 가상 요소는 문서 안의 특정 부분에 스타일을 지정하기 위해 가상으로 요소를 만들어 추가한다.
가상 요소를 만들어 사용하는 이유는 특별히 화면에 보이는 부분을 꾸밀 때 불필요한 태그를 사용하지 않도록 하기 위함이다.
가상 요소는 가상 클래스와 구별하도록 가상 요소 이름 앞에 콜론 2개 (::)를 붙여서 표시한다.
1. 첫번째 줄, 첫 번째 글자에 스타일을 적용하는 '::first-line 요소, ::first-letter 요소'
::first-line 요소와 ::first-letter 요소를 사용하면 지정한 요소의 첫 번째 줄이나 첫 번째 글자에 스타일을 적용할 수 있다.
단, ::first-letter 요소는 해당 요소의 첫 번째 글자를 가리키는데, 첫 번째 글자는 반드시 첫 번째 줄에 있어야 한다.
2. 내용 앞뒤에 콘텐츠를 추가하는'::before요소, ::after 요소'
::before요소와 ::after요소를 사용하면 지정한 요소의 내용 앞뒤에 스타일을 넣을 수 있다.
3. 드래그한 콘텐츠를 선택하는'::selection요소'
단, iOS Safari 등 일부 브라우저에서 동작하지 않는다.
<!DOCTYPE html>
<html>
<head>
<style>
/* p 요소 콘텐츠의 첫글자를 선택 */
p::first-letter { font-size: 3em; }
/* p 요소 콘텐츠의 첫줄을 선택 */
p::first-line { color: red; }
/* h1 요소 콘텐츠의 앞 공간에 content 어트리뷰트 값을 삽입한다 */
h1::before {
content: " HTML!!! ";
color: blue;
}
/* h1 요소 콘텐츠의 뒷 공간에 content 어트리뷰트 값을 삽입한다 */
h1::after {
content: " CSS3!!!";
color: red;
}
/* 드래그한 콘텐츠를 선택한다 */
::selection {
color: red;
background: yellow;
}
</style>
</head>
<body>
<h1>This is a heading</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Explicabo illum sunt distinctio sed, tempore, repellat rerum et ea laborum voluptatum! Quisquam error fugiat debitis maiores officiis, tenetur ullam amet in!</p>
</body>
</html>
결과:
'HTML, CSS > HTML, CSS basics' 카테고리의 다른 글
[CSS] Viewport 단위 (vh,vw,vmin,vmax) (0) | 2022.12.20 |
---|---|
[HTML] 시맨틱 웹(Sementic Web) / 시맨틱 태그(Sementic tag) (0) | 2022.12.19 |
[CSS] linear-gradient / radial-gradient / border gradient (0) | 2022.12.15 |
[CSS] 캐스케이딩 / 스타일 우선순위 (0) | 2022.12.13 |
[HTML] form 태그 / input 태그 타입 정리 (0) | 2022.12.13 |