3. 구조 가상 선택자
HTML 요소의 계층 구조를 기반으로 선택
1) :nth-child(n) - 테이블에서 많이 사용된다.
- border의 색은 아무것도 지정하지 않으면 검정색이지만 글자색에 따라서 표현된다.
- n, odd, even 반복활용 가능, 수치를 정해주면 그 수치에 지정된 것만 활용할 수 있다.
- n 수식이나 특정한 키워드를 사용
- even(짝수), odd(홀수), 2n, 3n 등
2) :first-child - 동일 계층의 첫 번째 요소 선택
3) :last-child - 동일 계층의 마지막 요소 선택
<!DOCTYPE html>
<html lang="ko">
<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>
<style>
h3:first-child {
color: khaki;
}
h3:nth-child(even) {
color: red;
}
h3:last-child {
color: blue;
}
h3:nth-child(odd) {
background-color: rgb(250, 128, 114);
}
h3:nth-child(8) {
border: 1px dotted;
}
</style>
</head>
<body>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
<h3>프론트엔드 프로그래밍</h3>
</body>
</html>
4. 구조적 조합 선택자
계층화된 요소들 간의 부모, 자식 관계로 선택
1) ' ' 공백 : 후손 선택자
요소선택자 + ' ' + 후손 요소 선택자
예) div li
2) > : 자손(자식) 선택자, 바로 직계하위만 가능하다.
요소선택자 + > + 자손 요소 선택자
예) div>h2
3) + : 인접 형제 선택자, 인접 형제 태그 하나만 선택한다.(밑, 뒤로만 적용된다.)
요소선택자 + '+' + 형제 요소 선택자
예) h1+h2
4) ~ : 모든 형제 선택자
요소선택자 + ~ + 형제 요소 선택자
5) , : 그룹 선택자
요소선택자, 요소선택자
예) tabel, th, td
<!DOCTYPE html>
<html lang="ko">
<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>
<style>
div>strong {
color: rgb(233, 90, 24);
}
div strong {
background-color: aquamarine;
}
li>strong {
border: 1px solid rgb(158, 35, 196);
}
ul strong {
border-bottom: 2px dashed lavender;
}
ul>li {
color: orangered;
}
h3+ul {
color: darkorchid;
}
h4+p {
background-color: aquamarine;
}
h4~p {
border: 2px dotted seagreen;
}
</style>
</head>
<body>
<hr>
<div>
<div>다음 <strong>학습 내용</strong></div>
<ul>
<li>HTML5</li>
<li><strong>CSS3</strong></li>
<li>Javascript</li>
</ul>
<div>그 다음은 JAVA</div>
</div>
<hr>
<h2>인접 형제 선택자</h2>
<div id="d1">
<h2>인접형제 제목1</h2>
<h3>인접형제 제목2</h3>
<ul>이글자는 무슨색
<li>주제1</li>
<li>주제2</li>
</ul>
<p>인접형제 선택자에 의한 스타일 적용</p>
<p>인접형제 선택자에 의한 스타일 적용</p>
<h4>인접형제 제목3</h4>
<p>인접형제 선택자에 의한 스타일 적용</p>
<p>인접형제 선택자에 의한 스타일 적용</p>
<h4>인접형제 제목4</h4>
<p>인접형제 선택자에 의한 스타일 적용</p>
</div>
</body>
</html>
5. 속성 선택자 : 요소의 속성명, 속성값으로 선택 단, class와 id는 제외
형식 [attr="value"]
<input type="text">, <a href="url">
<!DOCTYPE html>
<html lang="ko">
<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>
<style>
[text] {
background-color: goldenrod;
}
[text="red"] {
color: red;
}
/* input 태그 관련 스타일 */
[type="text"], [type="password"] {
background-color: gainsboro;
color: slateblue;
}
input::placeholder{
color: white;
}
/*link 관련 스타일*/
[href="http://naver.com"] {
border: 1px solid brown;
}
a {
text-decoration: none;
}
</style>
</head>
<body>
<form>
<fieldset>
<legend>회원 가입</legend>
<input type="text" name="id" placeholder="아이디를 입력하세요."><br>
<input type="password" name="pwd" placeholder="비밀번호를 입력하세요."><br>
<input type="text" name="name" placeholder="이름을 입력하세요."><br>
<input type="text" name="phone" placeholder="연락처를 입력하세요."><br><br>
<input type="submit" value="회원가입">
<input type="reset" value="취소">
</fieldset>
</form>
<hr>
<p text="hello">안녕하세요.</p><!--이건 없는 속성, 사용자 정의 속성-->
<p text="red">빨간색입니다.</p>
<p><a href="http://naver.com">네이버</a></p>
<p><a href="http://icia.co.kr">인천일보아카데미</a></p>
</body>
</html>
z-index :
중첩된 요소의 쌓이는 순서를 지정하는 속성, 작은 번호가 밑에, 큰 번호가 위에 위치
positon과 같이 사용, 의도된 중첩
<!DOCTYPE html>
<html lang="ko">
<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>z-index</title>
<style>
.box {
width: 100px;
height: 100px;
position: absolute;
}
.z1 {
top:0;
left:0;
background-color: red;
z-index: 3;
}
.z2 {
top: 30px;
left: 30px;
background-color: green;
z-index: 2;
}
.z3 {
top: 60px;
left: 60px;
background-color: blue;
z-index: 1;
}
</style>
</head>
<body>
<div class="z1 box">box1</div>
<div class="z2 box">box2</div>
<div class="z3 box">box3</div>
</body>
</html>
display : 변형시킴
요소의 표시 여부와 방법을 지정하는 속성
화면상에서 요소를 숨기거나 보이게 또는 인라인 요소를 블록요소(그 반대로도) 표현하게 함
html이 원래 제공하던 양식을 파괴시킨다.
속성값
1) none : 화면상에서 요소를 제거 (자리까지)
2) block : 요소를 블록형식으로 표시
3) inline : 요소를 인라인 형식으로 표시
4) inline-block : 요소가 인라인과 블록 형식의 두 성격을 갖도록 지정
span에 크기를 지정하기 어렵다.
<!DOCTYPE html>
<html lang="ko">
<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>화면표시(display)</title>
<style>
.a1 {
display: block;
}
li {
display: inline;
}
span {
width: 100px;
height: 100px;
padding: 5px;
border: 1px solid darkcyan;
background-color: skyblue;
}
.a {
display: inline;
}
.b {
display: inline-block;
}
.c {
display: block;
}
</style>
</head>
<body>
<h3>블록 형식으로 보이게 하기</h3>
<a class="a1" href="#">링크1</a>
<a class="a1" href="#">링크1</a>
<a class="a1" href="#">링크1</a>
<h3>인라인 형식으로 보이게 하기</h3>
<ul>
<li><a href="#">메뉴1</a></li>
<li><a href="#">메뉴2</a></li>
<li><a href="#">메뉴3</a></li>
</ul>
<hr>
<h3>inline vs inline-block vs block</h3>
<h4>inline</h4>
<div>
Lorem
<span class="a">ipsum</span>
<span class="a">dolor</span>
sit amet,
consectetur adipiscing elit.
</div>
<h4>inline-block</h4>
<div>
Lorem
<span class="b">ipsum</span>
<span class="b">dolor</span>
sit amet,
consectetur adipiscing elit.
</div>
<h4>block</h4>
<div>
Lorem
<span class="c">ipsum</span>
<span class="c">dolor</span>
sit amet,
consectetur adipiscing elit.
</div>
</body>
</html>
5) table : 요소를 테이블형식으로 표시(clear-fix에서 사용)[after나 before 가상으로 만들 때 사용]
6) flex : 컨테이너 요소에 설정하여 내부 요소를 flexbox 형식으로 표현
visibility : 요소를 보이게 한다.(기본값)
hidden : 요소를 숨김
요소제거 요소 숨김
display: none; vs visibility: hidden;
제거 - 요소를 차지하는 공간까지 없애는 것
숨김 - 요소가 차지할 공간은 유지되고, 보이지만 않게 하는 것
<!DOCTYPE html>
<html lang="ko">
<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>화면표시(display)</title>
<style>
#container div {
background-color: wheat;
width: 200px;
height: 100px;
border: 1px dashed;
}
.b1 {
display: none;
}
.b2 {
visibility: hidden;
}
</style>
</head>
<body>
<div id="container">
<h3>display:none</h3>
<div class="b1">보이나요?</div>
<div id="d1">이건 더미..</div>
<h2>visiblity:hidden</h2>
<div class="b2">보이나요?</div>
<div id="d2">이건 더미..</div>
</div>
</body>
</html>
p 412
display: flex; - Flexible Box, flexbox라고 함
컨테이너 요소 (부모요소)에 설정
1) flex-direction : 내부 요소의 배치 방향
row :왼쪽부터 가로로 배치(기본값)
컨테이너 요소 배치된 요소를 가로로 배치시킨다.
row-reverse : 오른쪽부터 가로로 배치
column : 위에서 아래로 세로로 배치
column-reverse : 아래에서 위로 배치
<!DOCTYPE html>
<html lang="ko">
<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>
<style>
.flexbox {
margin: 10px;
padding: 15px;
height: 400px;
border-radius: 5px;
background-color: peru;
display: flex;
flex-direction: column;
}
.item {
margin: 10px;
padding: 20px;
background-color: beige;
color: rgb(13, 80, 57);
border-radius: 5px;
}
</style>
</head>
<body>
<div class="flexbox">
<div class="item">item1</div>
<div class="item">item2</div>
<div class="item">item3</div>
<div class="item">item4</div>
</div>
</body>
</html>
2) flex-wrap : 내부 요소의 줄 바꿈 설정
nowrap : 줄 바꿈 없음 (overflow 발생)
wrap : 자동 줄바꿈 (overflow 시 밑으로)
wrap-reverse : 자동 줄바꿈 (overflow 시 위로)
flex item(내부 요소 속성)
1) flex-basis : 내부 요소의 기본 크기를 설정하는 속성
fiex-direction이 row 일 때는 너비 속성, column일 때는 높이 속성으로 사용
속성값
auto : 기본값 (자동설정)
수치 : px, % 등 실제 값을 넣는다.
내용에 따른다 : content
<!DOCTYPE html>
<html lang="ko">
<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>
<style>
.flexbox {
margin: 10px;
padding: 15px;
height: 400px;
border-radius: 5px;
background-color: peru;
display: flex;
flex-direction: row;
flex-wrap: wrap-reverse;
}
.item {
margin: 10px;
padding: 20px;
background-color: beige;
color: rgb(13, 80, 57);
border-radius: 5px;
flex-basis: 150px;
flex-grow: 1;
}
</style>
</head>
<body>
<div class="flexbox">
<div class="item">item1</div>
<div class="item">item2</div>
<div class="item">item3</div>
<div class="item">item4</div>
</div>
</body>
</html>
:last-child 실습 때 왜 색이 안 나오는지 의문이었는데, 순서가 바뀌어서 색이 나오지 않는 것이었다.
순서에 따라서 보일 수도 있고 안 보일 수도 있기 때문에 순서를 어떻게 배치할지 항상 고려해야 할 것 같다.
'공부기록 > CSS' 카테고리의 다른 글
2월 27일 (1) CSS - transform, transition (0) | 2023.02.27 |
---|---|
2월 24일 CSS - flexbox (0) | 2023.02.24 |
2월 23일 (1) CSS clear, selector1 (0) | 2023.02.23 |
2월 22일 (2) CSS 공간 처리 (0) | 2023.02.22 |
2월 22일 (1) CSS font (0) | 2023.02.22 |