纯CSS画浮动卡通蓝天白云草坪动画效果

news2024/12/27 13:53:27

在这里插入图片描述

文章目录

    • 效果展示
  • 背景效果实现
    • 效果展示
    • HTML结构
    • CSS样式
  • 云效果实现
    • 效果展示
    • HTML结构
    • CSS样式
  • 草效果实现
    • 单颗小草
      • 效果展示
      • HTML结构
      • CSS样式
    • 组合小草
      • 效果展示
      • HTML结构
      • CSS样式
    • 完整代码


在网页设计中,添加动态元素如浮动云朵可以为用户带来更加生动和自然的体验。虽然HTML和CSS主要用于构建和样式化网页内容,但仍然可以通过一些创意和技巧,模拟出类似云朵漂浮的动画效果。

效果展示

在这里插入图片描述

背景效果实现

效果展示

在这里插入图片描述

HTML结构

直接使用的body作为整个内容的大背景

  <body>
  </body>

CSS样式

<body>元素具有一个从顶部到底部渐变的背景,并且这个渐变背景会在水平方向上循环移动,从而创建一个动态的效果。

       body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background: linear-gradient(to bottom, #add8e6, #fff);
            background-size: 200% 200%;
            /* 创建一个比实际大的背景尺寸 */
            animation: gradient 5s ease infinite;
            /* 动画效果 */
        }
          /* 背景渐变动画 */
        @keyframes gradient {
            0% {
                background-position: 0% 50%;
            }

            50% {
                background-position: 100% 50%;
            }

            100% {
                background-position: 0% 50%;
            }
        }

先将<body>元素设置为Flex容器,允许其内部元素使用Flexbox布局。在Flex容器的主轴(默认为水平方向)上居中对齐其子元素。

<body>设置一个线性渐变背景。从顶部到底部,颜色从#add8e6(浅青色)渐变到#fff(白色)。
设置背景图像的大小为容器大小的200%。因为背景是一个渐变,所以这实际上为渐变动画提供了更多的空间。
最后添加一个CSS动画。动画的持续时间为5秒,使用ease缓动函数,并且无限次地重复。

云效果实现

效果展示

在这里插入图片描述

HTML结构

在HTML中定义云朵的容器。每个云朵都可以用一个<div>元素来表示,并通过添加不同的类名来区分它们。

            <div class="cloud cloud-1"></div>
            <div class="cloud cloud-2"></div>
            <div class="cloud cloud-3"></div>

类名 (cloud-1, cloud-2, cloud-3)
为了区分不同的云朵并给它们不同的样式(如大小、位置和动画延迟),使用了不同的类名。这些类名可以与基础 cloud 类一起使用,以提供额外的样式信息。

CSS样式

接下来,我们使用CSS来定义云朵的样式和动画效果。

主要使用到的是以下四种:

  • 基本样式: 设置云朵的颜色、形状、大小和透明度。
  • 定位: 使用position: absolute;将云朵定位在页面的任意位置。
  • 动画: 定义float动画,使云朵看起来像是在空中漂浮。
  • 阴影: 为云朵添加一些阴影效果,使其看起来更加立体。

先给整体布局设置一下

       .cloudMain,.cloudMain-item {
            display: flex;
        }

        .cloud {
            position: relative;
            background: #fff;
            width: 200px;
            height: 60px;
            border-radius: 200px / 100px;
            /* 椭圆的水平半径和垂直半径 */
            margin: 10px;
        }

        .cloud:before,
        .cloud:after {
            content: '';
            position: absolute;
            background: #fff;
            width: 100px;
            height: 80px;
            border-radius: 100px / 80px;
            top: -40px;
            left: 50px;
        }

        .cloud:after {
            width: 120px;
            height: 120px;
            top: -50px;
            left: 100px;
        }

        /* 可选:添加一些阴影和动画效果 */
        .cloud {
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 6px rgba(0, 0, 0, 0.23);
            animation: float 3s ease-in-out infinite;
        }

        @keyframes float {
            0% {
                transform: translateY(0);
            }

            50% {
                transform: translateY(-10px);
            }

            100% {
                transform: translateY(0);
            }
        }

        .cloud-1 {
            width: 130px;
            height: 64px;
            top: 50%;
            /* left: 30%; */
            animation-delay: -2s;
            /* 不同的云朵有不同的动画延迟 */
        }

        .cloud-2 {
            width: 173px;
            height: 81px;
            top: 70%;
            /* left: 50%; */
            animation-delay: -1s;
        }

        .cloud-3 {
            width: 118px;
            height: 56px;
            top: 10%;
            /* left: 70%; */
        }

        /* 浮动动画 */
        @keyframes float {
            0% {
                transform: translateY(0);
            }

            50% {
                transform: translateY(-20px);
                /* 上下浮动距离 */
            }

            100% {
                transform: translateY(0);
            }
        }

