有时候觉得学习有些单调,枯燥,就想让画面自己动起来,CSS和JS稍微组合一下,画面就来了,感觉还不错.

           主要是运用 CSS的Box-shaow属性,打造月亮周围的小星星.然后JS输出星星,根据条件让它们自己慢慢飘动.

          效果图如下

以下是整个代码的具体实现:

<style>

.head{

width: 100%;

height: 500px;

background:radial-gradient(rgba(0, 0, 0, 0.979),rgba(0, 0, 0, 0.973));

}

.moon{

width: 180px;

height: 180px;

border-radius: 50%;

background-color:white;

position: absolute;

margin: 50px 200px;

box-shadow: 3px 3px 3px 3px rgba(255, 255, 255, 0.986);

transform: rotate(-5deg);

animation:one 5s ease-in-out infinite;

}

.moon div{

width: 170px;

height: 170px;

border-radius: 50%;

background-color: black;

margin-left: 60px;

}

.star div{

background-color: rgba(255, 255, 255, 0.993);

width: 5px;

height: 5px;

border-radius: 50%;

box-shadow: 5px 5px 5px solid white;

}

.starry{

position:absolute;

top: 15%;

left: 20%;

transform: translate(-50%, -50%);

height: 4px;

width: 4px;

border-radius:50%;

box-shadow:

#FFFFFF -26px 77px 0 -1px,

rgba(255,255,255,0.1) -36px 59px 0 -1px,

rgba(255,255,255,0.1) -28px 89px 0 -1px,

#FFFFFF -35px 20px 0 -1px,

#FFFFFF 14px 100px,

rgba(255,255,255,0.1) 41px 60px,

#FFFFFF 34px 39px,

rgba(255,255,255,0.1) 14px 45px 0 -1px,

#FFFFFF 64px 12px 0 -1px,

rgba(255,255,255,0.1) 32px 96px 0 -1px,

#FFFFFF 64px 71px,

rgba(255,255,255,0.1) 60px 18px 0 -1px,

#FFFFFF 34px 9px,

rgba(255,255,255,0.1) -26px 55px 0 -1px;

 

animation: starry_star 5s ease-in-out infinite;

}

.starry2{

position:absolute;

top: 15%;

left: 30%;

transform: translate(-50%, -50%);

height: 4px;

width: 4px;

border-radius:50%;

box-shadow:

#FFFFFF -26px 77px 0 -1px,

rgba(255,255,255,0.1) -36px 59px 0 -1px,

rgba(255,255,255,0.1) -28px 89px 0 -1px,

#FFFFFF -35px 20px 0 -1px,

#FFFFFF 14px 100px,

rgba(255,255,255,0.1) 41px 60px,

#FFFFFF 34px 39px,

rgba(255,255,255,0.1) 14px 45px 0 -1px,

#FFFFFF 64px 12px 0 -1px,

rgba(255,255,255,0.1) 32px 96px 0 -1px,

#FFFFFF 64px 71px,

rgba(255,255,255,0.1) 60px 18px 0 -1px,

#FFFFFF 34px 9px,

rgba(255,255,255,0.1) -26px 55px 0 -1px;

 

animation: starry_star 5s ease-in-out infinite;

}

.starry3{

position:absolute;

top: 15%;

left: 10%;

transform: translate(-50%, -50%);

height: 4px;

width: 4px;

border-radius:50%;

box-shadow:

#FFFFFF -26px 77px 0 -1px,

rgba(255,255,255,0.1) -36px 59px 0 -1px,

rgba(255,255,255,0.1) -28px 89px 0 -1px,

#FFFFFF -35px 20px 0 -1px,

#FFFFFF 14px 100px,

rgba(255,255,255,0.1) 41px 60px,

#FFFFFF 34px 39px,

rgba(255,255,255,0.1) 14px 45px 0 -1px,

#FFFFFF 64px 12px 0 -1px,

rgba(255,255,255,0.1) 32px 96px 0 -1px,

#FFFFFF 64px 71px,

rgba(255,255,255,0.1) 60px 18px 0 -1px,

#FFFFFF 34px 9px,

rgba(255,255,255,0.1) -26px 55px 0 -1px;

 

animation: starry_star 5s ease-in-out infinite;

}

@keyframes starry_star{

50%{

box-shadow:

rgba(255,255,255,0.1) -26px 77px 0 -1px,

#FFF -36px 59px 0 -1px,

#FFF -28px 89px 0 -1px,

rgba(255,255,255,0.1) -35px 20px 0 -1px,

rgba(255,255,255,0.1) 14px 100px,

#FFF 41px 60px,

rgba(255,255,255,0.1) 34px 39px,

#FFF 14px 45px 0 -1px,

rgba(255,255,255,0.1) 64px 12px 0 -1px,

#FFF 32px 96px 0 -1px,

rgba(255,255,255,0.1) 64px 71px,

#FFF 60px 18px 0 -1px,

rgba(255,255,255,0.1) 34px 9px,

#FFF -26px 55px 0 -1px,

rgba(255,255,255,0.1) -26px 77px 0 -1px,

#FFF 60px 18px 0 -1px,

rgba(255,255,255,0.1) 34px 9px,

#FFF -26px 55px 0 -1px,

rgba(255,255,255,0.1) -26px 77px 0 -1px;

}

}

@keyframes one {

50%{transform: rotate(10deg)}

 

}

</style>

 

</head>

<body>

<div class="head">

<div class="moon">

<div></div>

</div>

<div class="starry"></div>

<div class="starry2"></div>

<div class="starry3"></div>

</div>

 

<script>

window.onload=function(){

var s=0;

function all(){

s++;

var head = document.querySelector('.head'), //获取要插入的地方

snow = document.createElement('div'),

numColor = Math.random*1+0.8;

function stars(){ //以下函数是返回星星随机飘动的各种值,比如maginleft,marginTop,大小,透明度等等

return Math.floor(Math.random()*98);

}

function newTop(){

return (Math.random()*300-50);

}

function move(){

return (Math.random()*1333);

}

function big(){

return Math.random()*3;

}

function ran(){

return (Math.random()*1+0.5) ;

}

function num(){

return Math.floor(Math.random()*2+3);

}

function numOpac(){

return parseFloat(Math.random()*1+0.3) ;

}

var top = function(){

return Math.floor(Math.random()*400+20);

}

var left = function(){

return Math.floor(Math.random()*1333);

}

snow.setAttribute('class','star'); //为插入的星星建立一个特性class,以便后面好取到操作DOM;

snow.style.cssText='width:'+num()+'px;height:'+num()+'px;margin-left:'+left()+'px;margin-top:'+top()+'px;position:absolute;border-radius:50%;transition:2s;opacity:'+ran()+'';

head.appendChild(snow); //插入星星到页面中,通过setTimeout 反复调用.

clear = setTimeout(all,100);

if(s == 99){ //当插入数量达到要求,便取消setTimeout,接下来就是简单的操作星星的位置.

var star = document.querySelectorAll('.star');

function stars(){

return Math.floor(Math.random()*98);

}

clearTimeout(clear);

function change(){

star[stars()].style.opacity=ran();

star[stars()].style.marginLeft=move()+'px';

star[stars()].style.transition='180s';

star[stars()].style.marginTop=newTop()+'px';

setTimeout(change,300); //最后通过setTImeout让星星们和月亮慢慢的移动,交相辉映,虽然效果没有做到很棒,但是思路清晰,至于样式,自己想怎么玩就怎么玩.

}

change();

}

}

all();

}

 

</script>