前端艺术之毛玻璃-倾斜-日历

news2024/12/26 23:09:57

前端艺术之毛玻璃-倾斜-日历

  • 描述
  • 项目
      • 效果
      • index.html
      • index.css

描述

项目描述
开发语言HTML、JavaScript、CSS
dyCalendarJS、vanilla-tilt
Edge108.0.1462.54 (正式版本) (64 位)

该项目中需要使用到的库有:

  1. dyCalendarJS
    vanilla-tilt.js 是 JavaScript 中的一个平滑的 3D 倾斜库。
  2. vanilla-tilt
    dyCalendarJS 是一个用于创建日历的 JavaScript 库,您可以在博客和网站中免费使用它。

如果你在观看本篇文章前并没有对这两个库进行了解,欢迎移步至我的另外两篇文章进行学习:

  1. JavaScript 库之 vanilla-tilt(一个平滑的 3D 倾斜库)
  2. JavaScript 库之 dyCalendarJS(日历)

项目

该项目文件中我已对代码进行了注释。如遇不懂的地方,请尝试查看相关注释。

效果

效果

效果

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>毛玻璃-倾斜-日历</title>
    <!-- 导入自定义 CSS 文件 -->
    <link rel="stylesheet" href="./index.css">
    <!-- 导入 dycalendar.css -->
    <link rel="stylesheet" href="../dycalendar.min.css">
</head>
<body>
    <div id="calendar" class="dycalendar-container"></div>

    
    <!-- 导入 dycalendar.js -->
    <script src="../dycalendar.min.js"></script>
    <!-- 导入 vanilla-tilt.js -->
    <script src="../vanilla-tilt.js"></script>
    <script>
        // 绘制日历
        dycalendar.draw({
            target: '#calendar',   // 指定用于创建日历的 HTML 容器
            type: 'month',   // 设置日历的类型
            prevnextbutton: 'show',   // 显示 "<" 及 ">" 按钮
            highlighttoday: true   // 高亮显示当前日期
        })

        // 为目标元素添加倾斜效果
        VanillaTilt.init(document.querySelector('#calendar'), {
            target: '#calendar',   // 指定需要添加倾斜效果的目标元素
            scale: 0.8,   // 鼠标悬停于目标元素上时,目标元素的放缩倍数
            glare: true,   // 是否设置反光效果
            'max-glare': 0.6   // 设置反光效果的强度
        })
    </script>
</body>
</html>

index.css

*{
    /* 去除元素默认的内外边距 */
    margin: 0px;
    padding: 0px;
    /* 
    设置边框时将压缩内容区域,而不会向外扩张。
    也就是说,为某个元素设置边框并不会改变其宽高。
     */
    box-sizing: border-box;
}

body{
    /* 显示区域的最小高度为显示窗口的高度 */
    min-height: 100vh;
    /* 设置该元素内部元素居中显示 */
    display: flex;
    justify-content: center;
    align-items: center;
    /* 设置该元素的背景颜色 */
    background-color: #161623;
}

body::before{
    /* 若需要正常使用伪元素,必须为其设置 content 属性 */
    content: '';
    width: 400px;
    height: 400px;
    /* 设置颜色渐变效果 */
    background: linear-gradient(#ffc107,#e91e63);
    /* 设置边框圆角,当该属性的值为 50% 时元素边框将显示为一个圆 */
    border-radius: 50%;
    /* 
    为该元素设置绝对定位,阻止该元素遮挡日历
    (定位元素可以设置 z-index 来调节显示顺序,
    z-index 的值越高,显示优先级越大)。
     */
    position: absolute;
    top: 10%;
    left: 20%;
    z-index: -1;
}

body::after{
    content: '';
    width: 300px;
    height: 300px;
    position: absolute;
    background: linear-gradient(#2196f3,#31ff38);
    border-radius: 50%;
    top: 45%;
    left: 55%;
    z-index: -1;
}

#calendar{
    /* 设置日历的宽高 */
    width: 400px;
    height: 400px;
    color: #fff;
    /* 
    设置日历的背景元素,为产生毛玻璃效果,这里将背景颜色设置为白色,
    将透明度设置为 0.1(透明度的取值范围为 0~1,取值越接近 1 ,颜色
    越不透明)。
     */
    background-color: rgb(255, 255, 255, 0.1);
    /* 
    设置 blur 过滤器,该过滤器可以将背景模糊化,参数中的
    像素值设定越高,显示得越是模糊。
    */
    backdrop-filter: blur(50px);
    /* 分别设置日历的四条边框,使日历显示得更为立体 */
    border-top: 1px solid rgb(255, 255, 255, 0.5);
    border-left: 1px solid rgb(255, 255, 255, 0.5);
    border-right: 1px solid rgb(255, 255, 255, 0.2);
    border-bottom: 1px solid rgb(255, 255, 255, 0.2);
    border-radius: 5px;
    /* 设置日历的内边距 */
    padding: 0px 20px;
    /* 
    设置日历周边的阴影效果,box-shadow 接收的值(如下)分别为
    阴影的 X 偏移量、阴影的 Y 偏移量、扩散半径、阴影颜色。
    */
    box-shadow: 5px 10px 10px rgb(0, 0, 0, 0.1);
}

/* 
这里存在许多在 HTML 文件中没有看到的类名,这是因为这些标签
是 dyCalendarJS 通过 JavaScript 动态创建的元素,如果有需要对
日历中的某些元素的样式进行改变,可以通过浏览器的 检查 功能来查看
JavaScript 创建的元素并对其样式进行适当的修改。
*/

/* 
有些元素需要通过修改传递给 dycalendar.draw() 的配置对象中的
部分属性才能够被发现。
*/

/* 设置日历的头部部分的样式 */
#calendar .dycalendar-header{
    margin-top: 60px;
    font-size: 20px;
}

