学习CSS3实现夜空UFO特效,带着心上人去太空旅行

news2024/11/30 10:57:10

记得那是在一个夜晚,我下班比较晚,行走在空荡的街道,不由想起了何润东“直到整条街上剩我和路灯”的歌声,就这么往前走着。我走哇走,走哇走,突然,一道光划过,你猜我看见了什么?对,就是UFO,但是他速度很快,他迅速落下来,说要带我去火星,我说我不去,他说去吧,我说我不去,然后,他就走了。由于UFO来也匆匆去也匆匆,我记得不是很清楚了,于是凭借着记忆用CSS3实现一个夜空UFO的效果。

 

目录

实现思路

头部区域的实现

UFO锅盖部分的实现

UFO探照灯的实现

UFO光柱的实现

底部被照区域的实现

完整源代码


实现思路

通过实现图纸发现,整个UFO是有个倾斜角度的,所以会有一个 transform 和 rotate 的属性组合;

头部是一个半球形,除了实现圆形的border-radius之外,还要通过 box-shadow 以及 linear-gradient 填充其颜色;

身体部分类似,但需要设定的值会有所不同,linear-gradient 的属性值比较丰富,可以拿到代码自行修改其属性值查看效果;

一直到手电筒,底部被照射区域,都在控制 widthheight 的比例,以及 border-radius 的 属性值的控制上,同时这里比较应该注意的是 阴影部分的实现

头部区域的实现

头部区域因为已经在整体的DIV进行了角度倾斜,这里重要的是注意 linear-gradient 色值的变化过程,border-radius 的圆角控制比例,以及如果想要一个阴影效果,box-shadow 进行右半部分的阴影控制,CSS3代码如下

.head {
    background: linear-gradient(to right, white, white 5%, var(--color-ship-head) 50%, var(--color-ship-head));
    border-radius: 50% 50% 50% 50% / 75% 75% 25% 25%;
    box-shadow: inset rgba(0, 0, 0, 0.2) -2vmin -1vmin 2vmin;
    height: calc(var(--ship-size) / 1.5);
    margin-bottom: calc(var(--ship-size) * -0.25);
    position: relative;
    width: var(--ship-size);
    z-index: 4;
}

 

UFO锅盖部分的实现

锅盖部分重点仍然是色值 linear-gradient 的变化填充,border-radius的属性值的控制,与头部不同的是,宽高的设置,和头部会有一个层级关系,也就是z-index的层级关系,CSS3代码如下

.body {
    background: linear-gradient(to right, var(--color-ship-body-lite), var(--color-ship-body-lite) 5%, var(--color-ship-body) 45%, var(--color-ship-body));
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
    box-shadow: inset rgba(0, 0, 0, 0.25) -4vmin -1vmin 3vmin;
    height: calc(var(--ship-size) / 2);
    width: calc(var(--ship-size) * 2);
    z-index: 3;
}

 其实到这一步,我们已经可以控制头部实现很多东西了,比如林教头的帽子,厨房的锅盖等等

UFO探照灯的实现

我们会发现探照灯部分,除了色值填充上,和头部就是翻转过来的效果,以及和锅盖部分的层级控制,margin-top的控制,使其停留在那个位置的,CSS3代码如下

.base {
    background: linear-gradient(to right, white, white 5%, var(--color-ship-base) 50%, var(--color-ship-base));
    border-radius: 100%;
    box-shadow: inset rgba(0, 0, 0, 0.2) -2vmin -1vmin 2vmin, var(--color-main-bg) 0 0 0 0.5vmin;
    height: calc(var(--ship-size) / 1.5);
    margin-top: calc(var(--ship-size) * -0.55);
    width: calc(var(--ship-size) / 1.5);
    z-index: 2;
}

 其实到这一步,飞碟的样子已经出来了,对吧,稍微改一改部分margin-top的值,改一改width和height,基本就是个飞碟了。

UFO光柱的实现

光柱并非那种一个长方形div产生出来的比较垂直的光柱,不光使用了色值填充,box-shadow的阴影控制,为了展示出手电筒那种发散的效果,其实整个长方形的width值比较大,但是通过clip-path裁减属性与 polygon 属性值的控制,使其达到发散光柱的效果,CSS3代码如下

