천재강쥐 2022. 9. 15. 09:40

 

더보기

CSS의 기타 선택자에 대해 알아보자

 

 

 

외부 스타일 방식

외부 스타일 방식: 스타일 정보만을 따로 관리하는 .css 외부 문서를 만들고 link 태그를 이용하여 연결시켜 주는 방법

 

resources/css 폴더 만든 뒤 해당 경로에 02_stylesheet.css 파일 생성

 

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>기타 선택자</title>

    <!--
        외부 스타일 방식: 스타일 정보만을 따로 관리하는 .css 외부 문서를 만들고
                        link 태그를 이용하여 연결시켜 주는 방법
    -->
    <link href="resources/css/02_stylesheet.css" rel="stylesheet">
    <!-- link: 외부 파일을 연결해 주겠다
         rel: 어떠한 방식으로 연결하겠다 -->
</head>

👉🏻 head 영역에 link 코드 작성 후 진행할 것

 

 

 

1.  속성 선택자

스타일을 부여하고자 하는 요소 내에 작성되어 있는 속성을 이용해서 선택하는 방법
👉🏻 선택자 뒤에 []를 이용해서 속성과 속성값을 추가 조건으로 제시해서 선택하는 방법

 

        [ 표현법 ]
  선택자[속성=속성값] {                         => "일치"
        선택자[속성~=속성값] {                      => "포함" (단어 기준, 띄어쓰기 기준)
        선택자[속성|=속성값] {                       => "시작" (-로 구분된 단어 기준)
        선택자[속성^=속성값] {                      => "시작" (일반 문자열 기준)
        선택자[속성$=속성값
] {                      => "끝" (일반 문자열 기준)
        선택자[속성*=속성값
] {                      => "포함" (일반 문자열 기준)
        }
            스타일속성명 : 값;
            스타일속성명 : 값;   
        }

 

 

공통 영역

<!-- 02_기타선택자.html -->

	<div class="div-class" name="name1">div1</div>
    <div class="div-class" name="name2">div2</div>
    <div class="div-class" name="name3 name1">div3</div>
    <div class="class-div" name="name3">div4</div>

 

 

 

1) div 태그들 중에서도 name 속성값이 name1과 "일치" 하는 요소

/* 02_stylesheet.css*/

div[name=name1] {
    background-color: orangered;
}

 

 

 

2) div 태그들 중에서도 name 속성값에 name1이 "포함"되어 있는 요소 (단어로써)

/* 02_stylesheet.css*/

div[name~=name1] {
    background-color: yellow;
}

 

 

 

3) div 태그들 중에서도 class 속성값이 div로 "시작"되는 요소 (- 앞에 한 단어로써)

 

/* 02_stylesheet.css*/

div[class|=div] {
    background-color: cyan;
}

 

 

 

4) div 태그들 중에서도 name 속성이 na로 "시작"되는 요소

 

/* 02_stylesheet.css*/

div[name^=na] {
    background-color: blue;
}

 

 

 

5) div 태그들 중에서도 class 속성이 ss로 "끝나는" 요소

/* 02_stylesheet.css*/

div[class$=ss] {
    color: white;
}

 

 

 

6) div 태그들 중에서도 class 속성값에 i가 "포함"되어 있는 요소

/* 02_stylesheet.css*/

div[class*=i] {
    background-color: yellow;
    color: red;
}

 

 

 

7) 응용: class 속성값이 div-class인 애들 중에서도 name 속성값에 name3이 포함되어 있는 요소들

/* 02_stylesheet.css*/

.div-class[name~=name3] {
    background-color: pink;
}

 

 

 

2. 자손 선택자와 후손 선택자

자손 👉🏻 바로 하위인 요소들
후손 👉🏻 하위 요소들 전부 (자손도 포함)

 

[ 표현법 ]
        *자손선택자 (>)
   a>b 
{
            스타일속성명 : 값;
        }

        * 후손선택자 ( )
 a b 
{
            스타일속성명 : 값;
        }

 

