본문 바로가기
CSS

강아지 애니메이션

by 🐬마뇽뇽 마뇽🦄 2022. 8. 18.
728x90

강아지 애니메이션


코드펜에서 pug나 sass 언어를 사용해 열정적으로 꼬리를 강아지를 만들어보았습니다.

01. pug

코드 펜에서는 html을 pug로 탭만을 이용하여 부모와 자식의 관계를 설정할 수 있습니다. 강아지의 구조를 pug로 디자인 해보았습니다.

.dog
	.dog-body
		.dog-tail
			.dog-tail
				.dog-tail
					.dog-tail
						.dog-tail
							.dog-tail
								.dog-tail
									.dog-tail
	.dog-torso
	.dog-head
		.dog-ears
			.dog-ear
			.dog-ear
		.dog-eyes
			.dog-eye
			.dog-eye
		.dog-muzzle
			.dog-tongue    
html로 변경했을 때에
   <div class="dog">
        <div class="dog-body">
          <div class="dog-tail">
            <div class="dog-tail">
              <div class="dog-tail">
                <div class="dog-tail">
                  <div class="dog-tail">
                    <div class="dog-tail">
                      <div class="dog-tail">
                        <div class="dog-tail"></div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="dog-torso"></div>
        <div class="dog-head">
          <div class="dog-ears">
            <div class="dog-ear"></div>
            <div class="dog-ear"></div>
          </div>
          <div class="dog-eyes">
            <div class="dog-eye"></div>
            <div class="dog-eye"></div>
          </div>
          <div class="dog-muzzle">
            <div class="dog-tongue"></div>
          </div>
        </div>
      </div>      

sass

