css实现地铁运营地图动画代码

代码语言:html

所属分类:动画

代码描述:css实现地铁运营地图动画代码,可修改参数

代码标签: css 地铁 运营 地图 动画 代码

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

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
<style>
    
credit {
    display: block;
    position: fixed;
    z-index: 1000;
    top: 2.6rem;
    left: 50%;
    transform: translateX(-50%);
    font: 500 1.5rem/1 ui-sans-serif, system-ui, sans-serif;
    letter-spacing: .06rem;
    color: #7e7e84;
    white-space: nowrap;
    pointer-events: none;
    text-shadow: 0 .1rem .3rem #000000a6;

    span {
        margin: 0 .5rem;
        opacity: .55;
    }

    a {
        color: #cfcfc9;
        pointer-events: auto;
        text-decoration-color: #ffffff3d;
        text-underline-offset: .35rem;
        transition: color .2s, text-decoration-color .2s;

        &:is(:hover, :focus-visible) {
            color: var(--led);
            text-decoration-color: var(--led);
        }

        &:focus-visible {
            outline: .2rem solid #fff;
            outline-offset: .3rem;
            border-radius: .2rem;
        }
    }

    @media (max-width: 760px) {
        font-size: 1.3rem;
        top: 1.8rem;
    }
}

@keyframes hues {
    to {
        filter: hue-rotate(360deg);
    }
}

@keyframes chase {
    0% {
        opacity: calc(1 * var(--vis));
    }

    14% {
        opacity: calc(.16 * var(--vis));
    }

    100% {
        opacity: calc(.16 * var(--vis));
    }
}

@keyframes breathe {
    0%,
    100% {
        opacity: .32;
    }

    50% {
        opacity: 1;
    }
}

@keyframes glide {
    to {
        offset-distance: 99.9%;
    }
}

:root {
    --ca: #ff4136;
    --cb: #29b6ff;
    --cc: #ffd60a;
    --cd: #6ee86e;
    --ce: #ff53b0;
    --cf: #ff9a1f;

    --led: #bcd8ff;
    --led2: #2a6cff;

    --body: #0c0c10;
    --body-hsl: 232 22% 3%;
    --surface: #c9c9bb;
    --grey: color-mix(in srgb, var(--surface) 36%, var(--body));
    --surface1: color-mix(in srgb, var(--surface) 48%, var(--body));
    --pixel: #1a1820;
    --pixel-light: color-mix(in srgb, color-mix(in srgb, var(--led) 40%, transparent) 90%, white 10%);
    --conic: transparent 90deg, var(--pixel-light) 110deg, var(--pixel-light) 250deg, transparent 270deg;

    --pitch: 2rem;
    --dot: 1.2rem;
    --ring: 2.8rem;
    --screen-w: 88rem;
    --screen-h: 64rem;
    --bezel: 4rem;
    --panel-half: 36rem;

    --chase-time: 2s;
    --step: 34ms;
    --hue-time: 9s;
    --breathe-time: 5s;
    --train-speed: .085s;
}

html,
body {
    font-size: 1vmin;
    height: 100%;
    margin: 0;
    overflow: hidden;
    overscroll-behavior: none;
    background: var(--body);
}

body {
    &:before,
    &:after {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        z-index: 200;
        pointer-events: none;
    }

    &:before {
        background: linear-gradient(transparent, var(--led));
        mix-blend-mode: overlay;
        opacity: .1;
    }

    &:after {
        background: linear-gradient(90deg, #0005, transparent);
        box-shadow: inset 0 0 3rem var(--body);
    }
}

main {
    display: flex;
    flex-direction: column-reverse;
    height: 100%;

    &:after {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background: linear-gradient(var(--led2), transparent);
        z-index: 200;
        pointer-events: none;
        mix-blend-mode: soft-light;
        opacity: .3;
    }
}

background,
foreground {
    display: block;
    height: 50%;
}

background {
    background: linear-gradient(var(--grey), #0001 70%, #0000000D, #0003), var(--grey);
    z-index: 1;
}

foreground {
    background: linear-gradient(var(--surface1), #fff1), var(--surface1);
}

pixel-grid,
shadow {
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -48rem;
    margin-top: -36rem;
    background: var(--body);
    width: var(--screen-w);
    height: var(--screen-h);
    padding: var(--bezel);
    border-radius: 1.4rem;
    box-sizing: content-box;
}

shadow {
    &:before,
    &:after {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        filter: blur(.6rem);
    }

    &:before {
        width: 100%;
        height: 100%;
        background: linear-gradient(-90deg, hsl(var(--body-hsl) / .35), transparent 55%);
        transform: translate3d(-52rem, 0, 0) skewY(8deg);
        transform-origin: 100%;
    }

    &:after {
        width: 100%;
        height: 70%;
        background: linear-gradient(hsl(var(--body-hsl) / .35) 45%, transparent 60%);
        transform: translate3d(-.1rem, 42rem, 0);
        border-radius: 50%;
    }
}

pixel-grid {
    z-index: 200;
    background: radial-gradient(at left bottom, #1a1820, var(--body));
    box-shadow: inset 0 0 2rem #000a;
    -webkit-box-reflect: below 0 linear-gradient(transparent, #0001, transparent);

    &:before {
        content: '';
        position: absolute;
        inset: -18rem;
        z-index: -1;
        border-radius: 50%;
        background: radial-gradient(closest-side, color-mix(in srgb, var(--led) 24%, transparent), transparent);
        filter: blur(4rem);
        pointer-events: none;
    }
}

screen {
    display: block;
    position: relative;
    width: var(--screen-w);
    height: var(--screen-h);
    overflow: hidden;
    background-co.........完整代码请登录后点击上方下载按钮下载查看

网友评论0