<!-- 02_기타선택자.html -->

	<div id="test1">
        <h4>div의 자손이면서 후손입니다.</h4>
        <h4>div의 자손이면서 후손입니다.</h4>
        <ul>div의 자손이면서 후손입니다.
            <li>나는 ul의 자손이면서 div의 후손입니다.</li>
            <li>나는 ul의 자손이면서 div의 후손입니다.</li>
        </ul>
    </div>

 

 

 👉🏻 a>b: a 요소의 자손들 중에서 b 요소들만 선택하겠다.

 

 

 

1) id 속성값이 test1인 요소의 자손들 중에서 h4 태그만 선택

/* 02_stylesheet.css*/

#test1>h4 {
    background-color: orangered;
}

 

 

 

2) id 속성값이 test1인 요소의 자손들 중에서 ul 태그의 자손 중에서 li 태그만 선택

/* 02_stylesheet.css*/

#test1>ul>li {
    background-color: darkcyan;
}


/* 경로 타고 들어가기 가능! */

 

👉🏻 a b: a 요소의 후손 (모든 하위요소)들 중에서도 b요소들만 선택하겠다.

1) id 속성값이 test1인 요소의 모든 후손들 중에서 li 태그들만 선택

/* 02_stylesheet.css*/

#test1 li {
    color: red;
}

 

 

 

3. 동위 (같은 레벨) 선택자

 👉🏻 동위 관계 (같은 레벨이며, 내 뒤)에 있는 특정 요소를 선택할 때 사용

 

        [ 표현법 ]
        * a 요소 뒤에 있는 b 요소 "하나만"을 선택
        a+b {
            스타일속성명 : 값;
        }

        * a 요소 뒤에 있는 "모든" b 요소를 선택
        a~b {
            스타일속성명 : 값;
        }

 

<!-- 02_기타선택자.html -->
	
    <div id="test2">div</div>
    <div>div2</div>
    <div>div3</div>
    <div>div4</div>
    <ul>ul요소</ul>
    <div>안녕</div>

 

 👉🏻 a+b: a 요소 뒤에 b 요소 "하나만"을 선택하겠다.

1) id 속성값이 test2인 요소의 뒤에 있는 div 요소 하나만을 선택

/* 02_stylesheet.css*/

#test2+div {
    background-color: yellow;
}

 

 

 

2) id 속성값이 test2인 요소의 뒤에 있는 ul 요소 하나만을 선택

/* 02_stylesheet.css*/

#test2+ul {
    background-color: pink;
}

/* 바로 뒤의 요소가 아니기 때문에 반영 안 됨! */

 

 

 

 👉🏻 a~b: a 요소 뒤의 모든 b 요소들을 선택하겠다.

1)  id 속성값이 test2인 요소 뒤의 모든 div 요소들을 선택

/* 02_stylesheet.css*/

#test2~div {
    background-color: green;
}

 

 

 

2) id 속성값이 test2인 요소 뒤의 모든 ul 요소들을 선택

/* 02_stylesheet.css*/

#test2~ul {
    background-color: pink;
}

 

 

 

4. 반응 선택자

 👉🏻 사용자의 움직임에 따라 선택이 되거나 안 되는 선택자

 

        [ 표현법 ]
        * 해당 요소에 클릭이 되었을 경우에만 스타일 부여
        선택자:active {
            스타일속성명 : 값;
        }
        
        * 해당 요소에 마우스가 올라가는 순간 스타일 부여
        선택자:hover {
            스타일속성명: 값;
        }

 

<!-- 02_기타선택자.html -->

	<div id="active-test" class="area">active 테스트</div>
	<br>
	<div id="hover-test" class="area">hover 테스트</div>
/* 02_styleshhe.css 공간 분리를 위해 하단 작업 후 진행 */

.area {
    background-color: yellowgreen;
    width: 100px;
    height: 100px;
}

 

 

 

 👉🏻 active: 마우스가 클릭되었을 때 선택하겠다.

1) id 속성값이 active-test인 요소에 마우스가 클릭되었을 때 선택

기존
클릭(클릭 풀면 스타일 풀림)
기존 클릭 시
(마우스 버튼을 떼는 순간 스타일도 풀림)

 

/* 02_styleshhe.css */

#active-test:active {
    background-color: yellow;
    color: red;
}

 

 

 👉🏻hover: 마우스가 올라가는 순간에 선택하겠다

1) id 속성값이 hover-test인 요소에 마우스가 올라갈 때 선택

