看不上日全食了,学习CSS3,实现一个日全食的动画特效

看新闻说,今年全球唯一一次日全食将于北京时间4月9日凌晨在北美洲地区上演。看来那边我是去不成了,日全食也看不见了,不过我可以用CSS3实现一个日全食的动画特效。一起来看一下吧。

目录

[1. 实现思路](#1. 实现思路)

[2. 天空的生成已经渐变](#2. 天空的生成已经渐变)

[3 太阳的生成以及渐变](#3 太阳的生成以及渐变)

[4 月亮的生成以及渐变](#4 月亮的生成以及渐变)

[5 完整源代码](#5 完整源代码)

[6 结尾](#6 结尾)


1. 实现思路

日全食涉及到太阳的遮挡,所以天空要有明暗的变化;

火红的太阳,在被遮挡的过程中,要有明亮,混白,一直到被月亮遮住,直到漏出一圈的白边;

月亮是移动的,因为到了中间,太阳因为过于的发白,月亮就会变黑;

一直到月亮离开,天空和太阳恢复正常。

2. 天空的生成已经渐变

天空我们首先设置DIV的背景色为 skyblue,然后通过animation动画,从天蓝色往黑色渐变,因为要在网页主题内显示日全食过程的大小,不可能整个网页都做成日全食,所以设定一个宽高即可。代码如下:

css 复制代码
<!-- HTML部分 -->
<body>

<div class="sky">
	
</div>

</body>

// css3部分
body{
	animation:sky 5s linear infinite; /*循环,动画执行方法*/
	background: skyblue;
}

@-webkit-keyframes sky{
	from {
		background: skyblue;
	}
	50%{
		background: black;
	}
    to {
        background: skyblue;
    }
}


.sky{
	position: relative;
	margin: 50% auto;
	width: 50vmin;
	height: 50vmin;
}

3 太阳的生成以及渐变

太阳在日全食过程中,主要的变化就是由背景色gold这个金黄色向白色的转变,同时采用keyframes和animation的配合,改变其光晕效果,代码如下:

css 复制代码
<!-- HTML部分 -->
<div class="sun"></div>

// css部分
.sun,.moon{
	position: absolute;
	top: 0;
	left: 0;
	right: 0px;
	bottom: 0px;
	background: rgba(255,0,0,0.5);
	border-radius: 50%;
}

.sun {
	background: gold;
	-webkit-animation:sun 5s linear infinite;
}

效果改变如下图:

4 月亮的生成以及渐变

在整个动画中,月亮的出现、移动、以及渐变最关重要。这里采用transform与属性值translateX的配合,使月亮有一个移动的过程。同时,月亮的渐变要从月光白到黑色的渐变,因为在日全食的最中央,月亮应该是一个黑色的,他被太阳光遮盖了。代码如下:

css 复制代码
<!-- HTML部分 -->
<div class="moon"></div>

// CSS3部分
.moon{
    -webkit-animation:moon 5s linear infinite;
}

@-webkit-keyframes moon{
    from{
        -webkit-transform:translateX(-110%);
        -webkit-transform:translateX(-110%);
        background: lightgray;
    }
    50%{
        background: black;
    }
		to{
			-webkit-transform:translateX(110%);
			-webkit-transform:translateX(110%);
			background: lightgray;
		}
	}

效果如下图

5 完整源代码

css 复制代码
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>css3日全食动画特效</title>

<style type="text/css">
	body{
		-webkit-animation:sky 5s linear infinite;
		background: skyblue;
	}

	@-webkit-keyframes sky{
		from{
			background: skyblue;
		}
		50%{
			background: black;
		}
        to{
			background: skyblue;
		}
	}


	.sky{
		position: relative;
		margin: 50% auto;
		width: 50vmin;
		height: 50vmin;
	}

	.sun,.moon{
				position: absolute;
				top: 0;
				left: 0;
				right: 0px;
				bottom: 0px;
				background: rgba(255,0,0,0.5);
				border-radius: 50%;
	}

	.sun {
		background: gold;
		-webkit-animation:sun 5s linear infinite;
	}

	@-webkit-keyframes sun{
		50%{
			background: white;
			box-shadow: 0 0 5em white, 0 0 5em white, 0 0 5em white, 0 0 5em white;
		}
	}

	.moon{
		-webkit-animation:moon 5s linear infinite;
	}

	@-webkit-keyframes moon{
		from{
			-webkit-transform:translateX(-110%);
			-webkit-transform:translateX(-110%);
			background: lightgray;
		}
		50%{
			background: black;
		}
		to{
			-webkit-transform:translateX(110%);
			-webkit-transform:translateX(110%);
			background: lightgray;
		}
	}
</style>

</head>
<body>

<div class="sky">
	<div class="sun"></div>
	<div class="moon"></div>
</div>

</body>
</html>

6 结尾

最近很多朋友说面试忧愁,焦虑万分,要么简历投不出去,要么面试官瞎问,要么自己感觉答的还行,但没有结果,所以我为大家准备了优化简历的礼物,请看:打造优秀的开发求职简历,还准备了最新前端面试题大全,又全又卷啊,有解析,有答案,有举一反三,有刷题思考,请看:WEB前端最新面试题 - 又全又卷,希望对你有帮助。

相关推荐
北极无雪17 分钟前
Spring源码学习(拓展篇):SpringMVC中的异常处理
java·开发语言·数据库·学习·spring·servlet
大前端爱好者44 分钟前
React 19 新特性详解
前端
问道飞鱼1 小时前
每日学习一个数据结构-默克尔树(Merkle Tree)
数据结构·学习·默克尔树
随云6321 小时前
WebGL编程指南之着色器语言GLSL ES(入门GLSL ES这篇就够了)
前端·webgl
William_Edmund1 小时前
Python 语言学习——应用1.2 数字图像处理(第二节,变换)
人工智能·学习·计算机视觉
寻找09之夏2 小时前
【Vue3实战】:用导航守卫拦截未保存的编辑,提升用户体验
前端·vue.js
weixin_514548892 小时前
机器学习课程学习周报十五
人工智能·学习·机器学习
Themberfue2 小时前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
AIGC破防黑吗喽2 小时前
Midjourney零基础学习
人工智能·gpt·学习·ai·stable diffusion·midjourney·ai绘画
LearnTech_1232 小时前
【学习笔记】手写一个简单的 Spring MVC
笔记·学习·spring·spring mvc