고래씌
[CSS] 1-2. CSS 선택자 ②(기본 속성 선택자, 자식 선택자, 후손 선택자, 반응 선택자, 상태 선택자, 동위 선택자 & 실습문제) 본문
[CSS] 1-2. CSS 선택자 ②(기본 속성 선택자, 자식 선택자, 후손 선택자, 반응 선택자, 상태 선택자, 동위 선택자 & 실습문제)
고래씌 2023. 11. 1. 16:071. 기본 속성 선택자
- 태그에 작성된 특정 속성을 선택하는 선택자
(id, class도 선택가능하지만 보통 아이디는 #, 클래스는 . 을 사용함)
[작성법]
선택자[속성명="속성값"] {css코드}
(참고)
① 선택자 부분은 생략이 가능
☞ 특정속성을 가진 모든 요소 선택
② 속성값 양쪽에 쌍따옴표를 추가해야한다.
☞ 홀따옴표(' ')로 사용하거나, 생략도 가능함
▶ link 태그
: 외부 css 파일과 연결하는 태그
<link href="resources/css/selector2.css" rel="stylesheet"> |
=> rel="" 이 파일이 stylesheet 파일이라는 것을 알리기 위해 작성해야한다!
=> 이것을 작성안하면 css파일의 style 적용이 안됨
■ selctor2.css 파일
/*
CSS 파일
파일 전체가 <style>태그 내부라고 생각하면 됨
*/
/* 기본 속성 선택자 */
/* 모든 div태그들 중 name 속성의 속성값이 name-1인 요소들 */
div[name="name-1"]{background-color: orange;}
/* 모든 태그들 중 name 속성의 속성값이 name-2인 요소들 */
*[name="name-2"]{background-color: blue;} /* * 생략가능 */
/* => p태그의 name-2 속성인 것도 모두 blue로 background-color 가 적용된 것을 확인 */
p[name='name-1']{background-color: green;}
■ html파일 내의 body 태그
<!-- div[name=name-$]{div$}*4 -->
<div name="name-1">div1</div>
<div name="name-1">div2</div>
<div name="name-2">div3</div>
<div name="name-2">div4</div>
<p name="name-1">p1</p>
<p name="name-1">p2</p>
<p name="name-2">p3</p>
<p name="name-2">p4</p>
=> p 태그의 name-2 속성인 것도 모두 background-color가 적용됨.
=> p[name='name-1]{background-color: green;}
p태그의 name-1 속성만 적용된 것을 확인
2. 자식 선택자(>)
: 지정된 요소 바로 하위에 존재하는 요소를 선택하는 선택자
[작성법]
선택자1>선택자2{css코드}
- 선택지1: 부모요소 선택
- 선택지2: 자식요소 선택
※ 선택자에서는 띄어쓰기도 하나의 기능이 있음. (선택자1>선택자2) 그래서 띄어쓰기는 되도록 하지않는 것이 관례이다.
■ selctor2.css 파일
#parent-ul>li {background-color: orange;}
#parent-ul>li>span {background-color: red;}
=> parent-ul의 자식 중 li태그들만 배경색을 지정한다
=> parent-ul의 자식 중 li태그들 중에서 span 태그들만 배경색을 지정한다.
■ html파일 내의 body 태그
<ul id="parent-ul"> 부모
<li>자식1</li>
<li>
<span>자식2</span>
</li>
<li>자식3</li>
<li>
<span>자식4</span>
</li>
</ul>
3. 후손 선택자( ) // ( ) 공백
- 지정된 요소의 모든 하위에 존재하는 요소를 선택하는 선택자
- 자식 : 1단계 아래
후손 : n단계 아래 모두
[작성법]
선택자1 선택자2 {css코드}
선택자1 : 부모 요소 선택자
선택자2 : 후손 요소 선택자
■ selctor2.css 파일
#test-div{
border : 2px solid black;
}
/* test-div 아래에 있는 모든 p태그 */
#test-div p{
background-color: yellowgreen;
}
■ html파일 내의 body 태그
<div id="test-div">
<p>test-div의 자식 요소입니다</p>
<p>test-div의 자식 요소입니다</p>
<div>
<p>나는 누구?</p>
</div>
</div>
=> 모든 p태그에 background-color : yellowgreen이 설정된 것을 확인할 수 있음
4. 반응 선택자
- 사용자의 움직임에 반응하여 스타일이 달라지는 선택자(클릭 유지, 마우스 오버 등...)
- 요소를 클릭하는 경우(:active)
- 요소에 마우스가 올라가는 경우(:hover)
(hover란? 마우스를 올리고 내릴 때를 의미)
■ selctor2.css 파일( 클릭하고 있을 때만 반응하는 :active)
#active-test:active{ /* #active-test : active (띄어쓰기 포함) => 작동 안됨 */
background-color: yellow;
}
■ selctor2.css 파일( 마우스를 올렸을 때 반응하는 :hover)
#hover-test:hover{
background-color: hotpink;
width : 230px;
height : 230px;
/* 스타일 변화 시간 지정 */
/* transition-duration: 0.5s; 마우스를 갖다댔을때 천천히 크기가 증가함 */
}
=> 마우스를 갖다대면 천천히 크기가 증가하는 것을 볼수 있지만,
=> 하지만... 마우스를 떼면 다시 빠르게 크기가 감소함
=> 모든 요소의 변화를 천천히 하려면...?
=> 아래와 같이 #hover-test를 따로 만들어 이와 같이 지정해주어야 함
■ selctor2.css 파일( 마우스를 올렸을 때 반응하는 :hover) => 모든 요소의 변화를 천천히 하는 코드
#hover-test{
transition-duration: 0.5s;
}
☞ 요소가 변화를 일으키면 0.5초간 천천히 변해라
☞ 마우스를 올라갔다 내려갔을 때 천천히 변하는 것을 볼 수 있음
■ html파일 내의 body 태그
<div class="div-cls" id="active-test">:active 테스트</div>
<div class="div-cls" id="hover-test">:hover 테스트</div>
5. 상태 선택자
- 입력 양식(input, textarea 등)의 상태에 따라 선택되는 선택자
:focus → 요소에 초첨이 맞춰져있을 때
:checked → 체크된 요소를 선택할 때 사용
:enabled / :disabled → 요소가 사용가능한/사용불가능한 상태일 때
1) :focus
■ selctor2.css 파일
#focus-test:focus{
background-color: springgreen;
}
■ html파일 내의 body 태그
<input type="text" id="focus-test">
2) :checked
■ selctor2.css 파일
input/*[type=checkbox]*/[name=fruits]:checked{
width: 30px;
height: 30px;
}
=> radio나 checkbox는 크기를 제외한 스타일이 적용되지 않는다!
■ html파일 내의 body 태그
<label for="apple"></label>사과<input type="checkbox" name="fruits" id=""><br>
<label for="daechu"></label>대추<input type="checkbox" name="fruits" id=""><br>
<label for="grape"></label>포도<input type="checkbox" name="fruits" id=""><br>
=> name 속성이 fruits 인 것은 check를 할때 크기가 커지도록 설정하였음
3) :enabled / :disabled
: input은 enabled가 기본값으로 들어가기 때문에 보통 모두 enabled 값이 들어간다. 하지만, disabled 값을 주게 되면 변경하지 못하게 된다.
■ selctor2.css 파일
#test-div2>input:enabled{
background-color: lightgreen;
}
#test-div2>input:disabled{
background-color: lightcoral;
}
☞ test-div2에서 input 태그들 중에서 enabled들은 lightgreen으로, disabled들은 lightcoral로 변경
■ html파일 내의 body 태그
<div id="test-div2">
사용 가능 : <input type="text" enabled> <br> <!-- enabled가 기본값임 -->
사용 불가능 : <input type="text" value="변경하면 안되는 값" disabled>
</div>
☞ 사용가능은 값을 입력할 수 있도록 되어있지만, 값을 넣지 못하도록 막혀있다.
6. 동위 선택자
: 동위 관계(동등한 위치 == 형제 관계)에서 뒤(다음)에 위치한 요소를 선택하는 선택자
ex)
P
H1
H1
① P 바로 뒤(다음)에 있는 H1 요소를 하나를 선택(+)
P선택자+H1선택자
② P 뒤에 있는 모든 H1 요소를 선택시 ( ~ 틸드(Tilde))
P 선택자~H1선택자{css코드}
■ selctor2.css 파일(A 바로 뒤에 있는 B 요소 선택(+)
#div1+div{background-color: olive;} /* 2번 div요소가 바뀜 */
■ selctor2.css 파일(A 바로 뒤에 있는 모든 B요소 선택(~)
#div3~div{background-color: chocolate;}
■ html파일 내의 body 태그
<div id="div1">1번 입니다</div>
<div>2번 입니다</div>
<div id="div3">3번 입니다</div>
<div id="div4">4번 입니다</div>
<p>관련 없는 태그입니다.</p>
<div id="div5">5번 입니다</div>
☞ p태그는 관련 없는 태그이므로 아무런 효과가 없는 것을 확인할 수 있음.
☞ div1번 태그 바로 뒤인 2번 태그가 배경색이 olive로 바뀌었음
☞ div3번 태그 뒤 모든 태그가(p태그 제외) 배겨색이 chocolate로 바뀌었음
7. checkbox모양 바꾸기(실습 문제)
[준비물] - 동위 선택자(+) - 상태 선택자(:checked) - input type="checkbox" - lable 태그(for 속성) - 체크박스 이미지 |
■ selctor2.css 파일
#check1+label{
width: 30px;
height: 30px;
display: inline-block;
cursor: pointer;
border: 1px soild black;
}
#check1:checked+label{
background-image: url(../image/iconsample.png);
background-repeat: no-repeat; /* 배경이미지 반복하지 않는다*/
background-size: cover; /* 배경이미지 지정한 요소를 다 덮도록 배경이미지를 확대/축소 */
}
#check1{
/* checkbox를 안보이게 함 */
display: none;
}
☞ #check1+label{}
label의 for속성은 " 라벨과 결합될 요소의 id 속성값"이다.
id가 check1 바로 뒤 요소인 label에 크기증가(width: 30px, height: 30px...)와 cursor 속성(해당 태그 위에 위치하는 마우스 커서의 모양을 손가락모양으로 변경), 검은색 테두리로 변경하라.
☞ #check1:checked+label{}
id가 check1인것을 check를 하게되면 다음 요소인 label에는 배경이미지(url(../image/...))를 표시한다.
☞ #check1{}
checkbox를 안보이게한다.
■ html파일 내의 body 태그
<input type="checkbox" id="check1">
<label for="check1"></label>
=> 처음에는 빈화면이지만 클릭하게되면 이와 같은 이미지가 출력됨.
=> 다시 한번 클릭하게 되면 다시 이미지가 사라지고 빈화면이 출력됨
'Front-End > CSS' 카테고리의 다른 글
[CSS] 2. CSS 선택자 우선순위 (0) | 2023.11.02 |
---|---|
[CSS] 1-5. CSS 선택자 ⑤ (기타 선택자) (0) | 2023.11.02 |
[CSS] 1-4. CSS 선택자 ④ (일반 구조 선택자, 형태구조 선택자, 부정선택자 (2) | 2023.11.02 |
[CSS] 1-3. CSS 선택자 ③ (문자열 속성 선택자) (0) | 2023.11.02 |
[CSS] 1-1. CSS개요, 선택자 ① (inline-style 태그, 태그 선택자, id 선택자, class 선택자) (0) | 2023.11.01 |