背景颜色 (background): 设置云朵的颜色。在这里,我们使用了白色 #fff。
边框圆角 (border-radius): 通过设置边框圆角为50%,我们创建了一个圆形的云朵形状。
透明度 (opacity): 为了使云朵看起来更自然,我们降低了其不透明度到0.6,使其呈现半透明效果。
定位 (position): 我们将云朵的 position 属性设置为 absolute,这样可以使用 top 和 left 属性来精确控制云朵在页面上的位置。
动画 (animation): 为了使云朵看起来像是在漂浮,我们使用了CSS动画。animation 属性包含多个值,例如动画名称 (float)、动画持续时间 (5s)、动画速度曲线 (ease-in-out) 以及动画是否应该无限循环 (infinite)。
阴影 (box-shadow): 为了增强云朵的立体感,我们添加了两个阴影效果。这通过 box-shadow 属性实现,该属性允许我们定义阴影的颜色、偏移量、模糊半径和扩展半径。
动画定义
使用 @keyframes 规则来定义动画 float。这个规则描述了动画从开始到结束的状态变化。在这个例子中,动画开始时 (0%) 云朵没有移动,动画中间 (50%) 云朵向上移动了20像素,然后动画结束时 (100%) 云朵又回到了初始位置。

草效果实现

单颗小草

效果展示

在这里插入图片描述

HTML结构

在HTML中定义草的容器。每个草都可以用一个<div>元素来表示

      <div class="grass"></div> 

CSS样式

先画出一个长三角,使用 ::before::after做出前后各不同大小的长度和颜色。

        .grass {
            position: relative;
            width: 5px;
            left: -10px;
            height: 200px;
            margin: 2px;
            transform: rotate(5deg);
            transform-origin: bottom left;
            border-radius: 50% 50% 0 0 / 60% 60% 40% 40%;
            background: rgb(16, 121, 16);
            animation: sway 4s ease-in-out infinite;
        }

        .grass::before,
        .grass::after {
            content: "";
            position: absolute;
            bottom: 0;
            background: rgb(44, 155, 44);
            transform-origin: bottom left;
            border-radius: 50% 50% 0 0 / 60% 60% 40% 40%;
            box-shadow: 0 0 10px rgba(52, 170, 52, 0.5);
        }

        .grass::before {
            width: 100%;
            height: 70%;
            left: 0;
            transform: rotate(-10deg);
            animation: sway 8s ease-in-out infinite;
        }

        .grass::after {
            width: 70%;
            height: 80%;
            left: 15%;
            bottom: 10%;
            transform: rotate(10deg);
            background: rgb(31, 126, 31);
            animation: sway 12s ease-in-out infinite;
        }

组合小草

效果展示

在这里插入图片描述

HTML结构

使用不同草进行组合,有错落的感觉。

        <div class="grassMain-item">
            <div class="grass"></div>
            <div class="grass"></div>
            <div class="grass"></div>
            <div class="grass"></div>
        </div>
        <div class="grassMain-item">
            <div class="grass"></div>
        </div>
        <div class="grassMain-item">
            <div class="grass"></div>
            <div class="grass"></div>
        </div>
        <div class="grassMain-item">
            <div class="grass"></div>
            <div class="grass"></div>
        </div>
        <div class="grassMain-item">
            <div class="grass"></div>
            <div class="grass"></div>
            <div class="grass"></div>
        </div>

CSS样式