.beam {
    background: linear-gradient(to bottom, var(--color-beam), transparent);
    box-shadow: inset rgba(0, 0, 0, 0.2) -8vmin -2vmin 3vmin;
    -webkit-clip-path: polygon(40% 0, 60% 0, 100% 100%, 0% 100%);
            clip-path: polygon(40% 0, 60% 0, 100% 100%, 0% 100%);
    height: calc(var(--ship-size) * 2);
    margin-top: calc(var(--ship-size) * -0.15);
    position: relative;
    width: var(--ship-size);
    z-index: 1;
}

 通过这个光柱的实现,还可以实现很多汽车晚上行走往出开前车灯的效果,可以实现路灯照亮的效果,还是很不错的

底部被照区域的实现

底部区域就比较简单了,就是通过border-radius的设置,在控制width和height控制,达到和上一步光柱底部的宽高稍微大一点就可以。如果你想实现的再逼真一点,可以放个小动物,做一个小动物的阴影,效果会很不错的。

完整源代码

感兴趣的小伙伴可以直接拿到下面的源代码,复制到自己的HTML文档里,然后保存,直接浏览器打开即可,代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>纯CSS3的UFO特效</title>

<style>
  :root {
    --color-beam: #B2FF8D;
    --color-main-bg: #18181B;
    --color-ship-head: #77CCF5;
    --color-ship-body: #09406C;
    --color-ship-body-lite: #236FAC;
    --color-ship-base: #F8F1DD;
    --ship-size: 25vmin;
    --ship-rotate: 15deg;
  }

  * {
    box-sizing: border-box;
  }

  html, body {
    height: 100%;
  }

  body {
    background-color: var(--color-main-bg);
    display: grid;
    place-items: center;
  }

  .ufo {
    display: flex;
    flex-direction: column;
    align-items: center;
    -webkit-transform: rotate(var(--ship-rotate));
            transform: rotate(var(--ship-rotate));
  }

  .ufo .head {
    background: linear-gradient(to right, white, white 5%, var(--color-ship-head) 50%, var(--color-ship-head));
    border-radius: 50% 50% 50% 50% / 75% 75% 25% 25%;
    box-shadow: inset rgba(0, 0, 0, 0.2) -2vmin -1vmin 2vmin;
    height: calc(var(--ship-size) / 1.5);
    margin-bottom: calc(var(--ship-size) * -0.25);
    position: relative;
    width: var(--ship-size);
    z-index: 4;
  }

  .ufo .body {
    background: linear-gradient(to right, var(--color-ship-body-lite), var(--color-ship-body-lite) 5%, var(--color-ship-body) 45%, var(--color-ship-body));
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
    box-shadow: inset rgba(0, 0, 0, 0.25) -4vmin -1vmin 3vmin;
    height: calc(var(--ship-size) / 2);
    width: calc(var(--ship-size) * 2);
    z-index: 3;
  }

  .ufo .base {
    background: linear-gradient(to right, white, white 5%, var(--color-ship-base) 50%, var(--color-ship-base));
    border-radius: 100%;
    box-shadow: inset rgba(0, 0, 0, 0.2) -2vmin -1vmin 2vmin, var(--color-main-bg) 0 0 0 0.5vmin;
    height: calc(var(--ship-size) / 1.5);
    margin-top: calc(var(--ship-size) * -0.55);
    width: calc(var(--ship-size) / 1.5);
    z-index: 2;
  }

  .ufo .beam {
    background: linear-gradient(to bottom, var(--color-beam), transparent);
    box-shadow: inset rgba(0, 0, 0, 0.2) -8vmin -2vmin 3vmin;
    -webkit-clip-path: polygon(40% 0, 60% 0, 100% 100%, 0% 100%);
            clip-path: polygon(40% 0, 60% 0, 100% 100%, 0% 100%);
    height: calc(var(--ship-size) * 2);
    margin-top: calc(var(--ship-size) * -0.15);
    position: relative;
    width: var(--ship-size);
    z-index: 1;
  }

  .ufo .beam-bottom {
    background-color: var(--color-beam);
    border-radius: 100%;
    box-shadow: inset rgba(0, 0, 0, 0.2) -2vmin -2vmin 2vmin;
    height: calc(var(--ship-size) / 4);
    margin-top: calc(var(--ship-size) / -8);
    width: var(--ship-size);
    z-index: 1;
    -webkit-transform: rotate(calc(var(--ship-rotate) * -1));
            transform: rotate(calc(var(--ship-rotate) * -1));
  }