기존
마우스를 올렸을 때 바뀜
기존 마우스를 올렸을 때

 

/* 02_styleshhe.css */

#hover-test:hover {
    background-color: maroon;
    color: white;
    cursor: pointer;
}

/* 캡처에는 나오지 않지만 cursor: pointer; 속성을 주면
   손가락 모양으로 커서가 바뀜 */

 

 

 

5. 상태 선택자

 👉🏻 요소의 상태에 따라서 선택되는 선택자
        (예를 들면 체크가 되었다거나, 선택이 되었다거나, 초점이 맞춰졌다거나, ...)

 

        [ 표현법 ]
        1) checked (체크됨) 상태의 요소
        선택자:checked {
            스타일속성명: 값;
        }

 

<!-- 02_기타선택자.html -->

<input type="checkbox" id="apple">
    <label for="apple">사과</label>

    <input type="checkbox" id="banana">
    <label for="banana">바나나</label>

    <input type="checkbox" id="kiwi">
    <label for="kiwi">키위</label>

 

 

 👉🏻 :checked: 체크된, 선택된 상태에만 선택하겠다.

1-1) input 태그들 중에서 type 속성값이 checekd인 요소들 중에서도 체크된 애들만 선택

 
기존 체크박스 선택했을 때

 

input[type=checkbox]:checked {
    width: 20px;
    height: 20px;
    font-size: 20px; /* 오직 checkbox에 대한 설정이기 때문에 글꼴 크기는 바뀌지 않음 */
}

 

 

1-2) 체크 박스가 체크될 때 글자 크기도 20px로 같이 변경하고 싶다면: 동위선택자 응용 (+)

기존 체크박스 선택했을 때
 input[type=checkbox]:checked+label {
    font-size: 20px;
 }
 
 /* 이 코드를 추가해 주면 됨 */

 

        [ 표현법 ]
        2) 초점 (focus)이 맞춰진 input 요소 선택
        선택자:focus {
            스타일속성명: 값;
        }

 

<!-- 02_기타선택자.html -->

    아이디: <input type="text" name="userId" placeholder="아이디를 입력하세요" required>
    <br>
    비밀번호: <input type="password" name="userPwd" maxlength="15" required>
    <br>

 

 

 👉🏻 :focus : 초점이 맞춰진 요소를 선택하겠다.

1-1) input 태그들 중에서 name 속성값이 user로 시작하는 요소들 중에서 초점이 맞춰진 요소만 선택

 /* 02_stlyesheet.css */
 
 input[name^=user]:focus {
    background-color: pink;
 }

 

 

        [ 표현법 ]

        3) 활성화(enabled) 되어 있는 요소들 선택
        선택자:enabled {
            스타일속성명: 값;
        }

 

        4) 비활성화(disabled) 되어 있는 요소들 선택
        선택자:disabled {
            스타일속성명 : 값;
        }

 

<!-- 02_기타선택자.html -->

 아이디: <input type="text" name="userId" placeholder="아이디를 입력하세요" required disabled>
    <br>
비밀번호: <input type="password" name="userPwd" maxlength="15" required>
    <br>
    
<!-- 코드 활용을 위해 아이디에도 disabled 속성을 걸어 놓음 -->
 
 <button>클릭가능</button> <!-- button 기본값: enabled-->
 <button disabled>클릭불가능</button>

 

 

 👉🏻 :enbled / :disabled: 활성화 / 비활성화된 요소들을 선택하겠다.

1) input 태그들 중에서 name 속성값이 user로 시작하는 요소들 중에서 비활성화된 요소만 선택

 /* 02_stlyesheet.css */
 
input[name^=user]:disabled {
    background-color: red;
 }

 

2) input 태그들 중에서 name 속성값이 user로 시작하는 요소들 중에서 활성화된 요소만 선택

 /* 02_stlyesheet.css */
 
 input[name^=user]:enabled {
    background-color: blue;
 }

 

3) button 태그들 중에서 활성화된 버튼만 선택

 /* 02_stlyesheet.css */
 
button:enabled { background-color: fuchsia;}

 

4) button 태그들 중에서 비활성화된 버튼만 선택

 /* 02_stlyesheet.css */
 
button:disabled { background-color: indigo;}