CSS 고급 선택자
1. 연결 선택자
- 하위선택자와 자식선택자
- 하위선택자: 부모요소에 포함된 하위요소를 모두 선택
- 자손선택자라 불리며, 모든 하위요소에 적용
상위요소 하위요소
section p {}
상위요소(section) 하위요소(p)
ex)
section p {color: blue;}
</style>
...
<section> /*section의 모든 하위 p 요소에 적용 가능*/
<p> ... </p>
<p> ... </p>
- 자식선택자
- 자식선택자는 한단계 아래까지만 적용
부모요소 > 자식요소
ex)
section > p {color: blue;}
</style>
...
웹 문서에서 부모요소가 같은 경우, 형제관계라 한다.
이때, 먼저 나오는 요소를 형, 나중에 나오는 요소를 동생 요소라 한다.
- 인접형제선택자와 형제선택자
- 인접 형제 선택자
요소1 + 요소2
ex)
h1 + p {color: blue;}
</style>
...
<p>...</p> /* 첫번째 형제인 이곳만 적용됨*/
<p>...</p>
- 형제 선택자
요소1 ~ 요소2
ex)
h1 ~ p {color: blue;}
</style>
...
/*모든 형제요소 p에 적용됨*/
<p>...</p>
<p>...</p>
2. 속성 선택자
- 특정 속성이 있는 요소를 선택하는 [속성] 선택자
- 특정 속성값이 있는 요소를 선택하는 [속성 = 속성값] 선택자
- 단어별 여러값 중 특정값이 포함된 요소를 택하는 [속성 ~= 값] 선택자
- 특정 속성값이 포함된 속성요소를 선택하는 [속성 |= 값] 선택자
- 특정값으로 시작하는 속성요소를 택하는 [속성 ^= 값] 선택자
- 특정값으로 끝나는 속성요소를 선택하는 [속성 $= 값] 선택자
- 일부 속성값이 일치하는 요소를 선택하는 [속성 *= 값] 선택자
Ex)
/* href속성이 있는 a요소를 찾아 ...내용을 적용 */
a[href] {...}
/* <a target="_blank"> 인 요소를 찾아 ...를 적용 */
a[target = _blank] {...}
/*class값 중 button이 있는 요소에만 적용*/
[class ~= button] {...}
/* title 속성값에 us나 us-로 연결된 속성값이 있는 a요소를 찾아 적용 */
a[title |= us] {...}
/* title 속성값이 eng로 시작하는 a요소를 찾아 적용 */
a[title ^= eng] {...}
/* href에 링크된 파일이름의 마지막 단어가 xls를 찾아 적용 */
[href $= xls] {...}
/* href속성값 중 'w3' 이 포함된 요소 선택후 적용 */
[href *= w3] {...}
3. 가상클래스와 가상요소
- 가상 클래스
- 사용자 동작에 반응하는 가상클래스
- :link, :visited, :hover, :active, :focus
- 사용자 동작에 반응하는 가상클래스
:link
- 방문하지 않은 링크에 스타일을 적용
:visited
- 방문한 링크에 스타일 적용
:hover
- 특정 요소에 마우스 포인터를 올려놓으면 스타일을 적용
:active
- 웹 요소 활성화 시, 스타일을 적용
:focus
- 웹요소에 초점이 맞춰졌을 때, 스타일 적용
<style> .navi ul li { float: left; width: 150px; padding: 10px; } .navi a:link, .navi a:visited { display: block; font-size: 14px; color: #000; padding: 10px; text-decoration: none; text-align: center; } .navi a:hover, .navi a:focus { background-color: #222; color: #fff; } .navi a:active { background-color: #f00; } </style> <nav> <ul> <li><a href="#">이용안내</a></li> <li><a href="#">객실소개</a></li> <li><a href="#">예약방법 및 요금</a></li> <li><a href="#">예약하기</a></li> </ul> </nav>
- 마우스를 위로 올리면 검은색으로 바뀌고, 클릭하면 붉은색으로 바뀜
-
- 요소 상태에 따른 가상클래스: for 화면에서 요소상태에 따라 스타일 적용
- :target 가상클래스 선택자
- :enabled, :disabled 가상클래스 선택자
- :checked 가상클래스 선택자
- :not 가상클래스 선택자
- 요소 상태에 따른 가상클래스: for 화면에서 요소상태에 따라 스타일 적용
📌 앵커 대상에 스타일 적용하기 (:target)
<style> #intro:target { background-color: #0069e0; color: #fff; } </style> <nav class="navi"> <ul> <li><a href="#intro">이용 안내</a></li> <li><a href="#intro">객실 소개</a></li> <li><a href="#intro">예약방법 및 요금</a></li> <li><a href="ps-2.html">예약하기</a></li> </ul> </nav> <div id="intro" class="contents"> <h2>이용안내</h2> ... </div> <div id="intro" class="contents"> <h2>예약방법 및 요금</h2> ... </div>
📌 선택된 라디오 버튼의 스타일 적용하기 (:checked)
<style> #signup input:checked + label { color: red; font-weight: bold; } </style> <ul> <li> <input type="radio" name="room" id="basic"> <label for="basic">기본형(최대 2인)</label> <li> <li> <input type="radio" name="room" id="family"> <label for="basic">가족형(최대 8인)</label> </li> </ul>
-
- 구조 가상클래스
- 특정위치의 자식요소 선택하기
- :only-child
- A:only-type-of
- :first-child
- :last-child
- A:first-of-type
- A:first-of-type
- :nth-child(n)
- nth-last-child(n)
- A:nth-of-type(n)
- A:nth-last-of-type(n)
- 수식을 사용해 위치 지정하기
- 특정위치의 자식요소 선택하기
- 구조 가상클래스
/* div요소에서 3번째 자식인 p요소에 스타일 적용 */
div p:nth-child(3)
/* div요소에서 홀수번째로 나타나는 자식인 p요소에 스타일 적용 */
div p:nth-child(odd), div p:nth-child(2n+1)
- 가상 요소
- ::first-line, ::first-letter 요소
- 첫번째 줄, 첫번째 글자에 스타일 적용
- ::before, ::after 요소
- 내용 앞뒤에 콘텐츠를 추가
- ::first-line, ::first-letter 요소
<style>
li.new::after{
content: "NEW!"
font-size: x-small;
padding: 2px 4px;
margin: 0 10px;
border-radius: 2px;
background: #f00;
color: #fff;
}
</style>
...
<div class="container">
<h1>제품 목록</h1>
<ul>
<li class="new">제품 A</li>
<li>제품 B</li>
<li>제품 C</li>
<li class="new">제품 D</li>
</ul>
</div>
'ETC(front,back) > React(HTML, CSS, JS)' 카테고리의 다른 글
<frontend> {10} </반응형 웹> (0) | 2023.07.05 |
---|---|
<frontend> {09} </transition. &. animation> (0) | 2023.07.05 |
<frontend> {07} </이미지 그라데이션 및 배경 꾸미기> (0) | 2023.07.05 |
<frontend> {06} </CSS 박스 모델> (0) | 2023.07.05 |
<frontend> {05} </텍스트 표현 스타일> (0) | 2023.07.04 |