前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >css圣诞树 立体模型

css圣诞树 立体模型

作者头像
我不是费圆
发布2021-12-30 18:24:44
8120
发布2021-12-30 18:24:44
举报
文章被收录于专栏:鲸鱼动画鲸鱼动画
请添加图片描述
请添加图片描述

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>圣诞树</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
	:root {
		--main-bg: #c2c2c2;
		--trunk-bg-1: #5e2100;
		--trunk-bg-2: #783e00;
		--leaves-bottom-bg-1: #0f980f;
		--leaves-bottom-bg-2: #3fc83f;
		--leaves-middle-bg-1: #1fa81f;
		--leaves-middle-bg-2: #4fd84f;
		--leaves-top-bg-1: #2fb82f;
		--leaves-top-bg-2: #5fe85f;
		--star-bg: #ffdd00;
		--shine-bg: #ffeb69;
		--snow-bg: #f2f2f2;
		--tree-width: 200px;
		--tree-height: 400px;
		--tree-rotate: -15deg;
		--trunk-width: 30px;
		--trunk-height: 400px;
		--trunk-angle: 4.3deg;
		--leaves-translate: 15px;
		--leaves-bottom-width: 100px;
		--leaves-bottom-height: 320px;
		--leaves-bottom-angle: 18.2deg;
		--leaves-middle-width: 80px;
		--leaves-middle-height: 220px;
		--leaves-middle-angle: 21.4deg;
		--leaves-top-width: 60px;
		--leaves-top-height: 140px;
		--leaves-top-angle: 25.5deg;
		--star-size: 20px;
	}

	html, body {
		width: 100%;
		height: 100%;
		padding: 0;
		margin: 0;
		overflow:hidden;
	}

	.ts-3d {
		transform-style: preserve-3d;
	}

	.container {
		background-color: var(--main-bg);
		width: 100%;
		min-height: 100%;
		overflow: hidden;
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.tree {
		width: var(--tree-width);
		height: var(--tree-height);
		position: relative;
		transform-style: preserve-3d;
		transform: rotateX(var(--tree-rotate));
	}

	.trunk,
	.leaves-bottom,
	.leaves-middle,
	.leaves-top {
		position: absolute;
		width: 100%;
		height: 100%;
		top: 0;
		left: 0;
		animation: 10s tree-rotate linear infinite;
	}

	.trunk div {
		border-top: none;
		border-left: solid var(--trunk-width) transparent;
		border-right: solid var(--trunk-width) transparent;
		position: absolute;
		bottom: 0;
		left: calc(50% - var(--trunk-width));
		transform-origin: bottom;
	}

	.trunk div:nth-child(1) {
		border-bottom: solid var(--trunk-height) var(--trunk-bg-1);
		transform: rotateX(var(--trunk-angle)) translateY(2px) translateZ(var(--trunk-width));
	}

	.trunk div:nth-child(2) {
		border-bottom: solid var(--trunk-height) var(--trunk-bg-2);
		transform: rotateY(90deg) rotateX(calc(var(--trunk-angle) * -1)) translateY(2px) translateZ(calc(var(--trunk-width) * -1));
	}

	.trunk div:nth-child(3) {
		border-bottom: solid var(--trunk-height) var(--trunk-bg-1);
		transform: rotateX(calc(var(--trunk-angle) * -1)) translateY(2px) translateZ(calc(var(--trunk-width) * -1));
	}

	.trunk div:nth-child(4) {
		border-bottom: solid var(--trunk-height) var(--trunk-bg-2);
		transform: rotateY(-90deg) rotateX(calc(var(--trunk-angle) * -1)) translateY(2px) translateZ(calc(var(--trunk-width) * -1));
	}

	.leaves-bottom div {
		border-top: none;
		border-left: solid var(--leaves-bottom-width) transparent;
		border-right: solid var(--leaves-bottom-width) transparent;
		position: absolute;
		top: var(--star-size);
		left: calc(50% - var(--leaves-bottom-width));
		transform-origin: bottom;
	}

	.leaves-bottom div:nth-child(1) {
		border-bottom: solid var(--leaves-bottom-height) var(--leaves-bottom-bg-1);
		transform: rotateX(var(--leaves-bottom-angle)) translateY(var(--leaves-translate)) translateZ(var(--leaves-bottom-width));
	}

	.leaves-bottom div:nth-child(2) {
		border-bottom: solid var(--leaves-bottom-height) var(--leaves-bottom-bg-2);
		transform: rotateY(90deg) rotateX(calc(var(--leaves-bottom-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-bottom-width) * -1));
	}

	.leaves-bottom div:nth-child(3) {
		border-bottom: solid var(--leaves-bottom-height) var(--leaves-bottom-bg-1);
		transform: rotateX(calc(var(--leaves-bottom-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-bottom-width) * -1));
	}

	.leaves-bottom div:nth-child(4) {
		border-bottom: solid var(--leaves-bottom-height) var(--leaves-bottom-bg-2);
		transform: rotateY(-90deg) rotateX(calc(var(--leaves-bottom-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-bottom-width) * -1));
	}

	.leaves-middle div {
		border-top: none;
		border-left: solid var(--leaves-middle-width) transparent;
		border-right: solid var(--leaves-middle-width) transparent;
		position: absolute;
		top: var(--star-size);
		left: calc(50% - var(--leaves-middle-width));
		transform-origin: bottom;
	}

	.leaves-middle div:nth-child(1) {
		border-bottom: solid var(--leaves-middle-height) var(--leaves-middle-bg-1);
		transform: rotateX(var(--leaves-middle-angle)) translateY(var(--leaves-translate)) translateZ(var(--leaves-middle-width));
	}

	.leaves-middle div:nth-child(2) {
		border-bottom: solid var(--leaves-middle-height) var(--leaves-middle-bg-2);
		transform: rotateY(90deg) rotateX(calc(var(--leaves-middle-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-middle-width) * -1));
	}

	.leaves-middle div:nth-child(3) {
		border-bottom: solid var(--leaves-middle-height) var(--leaves-middle-bg-1);
		transform: rotateX(calc(var(--leaves-middle-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-middle-width) * -1));
	}

	.leaves-middle div:nth-child(4) {
		border-bottom: solid var(--leaves-middle-height) var(--leaves-middle-bg-2);
		transform: rotateY(-90deg) rotateX(calc(var(--leaves-middle-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-middle-width) * -1));
	}

	.leaves-top div {
		border-top: none;
		border-left: solid var(--leaves-top-width) transparent;
		border-right: solid var(--leaves-top-width) transparent;
		position: absolute;
		top: var(--star-size);
		left: calc(50% - var(--leaves-top-width));
		transform-origin: bottom;
	}

	.leaves-top div:nth-child(1) {
		border-bottom: solid var(--leaves-top-height) var(--leaves-top-bg-1);
		transform: rotateX(var(--leaves-top-angle)) translateY(var(--leaves-translate)) translateZ(var(--leaves-top-width));
	}

	.leaves-top div:nth-child(2) {
		border-bottom: solid var(--leaves-top-height) var(--leaves-top-bg-2);
		transform: rotateY(90deg) rotateX(calc(var(--leaves-top-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-top-width) * -1));
	}

	.leaves-top div:nth-child(3) {
		border-bottom: solid var(--leaves-top-height) var(--leaves-top-bg-1);
		transform: rotateX(calc(var(--leaves-top-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-top-width) * -1));
	}

	.leaves-top div:nth-child(4) {
		border-bottom: solid var(--leaves-top-height) var(--leaves-top-bg-2);
		transform: rotateY(-90deg) rotateX(calc(var(--leaves-top-angle) * -1)) translateY(var(--leaves-translate)) translateZ(calc(var(--leaves-top-width) * -1));
	}

	@keyframes tree-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg); }
	}

	.shadow {
		background-color: rgba(0, 0, 0, 0.8);
		width: calc(var(--leaves-bottom-width) * 2);
		height: calc(var(--leaves-bottom-width) * 2);
		filter: blur(calc(var(--leaves-bottom-width) / 2));
		position: absolute;
		bottom: calc(var(--leaves-bottom-width) * -1);
		left: calc(50% - var(--leaves-bottom-width));
		transform: rotateX(90deg) translateX(-50%);
		animation: 10s shadow-rotate linear infinite;
	}

	@keyframes shadow-rotate {
		0%        { transform: rotateX(-90deg) rotateZ(0deg); }
		99.99999% { transform: rotateX(-90deg) rotateZ(359deg); }
	}

	.star-1 {
		transform: translateZ(-2px);
		animation: 10s star-1-rotate linear infinite;
	}

	@keyframes star-1-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg) translateZ(-2px); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg) translateZ(-2px); }
	}

	.star-2 {
		transform: translateZ(-1px);
		animation: 10s star-2-rotate linear infinite;
	}

	@keyframes star-2-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg) translateZ(-1px); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg) translateZ(-1px); }
	}

	.star-3 {
		transform: translateZ(0px);
		animation: 10s star-3-rotate linear infinite;
	}

	@keyframes star-3-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg) translateZ(0px); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg) translateZ(0px); }
	}

	.star-4 {
		transform: translateZ(1px);
		animation: 10s star-4-rotate linear infinite;
	}

	@keyframes star-4-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg) translateZ(1px); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg) translateZ(1px); }
	}

	.star-5 {
		transform: translateZ(2px);
		animation: 10s star-5-rotate linear infinite;
	}

	@keyframes star-5-rotate {
		0%        { transform: rotateX(0deg) rotateY(0deg) translateZ(2px); }
		99.99999% { transform: rotateX(0deg) rotateY(359deg) translateZ(2px); }
	}

	.star,
	.star:before,
	.star:after {
		content: '';
		height: 0;
		width: 0;
		border-top: solid 30px var(--star-bg);
		border-left: solid 45px transparent;
		border-right: solid 45px transparent;
		position: absolute;
		top: 0;
		left: calc(50% - 45px);
	}

	.star:before {
		transform: rotate(72deg);
		top: -33px;
		left: -46px;
	}

	.star:after {
		transform: rotate(287deg);
		top: -33px;
		left: -44px;
	}

	.shine {
		background: var(--shine-bg);
		height: 90px;
		width: 90px;
		position: absolute;
		top: -45px;
		left: calc(50% - 45px);
		border-radius: 50%;
		transform: translateZ(40px);
		filter: blur(20px);
		opacity: 0.6;
		animation: 5s shine linear infinite;
	}

	@keyframes shine {
		0%   { transform: scale(1) translateZ(40px); }
		50%  { transform: scale(1.5) translateZ(40px); }
		100% { transform: scale(1) translateZ(40px); }
	}

	.snow-container {
		width: 100%;
		height: 100%;
		position: absolute;
	}

	.snow {
		position: absolute;
	}

	.snow:before {
		content: '';
		background-color: var(--snow-bg);
		width: 100%;
		height: 100%;
		position: absolute;
		border-radius: 50%;
	}

	.snow-y-1:before {
		animation: 8s snow-y-1 ease-in infinite, 8s snow-y-0 linear infinite;
	}

	.snow-y-2:before {
		animation: 6s snow-y-2 ease-in infinite, 6s snow-y-0 linear infinite;
	}

	.snow-y-3:before {
		animation: 4s snow-y-2 ease-in infinite, 4s snow-y-0 linear infinite;
	}

	.snow-1 {
		width: 20px;
		height: 20px;
		top: calc(50% - 250px);
		left: calc(50% - 10px);
		animation: 1s snow-x linear infinite;
	}

	.snow-2 {
		width: 15px;
		height: 15px;
		top: calc(50% - 300px);
		left: calc(50% - 30px);
		animation: 0.8s snow-x linear infinite 0.1s;
	}

	.snow-3 {
		width: 10px;
		height: 10px;
		top: calc(50% - 400px);
		left: calc(50% + 60px);
		animation: 0.6s snow-x linear infinite 0.8s;
	}

	.snow-4 {
		width: 25px;
		height: 25px;
		top: calc(50% - 200px);
		left: calc(50% + 50px);
		animation: 0.5s snow-x linear infinite 0.5s;
	}

	.snow-5 {
		width: 18px;
		height: 18px;
		top: calc(50% - 200px);
		left: calc(50% - 50px);
		animation: 0.5s snow-x linear infinite 0.5s;
	}

	.snow-6 {
		width: 12px;
		height: 12px;
		top: calc(50% - 150px);
		left: calc(50% - 120px);
		animation: 0.8s snow-x linear infinite 0.5s;
	}

	.snow-7 {
		width: 20px;
		height: 20px;
		top: calc(50% - 150px);
		left: calc(50% + 75px);
		animation: 1s snow-x linear infinite 0.6s;
	}

	.snow-8 {
		width: 22px;
		height: 22px;
		top: calc(50% - 10px);
		left: calc(50% - 30px);
		animation: 1s snow-x linear infinite 0.8s;
	}

	.snow-9 {
		width: 8px;
		height: 8px;
		top: calc(50% - 250px);
		left: calc(50% - 30px);
		animation: 1s snow-x linear infinite 0.8s;
	}

	.snow-10 {
		width: 13px;
		height: 13px;
		top: calc(50% - 250px);
		left: calc(50% - 100px);
		animation: 1s snow-x linear infinite 0.8s;
	}

	@keyframes snow-x {
		0%   { transform: translateX(0px); }
		25%  { transform: translateX(5px); }
		50%  { transform: translateX(0px); }
		75%  { transform: translateX(-5px); }
		100% { transform: translateX(0px); }
	}

	@keyframes snow-y-0 {
		0%   { opacity: 1; }
		60%  { opacity: 1; }
		100% { opacity: 0; }
	}

	@keyframes snow-y-1 {
		0%        { transform: translateY(0px); }
		99.99999% { transform: translateY(300px); }
		100%      { transform: translateY(0px); }
	}

	@keyframes snow-y-2 {
		0%        { transform: translateY(0px); }
		99.99999% { transform: translateY(400px); }
		100%      { transform: translateY(0px); }
	}

	@keyframes snow-y-3 {
		0%        { transform: translateY(0px); }
		99.99999% { transform: translateY(500px); }
		100%      { transform: translateY(0px); }
	}
