[CSS] CSS 속성 - 전환, 변환


CSS 속성 - 전환, 변환

전환


Transitions

CSS 속성의 전환 효과를 지정

CSS 속성의 시작과 끝을 지정(전환 효과)하여 중간 값을 애니매이션, 단축 속성을 갖고 있음.

속성 값

의미기본값
transition-property전환 효과를 사용할 속성 이름all
transition-duration전환 효과의 지속시간 설정0s = 1000ms
transition-timing-fuction타이밍 함수 지정ease
transition-delay전환 효과의 대기시간 설정0s = 1000ms

예제

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 50px;
  transition: 
    width 1s, 
    background 1s;
/*   위 transition 이랑 같은 의미 */
/*   
  transition-property: width, background;
  transition-duration: 1s; 
  */
}
.box:hover {
  width: 300px;
  background: dodgerblue;
}




Transition 개별속성


transition-property

전환 효과를 사용할 속성 이름을 설정, 개별 속성을 가짐.

의미기본값
all모든 속성에 적용all
속성 이름전환 효과를 사용할 속성 이름 

예제

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 50px;
  transition: all 1s;
}
.box:hover {
  width: 300px;
  background: dodgerblue;
}

transition-duration

전환 효과의 지속시간을 설정, 개별 속성을 가짐.

의미기본값
시간전환 효과가 지속되는 시간0s = 1000ms

예제

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 50px;
  transition-duration: 0.4s;
}
.box:hover {
  width: 300px;
  background: dodgerblue;
}

transition-timing-function

타이밍 함수(애니메이션 전환 효과를 계산하는 방법) 지정, 개별 속성을 가짐.