</style>

</head>
<body>

<div class="ufo">
  <div class="head"></div>
  <div class="body"></div>
  <div class="base"></div>
  <div class="beam"></div>
  <div class="beam-bottom"></div>
</div>

</body></html>

好啦,这就是夜空UFO的CSS3特效,读到这里,你是否愿意关注狗哥,我们一起学习,一起进步呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNN图神经网络

文章目录 GNN图神经网络的元素消息传递方式 GCN消息传递方式 GAT消息传递机制 GNN 图神经网络的元素 节点&#xff0c;邻接矩阵 为什么要计算多层 邻居的邻居&#xff0c;融合多阶邻居特征 消息传递方式 图神经网络是一个相对宽泛的概念&#xff0c;本质是每个节点embeddi…

【Linux】Linux下安装Docker(图文解说详细版)

文章目录 一、前言二、Docker的三要素Docker镜像Docker仓库Docker容器 三、Docker的安装1. 确定Linux版本2.安装Docker3.测试是否安装成功4.配置下载docker镜像的仓库5.测试HelloWorld镜像 一、前言 Docker是近年来新兴的虚拟化工具&#xff0c;它可以和虚拟机一样实现资源和系…

【教程】用 HTML JavaScript 制作 2.5D 迷宫游戏地图

我写了一个能够随机生成迷宫的算法&#xff0c;得到了用户很好的反响&#xff0c;对大家有所帮助。我现在想将这个迷宫以2.5D游戏地图的方式呈现出来。最初我考虑使用CSS来实现这个目标&#xff0c;但效果并不太理想&#xff0c;因为我无法只将它渲染成背景&#xff0c;而不对整…

洛谷B2096 直方图

直方图 题目描述 给定一个非负整数数组&#xff0c;统计里面每一个数的出现次数。我们只统计到数组里最大的数。 假设 F m a x &#xff08; F m a x ≤ 100000 &#xff09; Fmax&#xff08;Fmax \le 100000&#xff09; Fmax&#xff08;Fmax≤100000&#xff09;是数组…

scratch绘制直尺 中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析2023年3月

目录 scratch绘制直尺 一、题目要求 1、准备工作 2、功能实现 二、案例分析

NSSCTF之Misc篇刷题记录⑨