使用keyframes加transform的rotate控制小草摆动;用nth-child随机控制草组合,用transform的scale控制草坪的错落。

        @keyframes sway {
            0% {
                transform: rotate(-3deg) translateY(0);
            }

            50% {
                transform: rotate(3deg) translateY(-5px);
            }

            100% {
                transform: rotate(-3deg) translateY(0);
            }
        }

        .grassMain-item:nth-child(2n+1) {
            transform: scale(1.1);
            margin: 0px 1px;
        }

        .grassMain-item:nth-child(2n) {
            transform: scale(0.9);
            margin: 0px 3px;
        }

        .grassMain-item:nth-child(2n+2) {
            transform: scale(1);
            margin: 0px 2px;
        }

        .grassMain-item:nth-child(3n+2) {
            transform: scale(0.8);
            margin: 2px 0px;
        }

        .grassMain-item:nth-child(2n+2) .grass::after {
            width: 120%;
        }

        .grassMain-item:nth-child(2n+3) .grass::before {
            width: 140%;
        }

完整代码

地址: https://download.csdn.net/download/weixin_48998573/89298548

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

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

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

相关文章

BeanDefinition作用

BeanDefinition接口 BeanDefinition 描述一个 Bean 实例&#xff0c;这个实例有哪些属性值、构造函数以及一些其他信息&#xff0c;就是描述Bean实例的信息。 BeanDefinition是一个接口&#xff0c;允许BeanFactoryPostProcessor 内省和修改属性值和其他 Bean 元数据。 点击了…

【simple-admin】simple-admin-core 首次服务启动 如何配置mysql数据库表 | 如何docker启动core

一、下载启动S-A 1、下载源码 https://github.com/suyuan32/simple-admin-core.git git clone https://github.com/suyuan32/simple-admin-core.git2、修改etc下yaml配置 需要对RPC和API 分别2个文件夹下的etc下的yaml进行修改 替换成我们的数据库 3、初始化数据库 核心代…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种&#xff0c;分别是&#xff1a;touchpad&#xff08;触摸板&#xff09;、mouse&#xff08;鼠标&#xff09;、keypad&#xff08;键盘&#xff09;、encoder&#xff08;编码器&#xff09;、button&#xff08;外部按键&#xff09;。而基于…

抖音直播预告|换新·升级 Aigtek安泰电子2024新产品发布会

多系列功放产品大升级&#xff01; 深耕电子测试仪器领域&#xff0c;攻坚行业尖端技术&#xff0c;不断自主研发与创新&#xff0c;是安泰电子一如既往的坚持&#xff01;通过长久技术积淀&#xff0c;Aigtek安泰电子多系列功放也在2024年迎来了全新升级&#xff01; 本次我们…

青年精英大会笔记

2024年5月16日上午 大会主席致辞【郑纬民】 郑纬民【清华大学教授、中国工程院院士】——78岁【看着精神抖擞】&#xff01;牛哇 学件初步探索【周志华】 南京大学 zhouzhnju.edu.cn Preliminary Exploration to Learnware 土生土长的 听完介绍感觉这个研究工作很不错&…

go语言中的一个特别的语法 //go:embed 可将将静态文件内容读取到string, []byte和 embed.FS 变量并直接打包到exe包中

go语言中的一个特别的语法 //go:embed 看上去像是注释&#xff0c;实则是golang中的一个内置的语法&#xff0c;而且是仅在你的go代码编译时生效的语法&#xff0c; 借助他我们可以将我们的静态资源文件读取到FS直接打包到我们的exe执行文件中。 同时他还支持文件的模式匹配…

揭秘未来,开启盲盒新篇章——打造你的专属盲盒小程序

一、引言 在这个充满未知与惊喜的时代&#xff0c;盲盒文化已经深入人心&#xff0c;成为年轻人追求新奇、体验刺激的新宠。如今&#xff0c;随着科技的快速发展&#xff0c;盲盒文化也迎来了全新的发展机遇。我们诚挚地邀请您一同踏上这场盲盒小程序开发的旅程&#xff0c;共…

通用代码生成器应用场景一,项目前期

通用代码生成器是一种自动化编程软件&#xff0c;是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象&#xff0c;枚举&#xff0c;弹性登录模块&#xff0c;复杂版面和图形报表。使用通用代码生成器完成项目前期&#xff0c;比直接使用对应的高级语言快的多&#xff0…

秋招突击——算法打卡——5/24——两数之和

题目描述 实现代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int addNumber 0;// 表示进位ListNode* res ListNode();ListNode* curNode res;while(l1 && l2){curNode.value (l1.value l2.value addNumber) % 10 addNumber (l1.value l2.value…