/*
 设置日历 "<" 及 ">" 按钮的样式,应用该样式时请将 
 传递给 dycalendar.draw() 的配置对象中的 prevnextbutton 
 属性的值设置为 true 。
 */
#calendar .dycalendar-header .prev-btn,
#calendar .dycalendar-header .next-btn{
    width: 40px;
    height: 30px;
    background-color: rgb(255, 255, 255, 0.15);
    /* 设置文本对其方式及行高以使 ">" 及 "<" 居中显示 */
    text-align: center;
    line-height: 30px;
    /* 设置上下方向的外边距为 0px,设置左右方向的外边距为 5px */
    margin: 0px 5px;
}

#calendar .dycalendar-body table{
    width: 100%;
    height: 100%;
    margin-top: 50px;
}

/* tr:nth-child(1) 选择 table 标签中的第一个 tr 元素 */
/* 设置日历中星期(星期几)标识的样式 */
#calendar .dycalendar-body table tr:nth-child(1) td{
    background-color: rgb(255, 255, 255, 0.15);
    margin-bottom: 20px;
}

#calendar .dycalendar-body table td{
    border-radius: 3px;
    /* 设置鼠标悬停时的指针样式 */
    cursor: pointer;
}

/* 
:hover 伪类选择器用于设置鼠标悬停在指定元素时,
某个元素的样式
*/
#calendar .dycalendar-today-date,
#calendar .dycalendar-body table td:hover{
    color: #000;
    /* 
    使用 !important 提升该属性在多个设置了该属性的选择器
    中的权重
    */
    background-color: #fff !important;
}

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

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

相关文章

C++ | 哈希 | 基于开散列结构的unordered系列容器模拟实现

文章目录unordered_map的封装所有接口的声明与实现operator[]重载unordered_set的封装上篇博客模拟实现了哈希的开散列结构&#xff0c;并且将迭代器与泛型进行了封装&#xff0c;至此我们可以将开散列作为底层结构对STL标准容器——unordered_map和unordered_set进行封装。但是…

使用Vue 简化 用户查询/添加功能

使用Vue简化 用户查询/添加功能1. 查询功能1.1 Vue核心对象&#xff1a;1.2 brand.html&#xff1a;1.3 selectAllServlet&#xff08;无变化&#xff09;&#xff1a;2. 添加功能2.1 addBrandhtml&#xff1a;2.2 Vue核心对象&#xff1a;2.3 addServlet&#xff08;无变化&am…

网关zuul源码解析==ZuulServlet

用法&#xff1a; 使用zuul网关&#xff0c;需要引入starter为 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> 同时在springboot启动类上加注解…

7、代码模板的使用

文章目录7、代码模板的使用7.1 查看Postfix Completion模板&#xff08;后缀补全&#xff09;7.2 查看Live Templates模板&#xff08;实时模板&#xff09;7.3 常用代码模板1 非空判断2 遍历数组和集合3 输出语句4 对象操作5 静态常量声明7.4 自定义代码模板1 自定义Postfix C…

Android入门第60天-MVVM中的Databinding与ListView结合使用

开篇 还记得我们进入Listview、GridView都是以一个layoutadapter组合在一起来实现的是吧&#xff1f;那么还记得我们的Adapter的写法么&#xff1f; 在我们的Adapter里提供了一个bindView方法 。 在调用时我们需要在Activity里把layout里的控件元素一个个传给这个Adapter。 在我…

【Linux】文件权限

本期我们来谈谈Linux上的权限&#xff1a;一、权限的概念在生活中我们处处都会遇到权限。权限是什么呢&#xff1f;下面是对于权限的定义&#xff1a;&#x1f4cc;权限&#xff1a;一件事是否允许被“谁”做&#x1f4cc;简化一下就是&#xff1a;权限人事物属性&#x1f4cb;…

