Giant Danio Fish
본문 바로가기
CSS

CSS 강아지 만들기

by 코딩왕자 2022. 8. 18.

CSS 이용해서 강아지 만들기

오늘은 css의 에니메이션 효과를 이용해서 강아지를 만들어보겠습니다


결과

HTML(Pug)

HTML에서 Pug를 이용해서 만들었습니다. Pug코드와 컴파일한 HTML코드는 다음과 같습니다.

<------ Compile 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>
<------ 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  

CSS(SCSS)

CSS에서 SCSS를 이용해서 만들었습니다. SCSS코드를 컴파일한 CSS코드는 다음과 같습니다.
SCSS코드가 긴관계로 코드는 코드팬에서 확인하시면 될거같습니다.

<------ Compile SCSS ------>
body {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    }
    
    html, body {
    background: #666;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    }
    
    *, *:before, *:after {
    box-sizing: border-box;
    position: relative;
    }
    
    .dog {
    width: 100px;
    height: 100px;
    z-index: 1;
    }
    .dog:before {
    content: '';
    display: block;
    position: absolute;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.04);
    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-body {
    top: -50%;
    box-shadow: inset 0 -15px 0 0 #EAEBEC;
    animation: dog-body 200ms ease-in-out infinite alternate;
    }
    .dog-body:before {
    content: '';
    position: absolute;
    bottom: 90%;
    right: 50%;
    width: 90%;
    height: 90%;
    background: rgba(255, 255, 255, 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 200ms 33.3333333333ms ease-in-out 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 {
    border-radius: 50%;
    animation: dog-head 1800ms 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 {
    top: -20%;
    background: white;
    box-shadow: inset 0 -15px 0 0 #EAEBEC;
    animation: dog-torso 200ms ease-in-out infinite alternate-reverse;
    }
    @keyframes dog-torso {
    0% {
        transform: translatex(-5%);
    }
    100% {
        transform: translatex(5%);
    }
    }
    
    .dog-eyes {
    width: 60%;
    top: 55%;
    left: 20%;
    z-index: 1;
    }
    .dog-eyes:before {
    content: '';
    display: block;
    width: 40px;
    height: 40px;
    border-radius: 40px;
    background: brown;
    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: red;
    z-index: 1;
    }
    .dog-eye:first-child {
    left: 0;
    }
    .dog-eye:last-child {
    right: 0;
    }
    
    .dog-muzzle {
    width: 60%;
    left: 20%;
    height: 50%;
    border-bottom-left-radius: 100%;
    border-bottom-right-radius: 100%;
    bottom: -15%;
    background: white;
    }
    .dog-muzzle:before, .dog-muzzle:after {
    content: '';
    display: block;
    position: absolute;
    }
    .dog-muzzle:before {
    width: 6px;
    height: 20px;
    bottom: 0;
    background: #EAEBEC;
    left: calc(50% - 3px);
    }
    .dog-muzzle:after {
    background: brown;
    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 {
    width: 40%;
    top: 25%;
    left: 30%;
    }
    
    .dog-ear {
    bottom: -10px;
    height: 50px;
    width: 50px;
    background: #EAEBEC;
    }
    .dog-ear: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);
    }
    .dog-ear:last-child {
    left: 100%;
    border-bottom-right-radius: 80%;
    border-top-left-radius: 80%;
    box-shadow: inset 15px 15px 0 0px white;
    transform: rotate(-10deg);
    }
    
    .dog-tongue {
    width: 40%;
    height: 150%;
    left: calc(50% - 20px);
    z-index: -1;
    transform-origin: center top;
    }
    .dog-tongue:before {
    content: '';
    position: absolute;
    left: 8px;
    display: block;
    width: 100%;
    height: 100%;
    border-radius: 40px;
    background: #fd3163;
    animation: dog-tongue-inner 100ms ease-in-out infinite alternate;
    }
    @keyframes dog-tongue-inner {
    from {
        transform: translatey(5%);
    }
    to {
        transform: translatey(22%);
    }
    }
    
    .dog-tail {
    width: 22px;
    height: 24.2px;
    background: white;
    bottom: 40%;
    left: calc(50% - 11px);
    border-radius: 11px;
    transform-origin: center bottom;
    }
    .dog-tail .dog-tail {
    animation: dog-tail-segment 200ms ease-in-out infinite alternate;
    }
    @keyframes dog-tail-segment {
    0% {
        transform: rotate(-10deg);
    }
    100% {
        transform: rotate(10deg);
    }
    }
    
    .dog-body > .dog-tail {
    bottom: 90%;
    }

'CSS' 카테고리의 다른 글

이미지 스프라이트 / 백그라운드 표현 / IR 효과  (9) 2022.08.19
CSS - SCSS  (12) 2022.08.18
CSS 미디어 쿼리  (8) 2022.08.13
CSS 기본문법  (5) 2022.08.13
벡터와 비트맵  (13) 2022.08.09

댓글


광고 준비중입니다