当消费遇上AI:大模型如何成为行业“网红”?

在一个繁忙过后的周五晚上&#xff0c;美食发烧友Melissa和朋友痛快的享受了一顿海底捞火锅&#xff0c;餐毕&#xff0c;她像往常一样留下了服务评价&#xff0c;及时反馈是一位美食家的基本素养。 每天如同Melissa一样留下评价的客人不在少数&#xff0c;他们的真实体验反馈…

软件测试/测试开发丨学习笔记之Allure2测试报告

Allure2测试报告 1、使用 Allure2 运行方式-Python 1&#xff09;–alluredir 参数生成测试报告。 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)#生成在线的测试报告 allure serve ./result2…

EXPLAIN执行计划详解

EXPLAIN 是 MySQL 中的一个非常实用的命令&#xff0c;主要用于分析 SQL 查询语句的执行计划&#xff08;Query Execution Plan&#xff0c;QEP&#xff09;。通过这个命令&#xff0c;用户可以获取到数据库引擎如何执行特定的 SQL 语句的详细信息&#xff0c;这对于优化查询性…

我是如何使用 Next.js14 + Tailwindcss 重构个人项目的

前言 去年在学习 React 和 Nest 的时候&#xff0c;参考了大佬 imsyy 的项目 DailyHot&#xff0c;以此项目的灵感基于 React 开发&#xff0c;完成之后就没怎么在意。 后来发现这个项目还有点小流量&#xff0c;每天差不多 200-400 的 IP 访问量&#xff1a; 我又抽时间优…

使用Flask Swagger自动生成API文档

文章目录 安装Flask Swagger使用Flask Swagger生成API文档总结1. 自动化文档生成2. 交互式文档展示3. 规范化API设计4. 提升协作效率5. 支持多种格式 Flask Swagger是一种用于管理Flask API文档的工具。它基于OpenAPI规范&#xff0c;可以自动生成API的交互式文档。使用Flask S…

一键自动化博客发布工具,用过的人都说好(公众号篇)

之前收到很多朋友的要求&#xff0c;说是需要一个公众号的自动发布工具。 现在&#xff0c;它来了。 前提条件 前提条件当然是先下载 blog-auto-publishing-tools这个博客自动发布工具,地址如下&#xff1a;https://github.com/ddean2009/blog-auto-publishing-tools 公众号…

harbor 认证

Harbor 认证过程 Harbor以 Docker Registry v2认证为基础&#xff0c;添加上一层权限保护。1.v2 集成了一个安全认证的功能&#xff0c;将安全认证暴露给外部服务&#xff0c;让外部服务去实现2.强制用户每次Docker pull/push请求都要带一个合法的Token&#xff0c;Registry会…

Leecode560:和为 K 的子数组

这道题用暴力解法时间复杂度会很高&#xff0c;但是涉及到和等于多少的情况&#xff0c;一般情况下会考虑以空间换时间来存储前面获得的信息&#xff0c;然后将答案为某值的结果返回。 这里利用了累加然后通过哈希表寻找值的思想。就是先将前面的数全部加起来&#xff0c;统计…

可视化大屏的应用(26):地产/楼盘/楼宇

可视化大屏在地产、楼盘和楼宇上有以下几个价值&#xff1a; 数据展示和分析 可视化大屏可以将地产、楼盘和楼宇相关的数据以图表、地图等形式展示出来&#xff0c;帮助用户更直观地了解各种数据指标&#xff0c;如销售情况、租赁率、楼宇能耗等。通过数据的可视化展示和分析…

Lc43---- 1221. 分割平衡字符串(java版)---(贪心)(字符串)

1.题目描述 2.知识点和思路 &#xff08;1&#xff09;贪心算法的基本思想 选择性质&#xff1a;在每一步中&#xff0c;选择当前最优的选项&#xff0c;不考虑未来的后果。 局部最优解&#xff1a;通过一系列局部最优选择&#xff0c;构建全局最优解。 不可回溯&#xff1a;一…

Map六种遍历方式

下面是三组&#xff08;6种&#xff09;&#xff0c;Map 遍历方式的核心代码。 遍历方式有使用到增强for和迭代器。最下面有张图片&#xff0c;对做题有参考意义。 参考代码&#xff1a; Map map new HashMap();map.put("小猫","cat");map.put("小…