sass 확인하기
   &$dog-width: 100px;
            $interval: 200ms;
            $color-gray: #EAEBEC;
            $easing: ease-in-out;
            body {
              display: flex;
              flex-direction: column;
              justify-content: center;
              align-items: center;
            }
            html, body {
              background: #B9AFED;
              width: 100%;
              height: 100%;
              margin: 0;
              padding: 0;
            }
            *, *:before, *:after {
              box-sizing: border-box;
              position: relative;
            }
            
            //dog
            .dog {
              width: $dog-width;
              height: $dog-width;
              z-index: 1;
              &:before {
                content: '';
                display: block;
                position: absolute;
                width: 100%;
                height: 100%;
                border-radius: 50%;
                background: rgba(black, 0.03);
                transform: translatey(-30%) scale(1.5);
              }
              * {
                position: absolute;
              }
            }
            .dog-body, .dog-head, .dog-torso {
              border-radius: 50%;
              background: white;
              position: absolute;
              width:100%;
              height:100%;
            }
            //dog-bod
            .dog-body {
              top: -50%;
                box-shadow: inset 0 -15px 0 0 $color-gray;
                animation : dog-body $interval $easing infinite alternate;
                
              &:before {
                content:'';
                position: absolute;
                bottom: 90%;
                right: 50%;
                width: 90%;
                height: 90%;
                background: rgba(white, 0.4);
                    border-top-left-radius : 100%;
                    border-bottom-left-radius : 10%;
                    border-top-right-radius : 10%;
                    transform-origin : right bottom;
                    animation: dog-tail-blur $interval $interval / 6 $easing infinite alternate both;
                    
                    @keyframes dog-tail-blur {
                        0% {
                            transform : rotate(0);
                            opacity : 0;
                        }
                        50% {
                            opacity : 1;
                        }
                        100% {
                            opacity : 0;
                            transform : rotate(90deg);
                        }
                    
                }
                    
              }
                
                @keyframes dog-body {
                    from {transform : translatex(-10%)}
                    to {transform : translatex(10%)}
                }
            }
            
            //.dog-head
            .dog-head {
                animation : dog-head $interval * 9 cubic-bezier(0.11, 0.79, 0, 0.99) infinite;
                
                @keyframes dog-head {
                    0% {transform :rotate(45deg)}
                    33% {transform :rotate(-45deg)}
                    66% {transform :rotate(0deg)}
                    100% {transform :rotate(45deg)}
                }
                
            }
            
            //dog-torso
            .dog-torso {
                top : -20%;
                background : white;
                animation : dog-torso $interval $easing infinite alternate-reverse;
                box-shadow: inset 0 -15px 0 0 $color-gray;
                
                @keyframes dog-torso {
                    0% {transform :translatex(-5%);}
                    100% {transform :translatex(5%);}
                }
            }
            
            //.dog-eyes
            .dog-eyes {
                width: 60%;
                top: 55%;
                left: 20%;
                z-index : 1;
                
                &:before {
                    content : '';
                    display: block;
                    width: 40px;
                    height: 40px;
                    border-radius : 40px;
                    background: #fff;
                    position: absolute;
                    top: -10px;
                    left: -10px;
                    z-index: 0;
                    border : 4px solid white;
                    border-left-width : 0;
                    border-bottom-width : 0;
                    border-top-width : 0;
                    transform : rotate(-45deg)
                    }
            }
            
            .dog-eye {
                
                width: 10px;
                height: 10px;
                
                border-radius :50%;
                background: white;
                z-index: 1;
                
                
                &:first-child {
                    left: 0;
                    border: solid 3px #134A73;
                }
                &:last-child {
                    right: 0;
                    border: solid 3px #134A73;
                }
            }
            
            //.dog-muzzle
            .dog-muzzle {
                width: 60%;
                left: 20%;
                height: 50%;
                border-bottom-left-radius: 100%;
                border-bottom-right-radius: 100%;
                bottom: -15%;
                background: white;
                
                &:before , &:after {
                    content : '';
                    display: block;
                    position: absolute;
                }
                &:before {
                    width: 6px;
                    height: 20px;
                    bottom: 0;
                    left : calc(50% - 3px);
                    background: $color-gray;
                }
                &:after {
                    background: #F2676F;
                    width: 20px;
                    height: 15px;
                    bottom: 12px;
                    left : calc(50% - 10px);
                    border-bottom-left-radius: 60% 60%;
                    border-bottom-right-radius: 60% 60%;
                    border-top-left-radius: 50% 40%;
                    border-top-right-radius: 50% 40%;
                    
                }
            }
            
            //.dog-ears 
            .dog-ears {
                width: 40%;
                top: 25%;
                left: 30%;
                
                
            }
            .dog-ear {
                bottom: -10px;
                height: 50px;
                width: 50px;
                background: #FEC6C9;
                
                &:first-child {
                    right: 100%;
                    border-bottom-left-radius: 80%;
                    border-top-right-radius: 80%;
                    box-shadow: inset -15px 15px 0 1px white;
                    transform : rotate(10deg);
                    }
                &:last-child {
                    left: 100%;
                    border-bottom-right-radius: 80%;
                    border-top-left-radius: 80%;
                    box-shadow: inset 15px 15px 0 1px white;
                    transform : rotate(-10deg);
                    }
            }
            
            .dog-tongue {
                width: 40%;
                height: 100%;
                left: calc(50% - 20px);
                z-index: -1;
                transform-origin: center top;
                
                &:before {
                    content : '';
                    position: absolute;
                    display: block;
                    left: 8px;
                    width: 100%;
                    height: 100%;
                    border-radius : 40px;
                    background: #fd3163;
                    animation: dog-tongue-inner $interval / 2 $easing infinite alternate ;
                    
                    @keyframes dog-tongue-inner {
                        from { transform: translatey(5%);}
                        to { transform: translatey(22%);}
                    }
                }
            }
            
            //.dog-tail 
            .dog-tail {
                $tail-width : 22px;
                width: $tail-width ;
                height: $tail-width * 1.1;
                background: white;
                bottom: 40%;
                border-radius: $tail-width / 2;
                left: calc(50% - #{$tail-width / 2});
                transform-origin: center bottom;
                
                .dog-tail {
                    animation : dog-tail-segment $interval $easing infinite alternate ;
                    
                    @keyframes dog-tail-segment {
                        from { transform: rotate(-10deg);}
                        to { transform: rotate(10deg);}
                    }
                }
            }
            
            .dog-body > .dog-tail {
                bottom: 90%;
        }     

728x90

'CSS' 카테고리의 다른 글

이미지 스프라이트  (4) 2022.08.20
Sass  (6) 2022.08.18
미디어 쿼리  (6) 2022.08.15
CSS 기본 문법  (5) 2022.08.15
벡터와 비트맵  (11) 2022.08.09

댓글


고양이 고양이
고양이 고양이
고양이 고양이