의미기본값Cubic Bezier 값
ease빠르게 - 느리게easecubic-bezier(.25, .1, .25, 1)
linear일정하게 cubic-bezier(0, 0, 1, 1)
ease-in느리게 - 빠르게 cubic-bezier(.42, 0, 1, 1)
ease-out빠르게 - 느리게 cubic-bezier(0, 0, .58, 1)
ease-in-out느리게 - 빠르게 - 느리게 cubic-bezier(.42, 0, .58, 1)
cubic-bezier(n, n, n, n)자신만의 값을 정의(0 ~ 1)  
steps(n)``n` 번 분할된 애니메이션  

Easing Functions Cheat Sheet 참고

예제

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 50px;
  transition: 2s ease-out;
/*   transition-timing-function: linear; */
/*   transition: 2s steps(4); */
}
.box:hover {
  width: 300px;
  background: dodgerblue;
}

transition-delay

전환 효과가 몇 초 뒤에 시작할지 대기시간을 설정, 개별 속성을 가짐.

의미기본값
시간전환효과의 대기시간을 설정0s

예제

<div class="box"></div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 50px;
  transition: 2s 2s;
/*   앞에 있는게 duration 뒤에 있는게 delay */
}
.box:hover {
  width: 300px;
  background: dodgerblue;
}




변환

Transforms

요소의 변환 효과(변형)를 지정

사용법

transform: 변환함수1 변환함수2 변환함수3 ...;
transform: 원근법 이동 크기 회전 기울임;
.box {
  transform: rotate(20deg) translate(10px, 0);
 				  /* 20도 각도 회전,  X축:10px Y축:0 이동 */
}




Transform 2D 변환 함수

값(변환함수)의미단위
translate(x, y)이동(X축, Y축)단위
translateX(x)이동(X축)단위
translateY(y)이동(Y축)단위
scale(x, y)크기(X축, Y축)없음(배수)
scaleX(x)크기(X축)없음(배수)
scaleY(y)크기(Y축)없음(배수)
rotate(degree)회전(각도)deg
skew(x-deg, y-deg)기울임(X축, Y축)deg
skewX(x-deg)기울임(X축)deg
sekwY(y-deg)기울임(Y축)deg
matrix(n, n, n, n, n, n)2차원 변환 효과없음

예제

<div class="box">123</div>
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 30px;
  transform: {변환함수....}
}
.box {
  width: 100px;
  height: 100px;
  background: tomato;
  margin: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 30px;
  transition: 1s;
}
.box:hover {
  transform: translate(20px, 10px) skewX(20deg);
}




Transform 3D 변환 함수

값(변환함수)의미단위
translate3d(x, y, z)이동(X축, Y축, Z축)단위
translateZ(z)이동(Z축)단위
scale3ㅇ(x, y, z)크기(X축, Y축, Z축)없음(배수)
scaleZ(z)크기(Z축)없음(배수)
rotate3d(x, y, z, a)회전(X벡터, Y벡터, Z벡터, 각도)없음, deg
rotateX(x)회전(X축)deg
rotateY(y)회전(Y축)deg
rotateZ(z)회전(Z축)deg
perspective(n)원근법(거리)단위
matrix3d(n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n,)3차원 변환 효과없음

예제

<img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
img {
  width: 300px;
  border: 1px solid lightgray;
  transition: 1s;
  /* perspective 원근감 값은 transform에 가장 앞쪽에 배치해야 한다. */
/*   transform: perspective(500px) rotateX(45deg); */
  transform: perspective(500px) rotateY(45deg);
}




Transform 변환 속성

속성의미
transform-origin요소 변환의 기준점을 설정
transform-style3D 변환 요소의 자식 요소도 3D 변환을 사용할지 설정
perspective하위 요소를 관찰하는 원근 거리를 설정
perspective-origin원근 거리의 기준점을 설정
backface-visibility3D 변환으로 회전된 요소의 뒷면 숨김을 설정

transform-origin

요소 변환의 기준점을 설정(기본값 정중앙(X축: 50%, Y축: 50%))

속성 값

의미기본값
X축left, right, center, %, 단위50%
Y축top, bottom, center, %, 단위50%
Z축단위0

예제

<img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
img {
  width: 200px;
  border: 1px solid ligthgray;
  transition: 1s;
  transform: rotate(45deg);
  transform-origin: 50% 50%; /* 기본값 */
}

transform-style

3D 변환 요소의 자식 요소도 3D 변환을 사용할지 설정

속성 값

의미기본값
flat자식 요소의 3D 변환을 사용하지 않음flat
preserve-3d자식 요소의 3D 변환을 사용함 

예제

<div class="perspective">
  <div class="grand-parent">
    <div class="parent">
      <img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
    </div>
  </div>
</div>
.perspective {
  width: 200px;
  perspective: 500px;
  padding: 70px;
}
.grand-parent {
  width: 200px;
  border: 3px solid dodgerblue;
  transition: 1s;
  transform: rotateX(-45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
.parent {
  width: 200px;
  border: 3px solid tomato;
  transition: 1s;
  transform: rotateY(45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
img {
  width: 200px;
  border: 3px solid lightgray;
  transition: 1s;
  transform: rotateX(45deg);
}

perspective

하위 요소를 관찰하는 원근 거리를 설정

속성 값

의미기본값
단위px, em, cm 등 단위로 지정 

예제

<div class="perspective">
  <div class="grand-parent">
    <div class="parent">
      <img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
    </div>
  </div>
</div>
.perspective {
  width: 200px;
  perspective: 600px; /* 원근감 값을 잘 조절해서 해야 된다. */
  padding: 70px;
}
.grand-parent {
  width: 200px;
  border: 3px solid dodgerblue;
  transition: 1s;
  transform: rotateX(-45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
.parent {
  width: 200px;
  border: 3px solid tomato;
  transition: 1s;
  transform: rotateY(45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
img {
  width: 200px;
  border: 3px solid lightgray;
  transition: 1s;
  transform: rotateX(45deg);
}

perspective 속성과 함수의 차이점

속성/함수적용대상기준점 설정
perspective관찰 대상의 부모 요소perspective-origin
transform: perspective()관찰 대상transform-origin

perspective 속성은 관찰 대상의 부모(조상) 요소에 적용하여 하위 요소들을 관찰하는 원근 거리를 설정하며,
transform: perspective() 변환 함수는 관찰 대상에 직접 적용하여 그 대상을 관찰하는 원근 거리를 설정합니다.

perspective-origin

원근 거리의 기준점을 설정

속성 값

의미기본값
X축left, right, center, %, 단위50%
Y축top, bottom, center, %, 단위50%

관찰하는 요소 위치 참고

IMG_0003

예제

<div class="perspective">
  <div class="grand-parent">
    <div class="parent">
      <img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
    </div>
  </div>
</div>
.perspective {
  width: 200px;
  perspective: 600px; /* 원근감 값을 잘 조절해서 해야 된다. */
  perspective-origin: 50% 50%; /* 원근감 기준점 기본값 */
  padding: 70px;
}
.grand-parent {
  width: 200px;
  border: 3px solid dodgerblue;
  transition: 1s;
  transform: rotateX(-45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
.parent {
  width: 200px;
  border: 3px solid tomato;
  transition: 1s;
  transform: rotateY(45deg);
  transform-style: preserve-3d;
/* flat(기본값) -> preserve-3d(자식에도 3D 효과 넣겠다)  */
}
img {
  width: 200px;
  border: 3px solid lightgray;
  transition: 1s;
  transform: rotateX(45deg);
}

backface-visibility

3D 변환으로 회전된 요소의 뒷면 숨김을 설정

속성 값

의미기본값
visible뒷면 숨기지 않음visibel
hidden뒷면 숨김 

예제

<img src="https://avatars1.githubusercontent.com/u/46523571?s=460&v=4" alt="KANGPRO">
img {
  width: 300px;
  border: 1px solid lightgray;
  transition: 1s;
/*   transform: perspective(400px) rotateY(0deg); */
  transform: perspective(400px) rotateY(180deg); /* 반전 */
  backface-visibility: hidden;
}

matrix(a, b, c, d, e, f)(인수 6개)

요소의 2차원 변환(Transforms) 효과를 지정
scale(), skew(), translate(), rotate() 를 지정

요소에 일반 변환(Transforms) 함수(2D, 3D)를 사용하더라도 브라우저에 의해 matrix함수로 계산되어 적용됩니다.(2D 변환함수는 matrix 로, 3D 변환 함수는 matrix3d 로) 따라서 일반적인 경우는 matrix 함수가 아닌 일반 변환 함수를 사용하면 됩니다.

예시

IMG_0004




참고


패스트캠퍼스(박영웅 강사님) : 올인원 패키지 : 프론트엔드 개발 with React.js


개발자님들 덕분에 많이 배울 수 있었습니다. 감사의 말씀 드립니다.





© 2020. GANGPRO. All rights reserved.