【ROS-Navigation】—— Astar路径规划算法解析

文章目录前言1. 导航的相关启动和配置文件1.1 demo01_gazebo.launch1.2 nav06_path.launch1.3 nav04_amcl.launch1.4 nav05_path.launch1.5 move_base_params.yaml1.6 global_planner_params.yaml2. Astar路径规划算法解析2.1 astar.h2.2 astar.cpp参考文献前言 最近在学习ROS的…

《职场求生攻略》学习笔记 Day8

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4《编程高手必学的内存知识》学习笔记 Day 5NUMA内存知…

JavaEE-多线程进阶

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录常见的锁策略乐观锁 vs 悲观锁轻量级锁 vs 重量级锁自旋锁 vs 挂起等待锁互斥锁 vs 读写锁公平锁 vs 非公平锁可重入锁 vs 不可…

恶意代码分析实战 8 恶意代码行为

8.1 Lab 11-01 代码分析 首先使用strings进行分析。 Gina是在 msgina.dll中的。 很多有关资源的函数。 关于注册表的函数。 使用ResourceHacker查看。 发现是一个PE文件。 保存为dll文件。 动态分析 启动Promon。 进入注册表查看。 这个恶意代码向磁盘释放了什么&…

分享140个ASP源码,总有一款适合您

ASP源码 分享140个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 140个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1vxAMMEI7WYS8SAnfbJKdGQ?pwdsas8 提取码&#x…

【ARIXV2209】Multi-Scale Attention Network for Single Image Super-Resolution

【ARIXV2209】Multi-Scale Attention Network for Single Image Super-Resolution 代码&#xff1a;https://github.com/icandle/MAN 这是来自南开大学的工作&#xff0c;将多尺度机制与大核注意机制结合&#xff0c;用于图像超分辨率。 2022年初&#xff0c;大核卷积火了&a…

GBD学习

GBD gbd官网 GDB, the GNU Project debugger 是一个debug工具 支持多种语言&#xff1a; Ada、Assembly、C、C、D、Fortran、Go、 Objective-C、OpenCL、Modula-2、Pascal、Rust 编译文件 首先使用gcc -g .c文件 -o 可执行文件名 进行编译&#xff0c;再使用gdb 可执行文件名…

恶意代码分析实战 10 数据加密

10.1 Lab13-01 比较恶意代码中的字符串&#xff08;字符串命令的输出&#xff09;与动态分析提供的有用信息&#xff0c;基于这些比较&#xff0c;哪些元素可能被加密&#xff1f; 使用WireShark进行动态分析。 有一串字符看起来像是加密的。 使用Strings分析一下。 发现疑似…

KUKA机器人初次通电配置

安全配置 机器人KSS系统里&#xff0c;会提示选择机器人信息的对话框&#xff0c;选择“机器人”按钮&#xff0c;如下&#xff1a; 承接上一步骤&#xff0c;通过示教器确认所有消息&#xff0c;单击消息提示区域&#xff0c;此时一定会弹出如图 所标示的报警消息&#xff0…

【唐诗学习】一、古诗概述

一、古诗概述 为什么要学习古诗词&#xff1f; 古诗词可以陶冶情操&#xff0c;传承文化诗词&#xff0c;其实就是古代的流行歌曲&#xff0c;它们记录着一个个时代的变迁&#xff0c;是历史的旋律。还有一点很重要&#xff1a;同样是记录历史&#xff0c;史书是国家视角&…

零基础学JavaWeb开发(二十二)之 springmvc入门到精通(2)

3、SpringMVC PostMan工具使用 PostMan简介 Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员会使用到该工具其主要特点 特点&#xff1a; 创建 测试&#xff1a;创建和发送任何的HTTP请求&#xff0c;使用PostMan发送 Get、Post、…

Java IO流之字符流详解

字符流概述 字符流的底层其实就是字节流 字符流 字节流 字符集 字符流特点 输入流&#xff1a;一次读一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节输出流&#xff1a;底层会把数据按照指定的编码方式进行编码&#xff0c;变成字节再写到文件中 使用场景 用于…

学习Go的全部网站集合

给Golang 入门新手整理了一份全部所需网站集合&#xff0c;主要分为三类。 社区类&#xff1a;这类网站是问答、文档、搜索、资源类网站汇总 镜像和安装包类&#xff1a;有些安装包可能无法下载&#xff0c;此处列出一些可下载Go包和镜像的网站。 开发工具&#xff1a;目前流…

代码随想录--栈与队列章节总结

代码随想录–栈与队列章节总结 1.LeetCode232 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾i…