forked from integrated_whb/integrated_whb_vue
566 lines
12 KiB
Vue
566 lines
12 KiB
Vue
<template>
|
||
<div class="containerer">
|
||
<div class="container container-star">
|
||
<div class="star-1" v-for="item in 30" :key="item"></div>
|
||
<div class="star-2" v-for="item in 30" :key="item"></div>
|
||
</div>
|
||
<div class="container container-bird">
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bird bird-anim">
|
||
<div class="bird-container">
|
||
<div class="wing wing-left">
|
||
<div class="wing-left-top"></div>
|
||
</div>
|
||
<div class="wing wing-right">
|
||
<div class="wing-right-top"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="container-title">
|
||
<div class="title">
|
||
<div class="number">4</div>
|
||
<div class="moon">
|
||
<div class="face">
|
||
<div class="mouth"></div>
|
||
<div class="eyes">
|
||
<div class="eye-left"></div>
|
||
<div class="eye-right"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="number">4</div>
|
||
</div>
|
||
<div class="subtitle">抱歉,您访问的页面不存在!</div>
|
||
<button class="backbtn" @click="router.push({ name: '/index' })">
|
||
返回首页
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<script setup>
|
||
import { useRouter } from "vue-router";
|
||
const router = useRouter();
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
@import url("https://fonts.googleapis.com/css?family=Lato|Russo+One");
|
||
*,
|
||
*:after,
|
||
*:before {
|
||
box-sizing: border-box;
|
||
}
|
||
body {
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
.container {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100vh;
|
||
overflow: hidden;
|
||
}
|
||
|
||
//stars
|
||
.container-star {
|
||
background-image: linear-gradient(
|
||
to bottom,
|
||
#04112b 0%,
|
||
#474c88 70%,
|
||
#a871d6 100%
|
||
);
|
||
&:after {
|
||
background: radial-gradient(
|
||
ellipse at center,
|
||
rgba(255, 255, 255, 0) 0%,
|
||
rgba(255, 255, 255, 0) 40%,
|
||
rgba(15, 10, 38, 0.2) 100%
|
||
);
|
||
content: "";
|
||
width: 100%;
|
||
height: 100%;
|
||
position: absolute;
|
||
top: 0;
|
||
}
|
||
}
|
||
.star-1 {
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
background-color: #ffffff;
|
||
animation: twinkle 5s infinite ease-in-out;
|
||
&:after {
|
||
height: 100%;
|
||
width: 100%;
|
||
transform: rotate(90deg);
|
||
content: "";
|
||
position: absolute;
|
||
background-color: #fff;
|
||
border-radius: 50%;
|
||
}
|
||
&:before {
|
||
background: radial-gradient(
|
||
ellipse at center,
|
||
rgba(255, 255, 255, 0.5) 0%,
|
||
rgba(255, 255, 255, 0) 60%,
|
||
rgba(255, 255, 255, 0) 100%
|
||
);
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
content: "";
|
||
top: -20%;
|
||
left: -50%;
|
||
}
|
||
}
|
||
@for $i from 1 through (30) {
|
||
$top: random(100) + vh;
|
||
$left: random(100) + vw;
|
||
$size: random(6) + 3px;
|
||
.star-1:nth-of-type(#{$i}) {
|
||
top: $top;
|
||
left: $left;
|
||
width: $size;
|
||
height: calc($size / 3);
|
||
animation-delay: random(5) + s;
|
||
&:before {
|
||
width: $size * 2;
|
||
height: $size * 2;
|
||
top: -250%;
|
||
}
|
||
}
|
||
}
|
||
.star-2 {
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
background-color: #ffffff;
|
||
animation: twinkle 5s infinite ease-in-out;
|
||
}
|
||
@for $i from 31 through (60) {
|
||
$top: random(100) + vh;
|
||
$left: random(100) + vw;
|
||
$size: random(3) + 1px;
|
||
.star-2:nth-of-type(#{$i}) {
|
||
top: $top;
|
||
left: $left;
|
||
width: $size;
|
||
height: $size;
|
||
animation-delay: random(5) + s;
|
||
&:before {
|
||
width: $size * 2;
|
||
height: $size * 2;
|
||
top: -250%;
|
||
}
|
||
}
|
||
}
|
||
|
||
//text and moon
|
||
.container-title {
|
||
width: 600px;
|
||
height: 450px;
|
||
left: 50%;
|
||
top: 50%;
|
||
transform: translate(-50%, -50%);
|
||
position: absolute;
|
||
color: white;
|
||
line-height: 1;
|
||
font-weight: 700;
|
||
text-align: center;
|
||
justify-content: center;
|
||
align-items: center;
|
||
flex-direction: column;
|
||
display: flex;
|
||
}
|
||
.title > * {
|
||
display: inline-block;
|
||
font-size: 200px;
|
||
}
|
||
.number {
|
||
text-shadow: 20px 20px 20px rgba(0, 0, 0, 0.2);
|
||
padding: 0 0.2em;
|
||
}
|
||
.subtitle {
|
||
font-size: 24px;
|
||
margin-top: 3em;
|
||
text-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
|
||
font-weight: normal;
|
||
}
|
||
button {
|
||
font-size: 14px;
|
||
margin-top: 2em;
|
||
padding: 0.5em 1em;
|
||
letter-spacing: 1px;
|
||
color: white;
|
||
background-color: transparent;
|
||
border: 0;
|
||
cursor: pointer;
|
||
z-index: 999;
|
||
border: 1px solid white;
|
||
border-radius: 5px;
|
||
text-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
|
||
transition: opacity 0.2s ease;
|
||
&:hover {
|
||
opacity: 0.7;
|
||
}
|
||
&:focus {
|
||
outline: 0;
|
||
}
|
||
}
|
||
.moon {
|
||
position: relative;
|
||
border-radius: 50%;
|
||
width: 160px;
|
||
height: 160px;
|
||
z-index: 2;
|
||
background-color: #fff;
|
||
box-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #fff,
|
||
0 0 70px #fff, 0 0 80px #fff, 0 0 100px #ff1177;
|
||
animation: rotate 5s ease-in-out infinite;
|
||
.face {
|
||
top: 60%;
|
||
left: 47%;
|
||
position: absolute;
|
||
.mouth {
|
||
border-top-left-radius: 50%;
|
||
border-bottom-right-radius: 50%;
|
||
border-top-right-radius: 50%;
|
||
background-color: #5c3191;
|
||
width: 25px;
|
||
height: 25px;
|
||
position: absolute;
|
||
animation: snore 5s ease-in-out infinite;
|
||
transform: rotate(45deg);
|
||
box-shadow: inset -4px -4px 4px rgba(0, 0, 0, 0.3);
|
||
}
|
||
.eyes {
|
||
position: absolute;
|
||
top: -30px;
|
||
left: -30px;
|
||
.eye-left,
|
||
.eye-right {
|
||
border: 4px solid #5c3191;
|
||
width: 30px;
|
||
height: 15px;
|
||
border-bottom-left-radius: 100px;
|
||
border-bottom-right-radius: 100px;
|
||
border-top: 0;
|
||
position: absolute;
|
||
&:before,
|
||
&:after {
|
||
content: "";
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
width: 4px;
|
||
height: 4px;
|
||
background-color: #5c3191;
|
||
top: -2px;
|
||
left: -4px;
|
||
}
|
||
&:after {
|
||
left: auto;
|
||
right: -4px;
|
||
}
|
||
}
|
||
.eye-right {
|
||
left: 50px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//birds
|
||
.container-bird {
|
||
perspective: 2000px;
|
||
width: 100%;
|
||
height: 100%;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
bottom: 0;
|
||
right: 0;
|
||
}
|
||
.bird {
|
||
position: absolute;
|
||
z-index: 1000;
|
||
left: 50%;
|
||
top: 50%;
|
||
height: 40px;
|
||
width: 50px;
|
||
transform: translate3d(-100vw, 0, 0) rotateY(90deg);
|
||
transform-style: preserve-3d;
|
||
}
|
||
.bird-container {
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
transform-style: preserve-3d;
|
||
transform: translate3d(50px, 30px, -300px);
|
||
}
|
||
.wing {
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
border-radius: 3px;
|
||
transform-style: preserve-3d;
|
||
transform-origin: center bottom;
|
||
z-index: 300;
|
||
}
|
||
.wing-left {
|
||
background: linear-gradient(to bottom, #a58dc4 0%, #7979a8 100%);
|
||
transform: translate3d(0, 0, 0) rotateX(-30deg);
|
||
animation: wingLeft 1.3s cubic-bezier(0.45, 0, 0.5, 0.95) infinite;
|
||
}
|
||
.wing-right {
|
||
background: linear-gradient(to bottom, #d9d3e2 0%, #b8a5d1 100%);
|
||
transform: translate3d(0, 0, 0) rotateX(-30deg);
|
||
animation: wingRight 1.3s cubic-bezier(0.45, 0, 0.5, 0.95) infinite;
|
||
}
|
||
.wing-right-top,
|
||
.wing-left-top {
|
||
border-right: 25px solid transparent;
|
||
border-left: 25px solid transparent;
|
||
top: -20px;
|
||
width: 100%;
|
||
position: absolute;
|
||
transform-origin: 100% 100%;
|
||
}
|
||
.wing-right-top {
|
||
border-bottom: 20px solid #b8a5d1;
|
||
transform: translate3d(0, 0, 0) rotateX(60deg);
|
||
animation: wingRightTop 1.3s cubic-bezier(0.45, 0, 0.5, 0.95) infinite;
|
||
}
|
||
.wing-left-top {
|
||
border-bottom: 20px solid #7979a8;
|
||
transform: translate3d(0, 0, 0) rotateX(-60deg);
|
||
animation: wingLeftTop 1.3s cubic-bezier(0.45, 0, 0.5, 0.95) infinite;
|
||
}
|
||
.bird-anim:nth-child(1) {
|
||
animation: bird1 30s linear infinite forwards;
|
||
}
|
||
.bird-anim:nth-child(2) {
|
||
animation: bird2 30s linear infinite forwards;
|
||
animation-delay: 3s;
|
||
z-index: -1;
|
||
}
|
||
.bird-anim:nth-child(3) {
|
||
animation: bird3 30s linear infinite forwards;
|
||
animation-delay: 5s;
|
||
}
|
||
.bird-anim:nth-child(4) {
|
||
animation: bird4 30s linear infinite forwards;
|
||
animation-delay: 7s;
|
||
}
|
||
.bird-anim:nth-child(5) {
|
||
animation: bird5 30s linear infinite forwards;
|
||
animation-delay: 14s;
|
||
}
|
||
.bird-anim:nth-child(6) {
|
||
animation: bird6 30s linear infinite forwards;
|
||
animation-delay: 10s;
|
||
z-index: -1;
|
||
}
|
||
|
||
//keyframes
|
||
@keyframes rotate {
|
||
0%,
|
||
100% {
|
||
transform: rotate(-8deg);
|
||
}
|
||
50% {
|
||
transform: rotate(0deg);
|
||
}
|
||
}
|
||
|
||
@keyframes snore {
|
||
0%,
|
||
100% {
|
||
transform: scale(1) rotate(30deg);
|
||
}
|
||
50% {
|
||
transform: scale(0.5) rotate(30deg);
|
||
border-bottom-left-radius: 50%;
|
||
}
|
||
}
|
||
|
||
@keyframes twinkle {
|
||
0%,
|
||
100% {
|
||
opacity: 0.7;
|
||
}
|
||
50% {
|
||
opacity: 0.3;
|
||
}
|
||
}
|
||
|
||
@keyframes wingLeft {
|
||
0%,
|
||
100% {
|
||
transform: translate3d(0, 0, 0) rotateX(-50deg);
|
||
}
|
||
50% {
|
||
transform: translate3d(0, -20px, 0) rotateX(-130deg);
|
||
background: linear-gradient(to bottom, #d9d3e2 0%, #b8a5d1 100%);
|
||
}
|
||
}
|
||
|
||
@keyframes wingLeftTop {
|
||
0%,
|
||
100% {
|
||
transform: translate3d(0, 0, 0) rotateX(-10deg);
|
||
}
|
||
50% {
|
||
transform: translate3d(0px, 0px, 0) rotateX(-40deg);
|
||
border-bottom: 20px solid #b8a5d1;
|
||
}
|
||
}
|
||
|
||
@keyframes wingRight {
|
||
0%,
|
||
100% {
|
||
transform: translate3d(0, 0, 0) rotateX(50deg);
|
||
}
|
||
50% {
|
||
transform: translate3d(0, -20px, 0) rotateX(130deg);
|
||
background: linear-gradient(to bottom, #a58dc4 0%, #7979a8 100%);
|
||
}
|
||
}
|
||
|
||
@keyframes wingRightTop {
|
||
0%,
|
||
100% {
|
||
transform: translate3d(0, 0, 0) rotateX(10deg);
|
||
}
|
||
50% {
|
||
transform: translate3d(0px, 0px, 0px) rotateX(40deg);
|
||
border-bottom: 20px solid #7979a8;
|
||
}
|
||
}
|
||
|
||
@keyframes bird1 {
|
||
0% {
|
||
transform: translate3d(-120vw, -20px, -1000px) rotateY(-40deg) rotateX(0deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(100vw, -40vh, 1000px) rotateY(-40deg) rotateX(0deg);
|
||
}
|
||
}
|
||
|
||
@keyframes bird2 {
|
||
0%,
|
||
15% {
|
||
transform: translate3d(100vw, -300px, -1000px) rotateY(10deg) rotateX(0deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(-100vw, -20px, -1000px) rotateY(10deg) rotateX(0deg);
|
||
}
|
||
}
|
||
|
||
@keyframes bird3 {
|
||
0% {
|
||
transform: translate3d(100vw, -50vh, 100px) rotateY(-5deg) rotateX(-20deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(-100vw, -10vh, 100px) rotateY(-5deg) rotateX(-20deg);
|
||
}
|
||
}
|
||
|
||
@keyframes bird4 {
|
||
0% {
|
||
transform: translate3d(100vw, 30vh, 200px) rotateY(-5deg) rotateX(10deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(-100vw, -30vh, 200px) rotateY(-5deg) rotateX(10deg);
|
||
}
|
||
}
|
||
|
||
@keyframes bird5 {
|
||
0%,
|
||
5% {
|
||
transform: translate3d(100vw, 30vh, 400px) rotateY(-15deg) rotateX(-10deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(-100vw, 10vh, 400px) rotateY(-15deg) rotateX(-10deg);
|
||
}
|
||
}
|
||
|
||
@keyframes bird6 {
|
||
0%,
|
||
10% {
|
||
transform: translate3d(-100vw, 20vh, -500px) rotateY(15deg) rotateX(10deg);
|
||
}
|
||
100% {
|
||
transform: translate3d(100vw, 40vh, -800px) rotateY(5deg) rotateX(10deg);
|
||
}
|
||
}
|
||
@media screen and (max-width: 580px) {
|
||
.container-404 {
|
||
width: 100%;
|
||
}
|
||
.number {
|
||
font-size: 100px;
|
||
}
|
||
.subtitle {
|
||
font-size: 20px;
|
||
padding: 0 1em;
|
||
}
|
||
.moon {
|
||
width: 100px;
|
||
height: 100px;
|
||
}
|
||
.face {
|
||
transform: scale(0.7);
|
||
}
|
||
}
|
||
</style>
|