NSSCTF之Misc篇刷题记录⑨ [GKCTF 2021]签到[NISACTF 2022]bmpnumber[领航杯江苏省赛 2021]签到题[鹤城杯 2021]Misc2[鹤城杯 2021]A_MISC[GXYCTF 2019]CheckIn[HDCTF 2023]hardMisc[NSSRound#1 Basic]cut_into_thirds[闽盾杯 2021]Modbus的秘密[NISACTF 2022]神秘数字[INSHack…

asp.net+C#超市商品进销存管理系统

本超市商品管理系统主要超市内部提供服务&#xff0c;系统分为管理员员工两部分。 本研究课题重点主要包括了下面几大模块&#xff1a;管用户登录&#xff0c;员工管理&#xff0c;商品管理&#xff0c;进货管理&#xff0c;销售管理&#xff0c;供应商信息&#xff0c;会员信…

2023年6月DAMA-CDGP数据治理专家认证考试,火热报名中

目前6月18日CDGA&CDGP考试目前开放的城市有&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安、武汉、天津。 新增了武汉、天津这2个城市。另外合肥、厦门、长春等地区还在接近开考人数中&#xff0c;打算参加6月考试的朋友们可以抓紧时间…

前端HTML学习笔记(一)

1、基础知识 网页概述&#xff1a;1、HTML概念&#xff1a;HTML (Hyper Text Markup Language)中文译为超文本标记语言专门用于网页开发的语言&#xff0c;主要通过HTML标签对网页中的文本、图片、音频、视频等内容进行描述。2、网页通常由文字、图片、音频、视频、超链接等部…

Julia入门-0、在Windows下安装Julia

文章目录 0、前言1、相关网站2、Windows 系统下安装Julia3、Julia 交互式命令窗口 0、前言 Julia 是一个面向科学计算的高性能动态高级程序设计语言。 Julia 最初是为了满足高性能数值分析和计算科学的需要而设计的&#xff0c;不需要解释器&#xff0c;速度快。 1、相关网站…

C++类与对象Plus

我们之前讲的都是类与对象的基础&#xff0c;以及类中的几个默认函数等&#xff0c;今天我们就讲一下类与对象的其他东西 初始化列表 在我们的默认构造函数的时候&#xff0c;我们在初始化的时候我们都是在构造函数中完成我们的初始化任务 我们现在来看一个类 我们看一下我们…

基于 LSTM 进行多类文本分类( TensorFlow 2.0)

NLP 的许多创新是如何将上下文添加到词向量中。一种常见的方法是使用循环神经网络。以下是循环神经网络的概念&#xff1a; 他们利用顺序信息。他们可以捕捉到到目前为止已经计算过的内容&#xff0c;即&#xff1a;我最后说的内容会影响我接下来要说的内容。RNNs 是文本和语音…

mac下删除python3.7,并将版本更新到3.9

如何卸载python3.7 有些小伙伴想直接从3.7升级到3.9 那恐怕是不行的&#xff0c;python3.7的库占的空间不少&#xff0c;所以首先我们应该来删除它. python安装后的路径分类 在删除之前需要先了解&#xff1a;python安装后有几类路径需要我们去查看删除 python存储库路径&am…

【分组码系列】线性分组码的网格图和维特比译码

线性分组码的网格图 由于码字的比特位是统计独立的,所以编码过程可以利用有限状态机来描述,它能精确地确定初始和最终状态。可以利用网格图进一步描述编码过程[36],采用维特比算法进行最大似然译码. 在GF(2)上定义线性分组码(n,k)。相应的(n-k)Xn维校验阵可以写成 令码字为系…

TensorFlow vs PyTorch:哪一个更适合您的深度学习项目?

在深度学习领域中&#xff0c;TensorFlow 和 PyTorch 都是非常流行的框架。这两个框架都提供了用于开发神经网络模型的工具和库&#xff0c;但它们在设计和实现上有很大的差异。在本文中&#xff0c;我们将比较 TensorFlow 和 PyTorch&#xff0c;并讨论哪个框架更适合您的深度…

队列、栈专题

队列、栈专题 LeetCode 20. 有效的括号解题思路代码实现 LeetCode 921. 使括号有效的最少添加解题思路代码实现 LeetCode 1541. 平衡括号字符串的最少插入次数解题思路代码实现 总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff…

icevision环境安装

Installation - IceVision # 1. git clone 代码# pip 换源&#xff1a; ~/.pip/pip.conf 隐藏文件[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-hostmirrors.aliyun.compip install -e .[all,dev]ImportError: cannot import name Multi…

chatgpt-4它的未来是什么?该如何应用起来?

在当今快节奏的数字通信世界中&#xff0c;ChatGPT已成为一个强大的在线聊天平台&#xff0c;改变了人们互动和沟通的方式。凭借其先进的AI功能、用户友好的界面和创新技术&#xff0c;ChatGPT已成为个人和企业的热门选择。 然而&#xff0c;ChatGPT的未来有望更加激动人心和具…

VSCode的安装以及相关插件配置

VSCode是什么&#xff1f; VSCode严格来说&#xff0c;也是一款编辑器&#xff0c;强大之处在于集成了各种各样的插件。至此往后&#xff0c;将使用VSCode来取代vim。话不多说&#xff0c;步骤如下&#xff1a; 安装步骤 1、VSCode的下载 https://vscode.cdn.azure.cn/stabl…

NSSCTF (3)

[GDOUCTF 2023]hate eat snake 我们打开js源码 很明显这里当score大于60会出flag score = getScore 我们寻找到了getScore方法所在的地方 之后发现他存在于Snake