트랜지션(transition)이란 웹 요소의 배경 색이 바뀌거나 도형의 테두리가 원형으로 바뀌는 것 처럼 스타일 속성이 바뀌는 것을 말합니다.
속성 | 설명 |
---|---|
transition-property | 트랜지션 대상을 설정합니다. |
transition-duration | 트랜지션 진행시간을 설정합니다. |
transition-timing-fuction | 트랜지션 속도 곡선을 설정합니다. |
transition-delay | 트랜지션 지연 시간을 설정합니다. |
transition | 4개 속성을 한꺼번에 설정합니다. |
트랜지션을 만드는 첫 번째 단계는 트랜지션을 어느 속성에 적용할 것인지 선택하는 것입니다.
속성 값 | 설명 |
---|---|
all | all값을 사용하거나 transition-property를 생략할 경우, 요소의 모든 속성이 트랜지션의 대상이 됩니다.(기본값) |
none | 트랜지션 동안 아무 속성도 바뀌지 않습니다. |
<속성이름> | 트랜지션 효과를 적용할 속성 이름을 지정합니다. 예를들어 배경 색만 바꿀것인지,width값을 바꿀 것인지 원하는 대상만 골라서 지정할 수 있습니다. 속성이 여러개일 경우 쉼표(,)로 구분해 나열합니다. |
트랜지션 대상을 지정했었다면 진행 시간을 지정해야 그 시간 동안 속성이 자연스럽게 바뀌는 애니메이션 효과를 만들 수 있습니다.
정해진 시간 동안 높이와 너비 바꾸기
다음과 같이 요소의 너비와 높이에 트랜지션 시간을 다르게 지정해 높이 값은 1초안에 바뀌게 하고 너비 값은 2초동안 바뀌도록 할 수 있습니다.
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Transform</title>
<style>
.tr1 {
width: 100px;
height: 100px;
background-color: blue;
border: 4px solid black;
transition-property: width, height;
transition-duration: 100s, 100s;
}
.tr1:hover {
width:800px;
height:120px;
}
</style>
</head>
<body>
<div class="tr1"></div>
</body>
</html>
정해진 시간 동안 배경 색과 회전,높이,너비 바꾸기
빨간색 작은 사각형 위로 마우스 포인터를 올려놓으면 배경 색의 회전,크기 변경까지 4가지 속성이 모두 바뀌는 트랜지션이 실행되는 예제입니다.
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Transform</title>
<style>
h1 {
text-align:center;
font-size:52px;
}
.tr1 {
width: 100px;
height: 100px;
background-color: red;
border: 1px solid black;
transition-property: background-color, transform, width, height;
transition-duration: 2s, 3s;
}
.tr1:hover {
width: 200px;
height: 200px;
background-color: #ff6e5f;
transform: rotate(180deg);
}
</style>
</head>
<body>
<div class="tr1"><h1>!</h1> </div>
</body>
</html>
지금까지 배운 속성으로 트랜지션을 실행할 때 속도 변화를 지정하지 않았는데 처음에는 천천히 시작해 점점 빨라지더가 마지막에는 다시 느려진 것을 볼수 있었습니다.
속성 값 | 설명 |
---|---|
linear | 시작부터 끝까지 똑같은 속도로 트랜지션을 진행합니다. |
ease | 처음에는 천천히 시작하고 점점 빨라지다가 마지막에는 천천히 끝냅니다.(기본값) |
ease-in | 시작을 느리게 합니다. |
ease-out | 느리게 끝냅니다. |
ease-in-out | 느리게 시작하고 느리게 끝냅니다. |
cubic-bezier(n,n,n,n) | 배지에 함수를 직접 정의해 사용합니다.n에서 사용할 수 있는 값은 0~1입니다. |
transition-delay속성은 트랜지션이 언제부터 시작할 것인지를 설정합니다.
특정 시간 후에 트랜지션 실행하기
첫번째 상자는 지연 시간 없이 트랜지션을 실행하고 두번쨰 상자에는 1초 동안 지연 시간을 두고 트랜지션을 실행해 비교한 것입니다.
화면의 사각 영역 위로 마우스 포인터를 올려놓으면 첫 번쨰 사각형이 회전을 시작하고 1초후 두번쨰 사각형이 회전합니다.
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Transition timing function</title>
<!--[if lt IE 9]>
<script src="html5shiv.js"></scirpt>
<![endif]-->
<style>
#ex {
position: relative;
width: 700px;
height: 150px;
margin: 0 auto;
border: 1px solid #aaa;
border-radius: 50px;
padding: 30px;
}
#ex:hover .box{
transform:rotate(720deg);
margin-left:700px;
}
.box {
font-size:15px;
position:relative;
width:60px;
height:60px;
margin-bottom:15px;
background-color:#eee;
}
.box p {
text-align: center;
padding-top: 6px;
}
#no-delay {
transition-duration: 3s;
border: 1px solid #ff6a00;
}
#delay {
transition-duration: 3s;
transition-delay: 1s;
border: 1px solid #006aff;
}
</style>
</head>
<body>
<div id="ex">
<div id="no-delay" class="box"> <p>no-delay</p> </div>
<div id="delay" class="box"> <p>delay</p> </div>
</div>
</body>
</html>
<style>
transition: <transition-property 값> | <transition-duration> | <transition-timing-function> | <transition-delay>
</style>
transition속성 한꺼번에 표기하기
다음 소스는 2초 동안 ease-in트랜지션을 실행한 것이빈다.트랜지션 대상을 지정하지 않았으므로 기본값인 all이 적용되어 CSS에서 지정한 모든 속성,즉 여기서는 width와 height,background-color,transform이 트랜지션의 대상이 됩니다.
(사각형 위로 마우스 포인터를 올려 놓으면 270도 회전하면서 너비와 높이 값이 줄어들고 배경 색도 바뀝니다.
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>Transform</title>
<style>
.tr1 {
width: 200px;
height: 200px;
background-color: red;
border: 1px solid black;
transition: 2s ease-in;
}
.tr1:hover {
width: 100px;
height: 100px;
background-color: #ff6e5f;
transform: rotate(270deg);
}
</style>
</head>
<body>
<div class="tr1"></div>
</body>
</html>