炫酷菜单动态滑动效果

代码语言:html

所属分类:菜单导航

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title> Fancy tab bar active animation</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
    <style>
        .tabbar {
            --primary: #275EFE;
            --background: #fff;
            --icon-active: #fff;
            --x: 64px;
            width: 100%;
            margin: 0;
            padding: 0 16px;
            border-radius: 0 0 28px 28px;
            list-style: none;
            position: relative;
            display: grid;
            grid-template-columns: repeat(3, minmax(0, 1fr));
            background: var(--background);
        }
        .tabbar:before, .tabbar:after {
            content: '';
            position: absolute;
            left: 0;
            border-radius: 50%;
            -webkit-transform: translateX(var(--x));
            transform: translateX(var(--x));
        }
        .tabbar:before {
            width: 64px;
            height: 64px;
            margin-left: -32px;
            background: var(--primary);
            top: -16px;
            z-index: 1;
        }
        .tabbar:after {
            width: 84px;
            height: 84px;
            margin-left: -42px;
            background: rgba(255, 255, 255, 0.08);
            top: -26px;
        }
        .tabbar li a {
            display: block;
            padding: 24px 0;
            -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
            transition: -webkit-transform .2s ease;
            transition: transform .2s ease;
            transition: transform .2s ease, -webkit-transform .2s ease;
            -webkit-tap-highlight-color: transparent;
        }
        .tabbar li a div {
            --y: 0;
            width: 32px;
            height: 32px;
            margin: 0 auto;
            position: relative;
            z-index: 1;
            -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
            -webkit-transform: translateY(var(--y));
            transform: translateY(var(--y));
        }
        .tabbar li a div svg {
            display: block;
            width: 32px;
            height: 32px;
            fill: rgba(255, 255, 255, 0);
            stroke-width: 1px;
            stroke: var(--primary);
        }
        .tabbar li a div:before {
            --s-x: 1;
            --s-y: 1;
            content: '';
            display: block;
            position: absolute;
            z-index: 1;
            -webkit-transform: scaleX(var(--s-x)) scaleY(var(--s-y));
            transform: scaleX(var(--s-x)) scaleY(var(--s-y));
        }
        .tabbar li a.box div:before {
            --s-x: .75;
            left: 50%;
            margin-left: -1px;
            width: 2px;
            height: 12px;
            bottom: 4px;
            border-radius: 1px;
            background: var(--primary);
        }
        .tabbar li a.box div em {
            --s-x: 1;
            --s-y: 1;
            display: block;
            position: absolute;
            top: 50%;
            left: 50%;
            z-index: 1;
        }
        .tabbar li a.box div em:before, .tabbar li a.box div em:after {
            --r: 0deg;
            content: '';
            display: block;
            height: 2px;
            border-radius: 1px;
            width: 13px;
            background: var(--primary);
            position: absolute;
            bottom: -1px;
            -webkit-transform: rotateZ(var(--r)) translateY(1px) scaleY(0.75);
            transform: rotateZ(var(--r)) translateY(1px) scaleY(0.75);
        }
        .tabbar li a.box div em:before {
            --r: 30deg;
            right: -1px;
            -webkit-transform-origin: 100% 50%;
            transform-origin: 100% 50%;
        }
        .tabbar li a.box div em:after {
            --r: -30deg;
            left: -1px;
            -webkit-transform-origin: 0% 50%;
            transform-origin: 0% 50%;
        }
        .tabbar li a.home div:before {
            --s-x: .75;
            --s-y: .75;
            border: 2px solid var(--primary);
            border-bottom: 0;
            width: 12px;
            height: 17px;
            border-radius: 2px 2px 0 0;
            left: 50%;
            bottom: 1px;
            margin-left: -6px;
            -webkit-transform: scale(0.75);
            transform: scale(0.75);
        }
        .tabbar li a.calendar div:before {
            --s-y: .75;
            height: 2px;
            width: 22px;
            background: var(--primary);
            left: 50%;
            top: 12px;
            margin-left: -11px;
        }
        .tabbar li a.calendar div em {
            display: block;
            position: absolute;
            top: 3px;
            left: 50%;
        }
        .tabbar li a.calendar div em:before, .tabbar li a.calendar div em:after {
            content: '';
            display: block;
            width: 2px;
            border-radius: 1px;
            height: 7px;
            background: var(--primary);
            position: absolute;
            top: 0;
            -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
            -webkit-transform: scaleX(0.75);
            transform: scaleX(0.75);
            transition: background .4s ease;
        }
        .tabbar li a.calendar div em:before {
            right: -6px;
        }
        .tabbar li a.calendar div em:after {
            left: -6px;
        }
        .tabbar li.active a div {
            --y: -24px;
        }
        .tabbar li.active a div svg {
            fill: var(--icon-active);
        }
        .tabbar li.active a.calendar em:before, .tabbar li.active a.calendar em:after {
            background: var(--icon-active);
        }
        .tabbar li:not(.active) a div {
            transition: -webkit-transform .4s ease;
            transition: transform .4s ease;
            transition: transform .4s ease, -webkit-transform .4s ease;
        }
        .tabbar li:not(.active) a div svg {
            transition: fill .4s ease;
        }
        .tabbar li:not(.active) a:active {
            -webkit-transform: scale(0.92);
            transform: scale(0.92);
        }
        .tabbar li.move a div {
            -webkit-animation: icon   1.2s linear forwards;
            animation: icon   1.2s linear forwards;
        }
        .tabbar li.move a div svg {
            -webkit-animation: svg 1.2s linear forwards;
            animation: svg 1.2s linear forwards;
        }
        .tabbar li.move a.box div:before {
            -webkit-animation: element-far 1.2s linear forwards;
            animation: element-far 1.2s linear forwards;
        }
        .tabbar li.move a.box div em {
            -webkit-animation: element-close 1.2s linear forwards;
            animation: element-close 1.2s linear forwards;
        }
        .tabbar li.move a.home div:before {
            -webkit-animation: element-close 1.2s linear forwards;
            animation: element-close 1.2s linear forwards;
        }
        .tabbar li.move a.calendar div:before {
            -webkit-animation: element-close 1.2s linear forwards;
            animation: element-close 1.2s linear forwards;
        }
        .tabbar li.move a.calendar div em {
            -webkit-animation: calendar-2 1.2s linear forwards;
            animation: calendar-2 1.2s linear forwards;
        }
        .tabbar li.move a.calendar div em:before, .tabbar li.move a.calendar div em:after {
            -webkit-animation: calendar-3 1.2s linear forwards;
            animation: calendar-3 1.2s linear forwards;
        }
        .tabbar.move:before {
            -webkit-animation: move   1.2s linear forwards;
            animation: move   1.2s linear forwards;
        }
        .tabbar.move:after {
            -webkit-animation: move-after 1.2s linear forwards;
            animation: move-after 1.2s linear forwards;
        }

        .frame {
            width: 320px;
            height: 240px;
            border-radius: 0 0 28px 28px;
            overflow: hidden;
            display: flex;
            align-items: flex-end;
        }