</style>
</head>
<body>
<div class="container">
	<div class="tree">
		<div class="shadow ts-3d"></div>
		<div class="trunk ts-3d">
			<div></div>
			<div></div>
			<div></div>
			<div></div>
		</div>
		<div class="leaves-bottom ts-3d">
			<div></div>
			<div></div>
			<div></div>
			<div></div>
		</div>
		<div class="leaves-middle ts-3d">
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
		</div>
		<div class="leaves-top ts-3d">
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
			<div class="ts-3d"></div>
		</div>
		<div class="star star-1 ts-3d"></div>
		<div class="star star-2 ts-3d"></div>
		<div class="star star-3 ts-3d"></div>
		<div class="star star-4 ts-3d"></div>
		<div class="star star-5 ts-3d"></div>
		<div class="shine ts-3d"></div>
	</div>
	<div class="snow-container">
		<div class="snow snow-1 snow-y-1"></div>
		<div class="snow snow-2 snow-y-2"></div>
		<div class="snow snow-3 snow-y-3"></div>
		<div class="snow snow-4 snow-y-3"></div>
		<div class="snow snow-5 snow-y-2"></div>
		<div class="snow snow-6 snow-y-1"></div>
		<div class="snow snow-7 snow-y-1"></div>
		<div class="snow snow-8 snow-y-2"></div>
		<div class="snow snow-9 snow-y-3"></div>
		<div class="snow snow-10 snow-y-3"></div>
	</div>
</div>
</body>
</html>

  前端的学习不是一蹴而就,不积跬步无以至千里,不积小流无以成江海。持续不断的努力才能让你我有所收获,专业的知识还得到机构去学习,培训机构的设立有其存在的必然性,你钱花对了吗?

  不辜负每一份真情,不嘲笑每一个正在努力的人,力所能及的对别人施以援手,每天都要强化自己,洗去铅华才能绽放光芒。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档