사용자가 웹 요소를 클릭하거나 마우스 커서를 올려놓는 등 특정 동작을 할 때 스타일을 바뀌도록 만들고 싶다면 가상 클래스 선택자를 사용합니다.
tab
키를 눌러 초점을 이동했을 때의 스타일을 지정합니다.가상 선택자를 링크와 관련해 사용할 때는 선택자 순서에 주의해야 합니다.
링크에서 가상 선택자 사용하기
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>link 스타일</title>
<style>
.container {
width: 960px;
margin : 0 auto;
}
.navi{
width:960px;
height:60px;
padding-bottom:10px;
border-bottom:2px solid #ccc;
}
.navi ul{
list-style: none;
padding-top:10px;
padding-bottom:5px;
}
.navi ul li {
display:inline-block;
width:150px;
padding:10px;
}
.navi a:link, .navi a:visited {
font-size:14px;
padding: 10px;
text-decoration: none; /* 밑줄 없음 */
}
.navi a:hover, .navi a:focus {
background-color:#222; /* 배경 색 */
color:#fff; /* 글자 색 */
}
.navi a:active {
background-color:#f00; /* 배경 색 */
}
</style>
<!--[if lt IE 9]>
<script src="html5shiv.js"></scirpt>
<![endif]-->
</head>
<body>
<div class="container">
<nav class="navi">
<ul>
<li><a href="https://velog.io/@jyyoun1022" target="_blank">나의 벨로그</a></li>
<li><a href="https://github.com/jyyoun1022" target="_blank" >나의 깃허브</a></li>
<li><a href="https://www.youtube.com/" target="_blank" >유튜브</a></li>
<li><a href="https://www.netflix.com/browse" target="_blank" >넷플릭스</a></li>
</ul>
</nav>
</div>
</body>
</html>
사용자의 동작뿐만 아니라 웹 요소의 상태에 따라 스타일 지정할 때도 가상 클래스 선택자를 사용합니다.
그 중에서도 UI 요소의 상태에 따른 가상 클래스는 웹 사이트나 앱 화면을 디자인할 떄 웹 요소의 상태에 따라 스타일을 지정하기 위해 사용합니다.
해당 요소가 사용 가능한 상태일 때의 스타일을 지정하려면 :enabled 클래스를 사용하고 해당요소가 사용 불가능한 상태일 떄의 스타일을 지정하려면 :disabled 클래스를 사용합니다.
예를 들어 여러 줄의 텍스트를 입력할 수 있는 텍스트 영역 필드(text area)를 게시판 입력화면으로 사용할 때는 enalbed 상태지만 회원 약관 등을 보여 줄 때는 사용자가 내용을 보기만 해야 하므로 disabled상태로 만들어야 합니다.
라디오 버튼을 클릭했을 떄 스타일 적용하기
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title> 가상 클래스 </title>
<style>
body {
background-color:#fff;
}
form fieldset{
margin-bottom:25px;
}
form legend{
font-size:15px;
font-weight:600;
}
input:disabled {
background:#ddd;
border:1px #ccc solid;
}
input:checked + span {
color:blue;
}
</style>
</head>
<body>
<form>
<fieldset>
<legend>사용자 정보</legend>
<label>이름 <input type="text" disabled></label>
</fieldset>
<fieldset>
<legend>신청 과목</legend>
<p>이 달에 신청할 과목을 선택하세요</p>
<label><input type="radio" name="subject" value="speaking" checked><span>회화</span></label>
<label><input type="radio" name="subject" value="grammar"><span>문법</span></label>
<label><input type="radio" name="subject" value="writing"><span>작문</span></label>
</fieldset>
</form>
</body>
</html>
말 그대로 웹 문서 구조를 기준으로 특정 위치에 있는 요소를 찾아 스타일을 지정할 때 사용하는 가상 클래스 선택자 입니다.
<root>
태그입니다.👉//div요소 안에서 세번째 자식 요소인 p요소에 스타일 적용
div p:nth-child(3)
👉//div요소 안에서 홀수 번째로 나타나는 자식 요소인 p요소에 스타일 적용
div p:nth-child(odd), div p:nth-child(2n+1)
👉//div요소 안에서 짝수 번째로 나타나느 자식 요소인 p요소에 스타일 적용
div p:nth-child(even), div p:nth-child(2n+0), div p:nth-child(2n)
표의 홀수 번쨰 열에만 배경 색 넣기
(table tr:ntl-child(odd))
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>가상 클래스</title>
<style>
#container {
text-align:center;
color:#2b2b2b;
}
table, tb, th {
border:1px solid #ccc;
}
table {
width:200px;
margin:0 auto;
border-collapse:collapse;
}
td {
text-align:left;
padding:10px;
padding-left:20px;
}
table tr:nth-child(2n+1) {
background:lightgray;
color:black;
}
</style>
</head>
<body>
<div id="container">
<h1>건강에 좋은 건강 식품</h1>
<table>
<tr>
<td>블루베리</td>
</tr>
<tr>
<td>귀리</td>
</tr>
<tr>
<td>토마토</td>
</tr>
<tr>
<td>시금치</td>
</tr>
<tr>
<td>적포도주</td>
</tr>
<tr>
<td>견과류</td>
</tr>
<tr>
<td>브로콜리</td>
</tr>
<tr>
<td>연어</td>
</tr>
<tr>
<td>마늘</td>
</tr>
<tr>
<td>녹차</td>
</tr>
</table>
</div>
</body>
</html>
<p>
태그나 <li>
태그가 여러개 나열되어 있고 각 태그나 id나 class를 사용하지 않은 상태에서 몇 번째에 있는 <p>
태그 또는 몇 번쨰에 있는 <li>
태그처럼 태그에 따라 몇 번쨰에 있는 항목인지를 지정해 스타일을 적용할 떄 이 가상 클래스 선택자를 사용합니다. :nth-of-type(n)은 앞에서 부터 세어 n번째 요소이고 :nth-last-of-type(n)은 끝에서부터 세어 n번째 요소에 스타일을 적용합니다.<!DOCTYPE HTML>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Gradient Menu</title>
<style>
ul.navi li {
list-style-type: none; /* 불릿 없앰 */
display: block; /* 영역 만듦 */
width: 8em; /* 너비 */
height: 3em; /* 높이 */
float: left; /* 왼쪽으로 플로팅 */
text-align: center; /* 가운데 정렬 */
font-family: "Lucida Grande", sans-serif; /* 글꼴 */
border: 1px #818181 solid; /* 테두리 */
box-shadow: 1px 1px 1px #bbb; /* 박스 그림자 */
}
/* 메뉴 링크 스타일 */
ul.navi li a {
display: block; /* 영역 만듦 */
padding: .8em .5em .5em .5em; /* 안여백 */
text-decoration: none; /* 밑줄 없앰 */
color: #292929; /* 글자색 */
text-shadow: 1px 1px 0px #cccccc; /* 텍스트 그림자 */
}
/* 메뉴 링크 위로 마우스 오버했을 때의 스타일 */
ul.navi li:hover{
background-color: #333333; /* 배경색 */
}
/* 메뉴 링크 위로 마우스 오버한 후 링크 스타일 */
ul.navi li:hover > a{
color:#FFF; /* 글자색 */
text-shadow:0px 1px 0px #fff; /* 텍스트 그림자 */
}
/* 첫번째 항목의 스타일 */
ul.navi li:first-child {
border-top-left-radius: 1em;/* 왼쪽 상단 코너를 부드럽게 */
border-bottom-left-radius: 1em;/* 왼쪽 하단 코너를 부드럽게 */
}
/* 마지막 항목의 스타일 */
ul.navi li:last-child {
border-top-right-radius: 1em; /*오른쪽 상단 코너를 부드럽게 */
border-bottom-right-radius: 1em;/* 오른쪽 하단 코너를 부드럽게 */
}
</style>
</head>
<body>
<div>
<ul class="navi">
<li id="home"><a href="#">Home</a></li>
<li id="html"><a href="#">HTML5</a></li>
<li id="css"><a href="#">CSS3</a></li>
<li id="jquery"><a href="#">JQuery</a></li>
</ul>
</div>
</body>
</html>
ul의 li자식 요소 중 첫번째 li요소와 마지막 li요소의 왼쪽과 오른쪽 모소리를 둥글게 처리하도록 스타일을 지정
가상 클래스 선택자가 여러 태그 중에서 원하는 태그를 선택하기 위해 사용하는 선택자라면 가상 요소는 내용의 일부만 선택해 스타일을 적용할때 사용합니다.
<p>
태그 안에 <br>
태그가 있어 첫 번째 글자가 첫 번째 줄에 없을 경우 적용할 수 없습니다.<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>link 스타일</title>
<style>
.container {
width: 960px;
margin : 0 auto;
}
ul li {
margin:15px;
}
li.hot::after {
content:"NEW!!";
font-size:x-small;
padding:2px 4px;
margin: 0 10px;
border-radius:2px;
background:#f00;
color:#fff;
}
</style>
<!--[if lt IE 9]>
<script src="html5shiv.js"></scirpt>
<![endif]-->
</head>
<body>
<div class="container">
<h1>제품 목록</h1>
<ul>
<li class="hot">제품 A</li>
<li>제품 B</li>
<li>제품 C</li>
<li class="hot">제품 D</li>
</ul>
</div>
</body>
</html>