3 049 Codepen

Вращающаяся новогодняя ёлка на CSS

Адаптивная вращающаяся новогодняя ёлочка с разноцветными огоньками на чистом CSS


HTML


<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

SCSS

$elements:128;
$layers:7;
body {
    background: black;
    ul {
        padding:0;
        li {
            list-style:none;
        }
    }
    ul:nth-child(1) {
        position: absolute;
        top:calc(20vh - 1.6rem);
        left:50%;
        width:1rem;
        height:1rem;
        border-radius:100%;
        //background:#FFCE54;
        transform:translate(-50%, -50%);
        li {
            position: absolute;
            width:0;
            height:0;
            border-width:0 0.5rem 1rem 0.5rem;
            border-style:solid;
            border-color:transparent;
            border-bottom-color:#FFCE54;
            transform-origin:0.5rem 1rem;
            @for $i from 0 through 4 {
                &:nth-child(#{$i}) {
                    transform:rotate($i*72deg);
                }
            }
        }
    }
    ul:nth-child(2) {
        padding:0;
        li {
            position: absolute;
            top:20vh;
            right:50%;
            width:0.0625rem;
            background: linear-gradient(rgba(46,204,113, 0), rgba(46,204,113, 0.25));
            list-style:none;
            transform-origin:50% 0;
            animation: swing 4s ease-in-out infinite;
            
            @for $i from 1 through $elements {
                &:nth-child(#{$i}) {
                    height:60vh*(($i+4)/($elements+4)); 
                        //Create gaps with the +4, remove +4 to stack up layers - effectively 4 invisible dots at the top
                    animation-delay:-4s*($i/($elements/$layers));
                }
            }
            &:before {
                content: '';
                position: absolute;
                left:-1px;
                bottom:1px;
                width:3px;
                height:3px;
            }
            
            &:nth-child(4n):before {
                background:#D8334A;
            } 
            &:nth-child(4n+1):before {
                background:#FFCE54;
            } 
            &:nth-child(4n+2):before {
                background:#2ECC71;
            } 
            &:nth-child(4n+3):before {
                background:#5D9CEC;
            } 
        }
    }
}

@keyframes swing {
    0%, 100% {
        transform:rotate(-30deg);
    }
    5%, 45% {
        opacity:0.25;
    }
    50%, 100%, 0% {
        opacity:1;
    }
    50% {
        transform:rotate(30deg);
    }
}

Комментарии

  • Facebook
  • Вконтакте

Похожие статьи