@-webkit-keyframes move {
            10%,
            15% {
                -webkit-transform: translate(var(--x),84px);
                transform: translate(var(--x),84px);
            }
            30% {
                -webkit-transform: translate(var(--x-n),84px);
                transform: translate(var(--x-n),84px);
            }
            42%,
            70% {
                -webkit-transform: translate(var(--x-n),-16px);
                transform: translate(var(--x-n),-16px);
            }
            85% {
                -webkit-transform: translate(var(--x-n),4px);
                transform: translate(var(--x-n),4px);
            }
            100% {
                -webkit-transform: translate(var(--x-n),0);
                transform: translate(var(--x-n),0);
            }
        }

@keyframes move {
            10%,
            15% {
                -webkit-transform: translate(var(--x),84px);
                transform: translate(var(--x),84px);
            }
            30% {
                -webkit-transform: translate(var(--x-n),84px);
                transform: translate(var(--x-n),84px);
            }
            42%,
            70% {
                -webkit-transform: translate(var(--x-n),-16px);
                transform: translate(var(--x-n),-16px);
            }
            85% {
                -webkit-transform: translate(var(--x-n),4px);
                transform: translate(var(--x-n),4px);
            }
            100% {
                -webkit-transform: translate(var(--x-n),0);
                transform: translate(var(--x-n),0);
            }
        }
@-webkit-keyframes move-after {
            10%,
            15% {
                -webkit-transform: translate(var(--x),84px) scale(0.82);
                transform: translate(var(--x),84px) scale(0.82);
            }
            30% {
                -webkit-transform: translate(var(--x-n),84px) scale(0.82);
                transform: translate(var(--x-n),84px) scale(0.82);
            }
            42% {
                -webkit-transform: translate(var(--x-n),-16px) scale(0.82);
                transform: translate(var(--x-n),-16px) scale(0.82);
            }
            60% {
                -webkit-transform: translate(var(--x-n),-16px) scale(1);
                transform: translate(var(--x-n),-16px) scale(1);
            }
            70% {
                -webkit-transform: translate(var(--x-n),-16px) scale(1);
                transform: translate(var(--x-n),-16px) scale(1);
            }
            85% {
                -webkit-transform: translate(var(--x-n),4px) scale(1);
                transform: translate(var(--x-n),4px) scale(1);
            }
            100% {
                -webkit-transform: translate(var(--x-n),0) scale(1);
                transform: translate(var(--x-n),0) scale(1);
            }
        }
@keyframes move-after {
            10%,
            15% {
                -webkit-transform: translate(var(--x),84px) scale(0.82);
                transform: translate(var(--x),84px) scale(0.82);
            }
            30% {
                -webkit-transform: translate(var(--x-n),84px) scale(0.82);
                transform: translate(var(--x-n),84px) scale(0.82);
            }
            42% {
                -webkit-transform: translate(var(--x-n),-16px) scale(0.82);
                transform: translate(var(--x-n),-16px) scale(0.82);
            }
            60% {
                -webkit-transform: translate(var(--x-n),-16px) scale(1);
                transform: translate(var(--x-n),-16px) scale(1);
            }
            70% {
                -webkit-transform: translate(var(--x-n),-16px) scale(1);
                transform: translate(var(--x-n),-16px) scale(1);
            }
            85% {
                -webkit-transform: translate(var(--x-n),4px) scale(1);
                transform: translate(var(--x-n),4px) scale(1);
            }
            100% {
                -webkit-transform: translate(var(--x-n),0) scale(1);
                transform: translate(var(--x-n),0) scale(1);
            }
        }
@-webkit-keyframes icon {
            30% {
                -webkit-transform: translateY(0px);
                transform: translateY(0px);
            }
            40%,
            70% {
                -webkit-transform: translateY(-100px);
                transform: translateY(-100px);
            }
            85% {
                -webkit-transform: translateY(-20px);
                transform: translateY(-20px);
            }
            100% {
                -webkit-transform: translateY(-24px);
                transform: translateY(-24px);
            }
        }
@keyframes icon {
            30% {
                -webkit-transform: translateY(0px);
                transform: translateY(0px);
            }
            40%,
            70% {
                -webkit-transform: translateY(-100px);
                transform: translateY(-100px);
            }
            85% {
                -webkit-transform: translateY(-20px);
                transform: translateY(-20px);
            }
            100% {
                -webkit-transfo.........完整代码请登录后点击上方下载按钮下载查看

网友评论0