CSS : Transition, Transformation, Animation, Media Queries

재우·2023년 6월 20일

CSS

목록 보기
3/3

Transition

  • transition : 어떤 상태(ex. hover)에서 다른 상태로 가는 변화를 애니메이션화 하는것임.
  • transition 속성은 상태가 없는 요소에 붙어야한다.
    그렇기 때문에 transition 은 state가 아닌 root엘리먼트에 적어야된다.
  • transition은 state에 따라 바뀌는 속성을 갖고 있으면 사용 가능하다.
    👇 아래 코드에선 hover를 통해 상태를 변화했기때문에 적용된다. 아래 코드를 실행해서 링크영역에 마우스 커서를 올리면(hover) , 상태가 변한다.
<style>
	a {  
    	/* state(a:hover)에 있는 모든 속성(all)을, 5초에 걸쳐, ease-in-out하게 변화 시킴 */
       /* 대부분 ease-in, ease-out, ease-in-out을 씀 */ 
    	transition: all 5s ease-in-out;
        color: wheat;
        background-color: tomato;
        text-decoration: none;
        padding: 3px 5px;
        
        /* 하나의 속성만 지정하여 변화시킬 수도 있음(border-radius) 
        transition: border-radius 5s ease-in-out; */
        
    }
    a:hover {
    	border-radius: 20px;
        color: tomato;
        background-color: wheat;
    }
    
</style>
 . 
 .
<body>
    <div>
      <a href="#">go home</a>
    </div>
  </body>
  • ease-in function : 브라우저에게 변화하는 방법을 알려주는 역할
    • linear : 일정한 속도로 변화
    • ease-in : 시작과 끝이 빠름
    • ease-out : 시작과 끝이 느림
    • ease-in-out: 시작이 빠르고 끝이 느림

Transformation

  • transform은 무언가를 변형시키는것이다.CSS의 요소를 마치 3D처럼 구현가능하다.
  • transform은 다른 box element에 영향을 끼치지 않는다. 즉, 다른 요소의 box를 변형시키지 않고, 원하는 요소를 변형시키거나 이동시키기 위해 사용한다.
<head>
    <style>
      img {
        transition: transform 5s ease-in-out; /* 이렇게 transition과 쓸수있다. */
      }

      /* 이미지에 마우스 커서를 올려놓으면 rotateX(360deg)x축으로 360도 돌아면서 이미지 크기가 2배 늘어나고, 마우스 커서를 옮기면 원래대로 돌아옴*/
      img:hover {
        transform: rotateX(360deg) scale(2);

        /* 이미지에 마우스 커서를 올려놓으면 x축을 기준으로 이미지가 왼쪽에서 오른쪽으로 200px만큼 이동한다. */
        /* transform: translateX(200px);*/
      }
    </style>
  </head>

  <body>
    <div>hello</div>
    <img src="logo.jpg" />
    <span>hello</span>
  </body>

Animation

  • transition은 어떤 상태(ex. hover)에서 다른 상태로 변하는 걸 애니메이션으로 만듬.
    => hover과 같이 마우스를 올려놔야 재생되는것과 같은 특정 조건없이 계속 재생되는 애니메이션을 구현하고 싶으면 animation 속성을 사용해야함.
  • 속성을 꼭 transform만 써야하는 건 아니지만 일부 property는 애니메이션이 잘 안되기 때문에 transform을 쓰는 걸 권함.
<style>
   
   /* 1.from to를 사용하여 설정한 방법 */
    @keyframes 애니메이션명(키프레임명) {
       from {
         transform: rotateY(0);
       }
       to { /* Y축으로 180도 회전하면서 X축으로 오른쪽으로 100px 이동 */
         transform: rotateY(180deg) translateX(100px);
        }
    }
       img {
        /* 키프레임명의 설정을, 5초에 걸쳐, ease-in-out하게, 무한으로 변화 시킴 */
         animation: 키프레임명 5s ease-in-out infinite;
       }
  </style>
  .
  .
  <body>
    <div>hello</div>
    <img src="logo.jpg" />
    <span>hello</span>
  </body>
<style>
   
   /* 2. 0%, 50%,100%등으로 설정한 방법(모든 숫자 가능). 
   그래서 처음부터 끝까지 부드러운 애니메이션을 적용할수있다. */
    @keyframes 애니메이션명(키프레임명) {
       0% {
         transform: rotateY(0);
       }
       50% {
         transform: rotateY(180deg) translateY(100px);
       }
       100% {
         transform: rotateY(0) translateY(0px);
       }
       img {
         animation: 키프레임명 5s ease-in-out infinite;
       }
   }

 </style>
  .
  .
  <body>
    <div>hello</div>
    <img src="logo.jpg" />
    <span>hello</span>
  </body>

Media Queries (미디어 쿼리)

  • 미디어쿼리는 디바이스별로 각기 다른 스크린 사이즈를 보여줄 수 있는 설정을 말한다.
  • 미디어쿼리를 작성할 땐 @media screen and( 조건 ){ 요소 }를 이용한다. ( ) 이 괄호의 조건이 참이라면 { } 이 괄호의 코드를 실행하는것이다.
<style>
      @media screen and (min-width: 1000px) and (max-width: 1200px) {
        div {
          /* width가 600px~1200px이면 노출 */
          background-color: wheat;
        }
      }
      @media screen and (orientation: landscape) {
        /* 가로모드이면 display:none */
        #one {
          display: none;
        }
      }
      /* orientation: landscape -> 화면이 가로모드일 때
         orientation: portrait -> 화면이 세로모드일 때 */
    </style>
  </head>

  <body>
    <div>
      <div id="one">hello</div>
      <div id="two">hello2</div>
    </div>
  </body>

0개의 댓글