HTML5/CSS3/5. CSS3 고급 활용

Day 44 : CSS3 스타일로 태그에 동적 변화 만들기

pancakemaker 2021. 12. 17. 12:18

1. 애니메이션

① 시간별 애니메이션 장면 작성 : @keyframes

@keyframes name {
	시간비율 { 스타일; 스타일; } /* 시간비율 시점까지 적용할 스타일 시트 작성 */
    	...
    	시간비율 { 스타일; 스타일; } /* 이전 시점에서 시간비율 시점까지 적용할 스타일 시트 작성 */
}
@keyframes textColorAnimation {
	0% { color : blue; } /* 시작 시. 0% 대신 from 사용 가능 */
   	30% { color : green; } /* 30% 경과시 까지 */
	100% { color : red; } /* 끝까지. 100% 대신 to 사용 가능 */
}

 

② 애니메이션 스타일 시트 작성

span {
	animation-name : 애니메이션 이름; /* @keyframes의 name */
	animation-duration : 시간; /* 1회 애니메이션 시간 */
	animation-iteration-count : 애니메이션 반복 횟수; /* 숫자로 지정 가능. infinite:무한반복 */
}

 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>애니메이션</title>
	<style>
		@keyframes bomb {
			from { /* 0% 로 수정 가능 */
				font-size: 500%;
			}
			to { /* 100% 로 수정 가능 */
				font-size: 100%;
			}
		}
		h3 {
			animation-name: bomb;
			animation-duration: 3s;
			animation-iteration-count: infinite;
		}
	</style>
</head>
<body>
	<h3>꽝!</h3>
	<hr>
	<p>꽝! 글자가 3초동안 500%에서 시작하여 100%로 바뀌는 애니메이션입니다.
		무한 반복합니다.</p>
</body>
</html>


2. 전환

: HTML 태그에 적용된 CSS3 프로퍼티 값이 변할 때, 값의 변화를 서서히 진행시켜 애니메이션 효과를 냄

: 1회만 적용

 

① 전환 프로퍼티와 전환 시간 지정 : transition

transition : 전환프로퍼티 전환시간

- 전환프로퍼티 : 이 프로퍼티의 값이 변경되면 현재 값에서 새 값으로 전환효과 시작
- 전환시간 : 현재 값에서 새 값으로 전환하는데 걸리는 시간
span {
	transition : font-size 5s;
}

 

② 전환 효과 시작

span:hover {
	font-size: 500%;
}

 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>전환</title>
	<style type="text/css">
		span { 
			transition: font-size 5s;
		}
		span:hover {
			font-size: 500%;
		}
	</style>
</head>
<body>
	<h3>font-size에 대한 전환</h3>
	<hr>
	<p><span>꽝!</span> 글자에 마우스를 올려보세요.</p>
</body>
</html>


3. 변환

: 회전, 확대 등 다양한 기하학적 모양으로 출력

① 변환 프로퍼티 : transform

div {
	transform : rotate(20deg); /* <div> 태그를 시계 방향으로 20도 회전시킨 모양으로 변환 */
}

 

② 다중 변환

div {
	transform : rotate(20deg) scale(3,1);
}

 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>다양한 변환 사례</title>
	<style>
		div {
			display: inline-block;
			padding: 5px;
			color: white;
			background: olivedrab;
		}
		/* 변환 */
		div#rotate { transform: rotate(20deg); }
		div#skew { transform: skew(0deg, -20deg); }
		div#translate { transform: translateY(100px); }
		div#scale { transform: scale(3,1); }

		/* 마우스를 올릴 때 추가 변환 */
		div#rotate:hover { transform: rotate(80deg); }
		div#skew:hover { transform: skew(0deg, -60deg); }
		div#translate:hover { transform: translate(50px, 100px); }
		div#scale:hover { transform: scale(4,2); }

		/* 마우스 누를 때 추가 변환 */
		div#scale:active { transform: scale(1,5); }
	</style>
</head>
<body>
	<h3>다양한 Transform</h3>
	아래는 회전(rotate), 기울임(skew), 이동(translate), 확대/축소(scale)가 적용된 사례이다.
	또한 마우스를 올리면 추가적 변환이 일어난다.
	<hr>
	<div id="rotate">rotate 20 deg</div>
	<div id="skew">skew(0,-20deg)</div>
	<div id="translate">translateY(100px)</div>
	<div id="scale">scale(3,1)</div>
</body>
</html>