CONTENTS
Section7 CSS3 전환&변환
Section8 CSS 애니메이션
--------------------------------------------------------------------
Section7 CSS3 전환&변환
◎transform 변환 속성: origin
-효과가 적용되는 과정을 좀 더 부드럽게 보여주거나, 조정할 수 있도록 해주는 속성
속성값 |
의미 |
transform-origin |
요소 변환의 기준점을 설정 ex)top-left, center, right-bottom |
transform-style |
3D 변환 요소의 자식 요소도 3D 변환을 사용할지 설정 |
perspective |
하위 요소를 관찰하는 원근 거리를 설정 |
perspective-origin |
원근 거리의 기준점을 설정 |
backface-visibility |
3 변환으로 회전된 요소의 뒷면 숨김을 설정 ex)hidden |
◎transform 변환속성: perspective
-하위 요소를 관찰하는 원근 거리를 설정
-perspective 속성과 함수의 차이점
속성/함수 |
적용대상 |
기준점 설정 |
perspective |
관찰 대상의 부모 요소 |
perspective-origin |
transform: perspective |
관찰 대상 |
transform-origin |
*perspective 속성은 관찰 대상의 부모 요소에 적용하여 하위 요소들을 관찰하는 원근 거리를 설정하며, transform: perspective() 변환 함수는 관찰 대상에 직접 적용하여 그 대상을 관찰하는 원근 거리를 설정
◎transform 변환 속성: perspective-origin
-하위 요소를 관찰하는 원근 거리의 기준점을 설정
속성값 |
의미 |
기본값 |
X축 |
left, right, center, %, 단위 |
50% |
Y축 |
top, bottom, center, %, 단위 |
50% |
◎transform 변환 속성: backface-visibility
-3D변환으로 회전된 요소의 뒷면 숨김을 설정 visible/ hidden
◎transform 변환 속성: matrix(a,b,c,d,e,f)
-요소의 2차원 변환효과를 지정, scale(), skew(), translate(), rotate()를 지정
Section8 CSS 애니메이션
3차원 회전하기
<head>
<style>
div {
background-color: green;
height: 150px;
width: 150px;
}
.container {
background-color: white;
border: 1px solid black;
}
.transformed:hover {
backface-visibility: visible;
transform-origin: 50% 42%;
transform: perspective(500px) rotateY(50deg) rotateX(0deg);
}
.transformed2:hover {
backface-visibility: visible;
transform-origin: 50% 42%;
transform: perspective(500px) rotateY(0deg) rotateX(45deg);
}
</style>
</head>
<body>
<div class="container">
<div class="transformed">박스1</div>
</div>
<p></p>
<div class="container">
<div class="transformed2">박스2</div>
</div>
<body>
*origin: 변화하고자 할 때 기준점
◎변화 속성
-효과가 적용되는 과정을 좀 더 부드럽게 보여주거나, 그 과정을 시간적으로 조정할 수 있도록 해주는 속성
박스 가로 길이 늘리기
<head>
<style>
div{
width: 100px;
height: 100px;
background-color: yellow;
border: 1px solid red;
transition: width 2s;
}
div:hover{
width: 300px;
}
</style>
</head>
<body>
<div>마우스를 올리면 박스가 늘어납니다.</div>
</body>
박스를 회전시키면서 크기와 테두리 색상 변경하기
<head>
<style>
div{
margin: 50px;
width: 100px;
height: 100px;
background: yellow;
border: 1px solid red;
transition: width 3s, height 3s, border 3s, transform 3s;
}
div:hover{
width: 200px;
height: 200px;
border: 3px solid blue;
transform: rotate(360deg);
}
</style>
</head>
<body>
<div>마우스를 올리면 박스가 회전하면서 커집니다.</div>
</body>
◎변화 속성
-transition-property: 변환 효과를 적용할 속성들 나열
-transition-duration: 변화가 지속되는 시간 지정
-transition-timing-function: 변화의 시작과 끝 타이밍 지정
-transition-deley: 변화 효과가 지연되는 시간 지정
◎변화 속성 작성 방식
-단축형
div { transition: property duration timing-function delay; } |
div { tansition: background 2s ease 1s; padding 1s linear 2s; } |
-기본형
div { transition-property: width, color; tansition-duration: 1s; tansition-timing-fuction: ease; tansition-delay: 3s; } |
-확장 기본형
div { transition-property: width, height, border-width, color; tansition-duration: 1s, 2s, 1s, 3s; tansition-timing-fuction: ease, ease-in, ease-out, linear; tansition-delay: 3s, 1s, 1s, 2s; } |
변화 효과 대상 지정하기
<head>
<style>
div{
width: 100px;
height: 100px;
background: orange;
transition-property: width, background, color;
}
div:hover{
width: 400px;
background: blue;
color: white;
}
</style>
</head>
<body>
<div>마우스를 올리면 여러 속성이 변합니다.</div>
</body>
변화 효과의 지속 시간 설정하기
<head>
<style>
div{
width: 280px;
height: 100px;
background: orange;
transition: background;
transition-duration: 10s;
}
div:hover{
background: blue;
}
</style>
</head>
<body>
<div>색상이 10초 동안 서서히 변합니다.</div>
</body>
◎속성값
-linear: 처음부터 끝까지 같은 속도
-ease: 느리게 시작하여 점점 빨라졌다가 느리게 끝남
-ease-in: 느리게 시작하여 점점 빨라지다가 일정한 속도에 다다르면 같은 속도를 유지
-ease-out: 일정한 속도의 등속 변화로 시작해서 점점 느려지면서 끝남
-ease-in-out: 느리게 시작하여 느리게 끝남
-cubic-bezier(n, n, n, n): 처음과 끝의 속도를 설정
◎큐빅 베이지 타이밍 함수
-원하는 대로 타이밍을 조정할 때 사용
-기본값은 cubic-Bezier(0.25, 0.1, 0.25, 1.0)
속성값 이름 |
큐빅 베이지 타이밍 설정값 |
Ease |
cubic-bezier(0.25, 0.1, 0.25, 1) |
Linear |
cubic-bezier(0, 0, 1, 1) |
ease-in |
cubic-bezier(0.24, 0, 1, 1) |
ease-out |
cubic-bezier(0, 0, 0.58, 1) |
ease-in-out |
cubic-bezier(0.42, 0, 0.58, 1) |
변화 효과의 타이밍 설정하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
color: yellow;
border: 1px solid black;
transition: width 3s;
}
#div1{ transition-timing-function: linear;}
#div2{ transition-timing-function: ease;}
#div3{ transition-timing-function: ease-in;}
#div4{ transition-timing-function: ease-out;}
#div5{ transition-timing-function: ease-in-out;}
#div6{ transition-timing-function: cubic-bezier(0.1, 0.0, 0.1, 1.0);}
div:hover{ width: 400px;}
/* body:hover div{width: 400px;} 전체 볼 때 */
</style>
</head>
<body>
<div id="div1" style="top: 100px">linear</div>
<div id="div2" style="top: 150px">ease</div>
<div id="div3" style="top: 200px">ease-in</div>
<div id="div4" style="top: 250px">ease-out</div>
<div id="div5" style="top: 300px">ease-in-out</div>
<div id="div6" style="top: 350px">cubic-bezier</div>
</body>
변화 효과의 지연 시간 설정하기
<head>
<style>
div{
margin: 50px;
width: 200px;
height: 200px;
background: yellow;
border: 5px solid black;
transition-duration: 5s;
transition-delay: 3s;
}
div:hover{
transform: rotate(180deg);
}
</style>
</head>
<body>
<div>마우스를 올리고 3초 후에 박스가 180도 회전합니다.</div>
</body>
홈페이지 메뉴 만들기
<head>
<style>
a{
text-decoration: none;;
color: white;
}
div{
position: absolute;
left: 0px;
width: 80px;
height: 50px;
background: #ff8080;
border: 1px solid red;
transition-property: width background;
transition-duration: 2s 2s;
line-height: 50px;
/* 너비 width="50px", line-height="50px" 수치 같게하면 중앙정렬된 것처럼 보임, 없을 땐 위쪽으로 붙어 보임*/
}
div:hover{
width: 200px;
transition-timing-function: linear;
background: #ff0000;
color: white;
text-align: center;
font-size: 30px;
}
</style>
</head>
<body>
<div style="top:50px"><a href="#" target="new">HOME</a></div>
<div style="top:100px"><a href="#" target="new">ABOUT</a></div>
<div style="top:150px"><a href="#" target="new">NEWS</a></div>
<div style="top:200px"><a href="#" target="new">STUDY</a></div>
<div style="top:250px"><a href="#" target="new">CONTACT</a></div>
</body>
◎키프레임 정의
@keyframes animationname { keyframes-selector { css-styles; } } |
◎위에서 아래로 움직이는 키프레임 설정
@keyframes box_animation { from { top: 0px; } to {top: 200px; } } |
◎키프레임 안에 퍼센트 단위로 애니메이션 설정
@keyframes animationname { keyframes-selector { css@keyframes 애니메이션이름{ 0% { 시작값 } /* from */ 25% { 변경값 } 50% { 변경값 } 75% { 변경값 } 100% { 종료값 } /* to */ } |
◎애니메이션 속성의 종류
animation-name |
@keyframes 애니메이션의 이름 지정 |
animation-duration |
애니메이션의 지속 시간을 초 단위로 설정 |
animation-timing-function |
애니메이션의 시작과 끝 타이밍 지정 |
animation-delay |
애니메이션 시작을 지연시키는 시간을 초 단위로 설정 |
animation-iteration-count |
애니메이션이 반복 재생되는 횟수 설정 ex)infinite |
animation-direction |
애니메이션의 방향 설정 |
animation-full-mode |
애니메이션을 재생하고 있지 않을 때 속성값 설정 |
animation-play-state |
애니메이션 재생 상태 설정 |
무한 반복하며 좌우로 이동하는 박스 만들기
<head>
<style>
div{
width: 100px;
height: 100px;
background: red;
position: relative;
animation: boxmove 5s linear infinite alternate;
}
@keyframes boxmove {
from{ left: 0px; }
to{ left: 300px; }
}
</style>
</head>
<body>
<div>애니메이션 박스</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서는 지원하지 않습니다.</p>
</body>
웹 문서가 로드된 후 일정 시간 후에 애니메이션 시작하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
position: relative;
animation: boxmove 5s linear infinite alternate;
}
#box1{
animation-delay: 3s;
}
#box2{
animation-delay: 5s;
}
@keyframes boxmove {
from{ left: 0px; }
to{ left: 300px; }
}
</style>
</head>
<body>
<div id="box1">애니메이션 박스1</div>
<div id="box2">애니메이션 박스2</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서 지원하지 않습니다.</p>
</body>
<animation-direction 속성값의 종류>
속성값 |
설명 |
normal |
기본 설정값, 애니메이션이 순방향으로 재생 ex)from → to |
reverse |
애니메이션이 역방향으로 재생 ex)to → from |
alternate |
애니메이션이 양방향으로 재생 -홀수: 순방향으로 재생 -짝수: 역방향으로 재생 |
alternate-reverse |
애니메이션이 양방향으로 재생 -홀수: 역방향으로 재생 -짝수: 순방향으로 재생 |
애니메이션의 진행 방향 설정하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
position: relative;
animation: boxmove 5s linear infinite;
}
#box1{
animation-delay: 3s;
animation-direction: reverse;
}
#box2{
animation-delay: 5s;
animation-direction: alternate-reverse;
}
@keyframes boxmove {
from{ left: 0px; }
to{ left: 300px; }
}
</style>
</head>
<body>
<div id="box1">애니메이션 박스1</div>
<div id="box2">애니메이션 박스2</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서 지원하지 않습니다.</p>
</body>
애니메이션의 반복 횟수 설정하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
position: relative;
animation: boxmove 5s;
}
#box1{
animation-delay: 3s;
animation-direction: reverse;
animation-iteration-count: 2;
}
#box2{
animation-delay: 5s;
animation-direction: alternate-reverse;
animation-iteration-count: 5;
}
@keyframes boxmove {
from{ left: 0px; }
to{ left: 300px }
}
</style>
</head>
<body>
<div id="box1">애니메이션 박스1</div>
<div id="box2">애니메이션 박스2</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서 지원하지 않습니다.</p>
</body>
애니메이션의 타이밍 설정하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
position: relative;
animation: boxmove 5s alternate;
}
#box1{
animation-delay: 1s;
animation-iteration-count: 3;
animation-timing-function: ease;
}
#box2{
animation-delay: 2s;
animation-iteration-count: 3;
animation-timing-function: linear;
}
#box3{
animation-delay: 3s;
animation-iteration-count: 3;
animation-timing-function: ease-out;
}
@keyframes boxmove{
from{ left: 0px; }
to{ left: 300px; }
}
</style>
</head>
<body>
<div id="box1">애니메이션 박스1</div>
<div id="box2">애니메이션 박스2</div>
<div id="box3">애니메이션 박스3</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서 지원하지 않습니다.</p>
</body>
마우스를 올리면 멈추게 하기
<head>
<style>
div{
width: 100px;
height: 50px;
background: red;
position: relative;
animation: boxmove 5s infinite alternate;
}
#box1{
animation-delay: 1s;
animation-timing-function: ease;
}
#box2{
animation-delay: 2s;
animation-timing-function: linear;
}
#box3{
animation-delay: 3s;
animation-timing-function: ease-out;
}
@keyframes boxmove{
from{ left: 0px; }
to{ left: 300px; }
}
div:hover{
animation-play-state: paused;
}
</style>
</head>
<body>
<div id="box1">애니메이션 박스1</div>
<div id="box2">애니메이션 박스2</div>
<div id="box3">애니메이션 박스3</div>
<p><strong>참고: </strong>IE9 이하 혹은 낮은 버전에서 지원하지 않습니다.</p>
</body>
커튼을 치고 걷어내는 듯한 효과 만들기
<head>
<style>
div{
width: 100px;
height: 100px;
position: absolute;
animation-duration: 5s;
animation-timing-function: linear;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-play-state: running;
}
#div1{
background-color: blue;
animation-direction: normal;
animation-name: L-box;
}
#div2{
background-color: yellow;
animation-direction: reverse;
animation-name: R-box;
}
@keyframes L-box {
0%{ left: 0px; }
50%{ left: 200px; }
100%{ left: 0px; }
}
@keyframes R-box {
0%{ left: 400px; }
50%{ left: 200px; }
100%{ left: 400px; }
}
</style>
</head>
<body>
<div id="div1">왼쪽 박스</div>
<div id="div2">오른쪽 박스</div>
</body>
상하좌우로 움직이면서 색상 변경하기
<head>
<style>
div{
width: 100px;
height: 100px;
background: red;
position: relative;
animation: colorbox 5s infinite;
animation-direction: alternate;
}
@keyframes colorbox{
from{ background: red; left: 0px; top: 0px; }
25%{ background: orange; left: 300px; top: 0px; }
50%{ background: yellow; left: 300px; top: 300px; }
75%{ background: green; left: 0px; top: 300px; }
to{ background: red; left: 0px; top: 0px; }
}
</style>
</head>
<body>
<div></div>
</body>
점핑볼 만들기
<head>
<style>
@keyframes bounce {
from, to{
bottom: 0px;
animation-timing-function: ease-out;
}
50%{
bottom: 200px;
animation-timing-function: ease-in;
}
}
div{
position: absolute;
width: 20px;
height: 20px;
border-radius: 10px;
animation-name: bounce;
animation-iteration-count: infinite;
}
#b1{
left: 10px;
background: red;
animation-duration: 5s;
}
#b2{
left: 50px;
background: blue;
animation-duration: 10s;
}
#b3{
left: 90px;
background: green;
animation-duration: 3s;
}
#b4{
left: 130px;
background: silver;
animation-duration: 8s;
}
#b5{
left: 170px;
background: black;
animation-duration: 1s;
}
</style>
</head>
<body>
<div id="b1"></div>
<div id="b2"></div>
<div id="b3"></div>
<div id="b4"></div>
<div id="b5"></div>
</body>