自行下载后有注释,一看就懂,只要不把有着class=“stars”的div删除,一切都好说
父容器 {
/*设置宽高*/ width: 100%; height: 100%; /*下面的属性是必须的*/ position: relative; background: radial-gradient(200% 100% at bottom center, #f7f7b6, #e96f92, #75517d, #1b2947); background: radial-gradient(220% 105% at top center, #1b2947 10%, #75517d 40%, #e96f92 65%, #f7f7b6); background-attachment: fixed; overflow: hidden; }
组件:
<template>
<div class="star-bg">
<div v-for="i in stars" :key="i" class="star-bg-star" :style="{
transformOrigin:'0 0 '+(distance+Math.random()*300)+'px',
transform:'translate3d(0,0,-'+(distance+Math.random()*300)+'px) rotateY('+(Math.random()*360)+'deg) rotateX('+(Math.random()*-50)+'deg) scale('+(0.2+Math.random())+','+(0.2+Math.random())+')'
}">
</div>
</div>
</template>
<script>
export default {
name: "star-bg",
data() {
return {}
},
methods: {},
props: {
stars: {
type: Number,
default: 1000
},
distance: {
type: Number,
default: 800
}
},
}
</script>
<style scoped>
body {
}
@keyframes rotate {
0% {
transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(0);
}
100% {
transform: perspective(400px) rotateZ(20deg) rotateX(-40deg) rotateY(-360deg);
}
}
.star-bg{
background-color: transparent;
transform: perspective(500px);
transform-style: preserve-3d;
position: absolute;
bottom: 0;
perspective-origin: 50% 100%;
left: 50%;
animation: rotate 90s infinite linear;
}
.star-bg-star {
width: 2px;
height: 2px;
background: #f8f8ee;
position: absolute;
top: 0;
left: 0;
transform-origin: 0 0 -300px;
transform: translate3d(0, 0, -300px);
backface-visibility: hidden;
}
</style>使用: 向父容器添加css 然后注册组件,在父容器里使用