CSS 艺术之暗系魔幻卡牌

news2025/1/12 15:55:10

CSS 艺术之暗系魔幻卡牌

  • 参考
  • 描述
  • 效果
  • 支线
      • HTML
      • 图片
  • 主线
      • 去除元素的部分默认属性
      • 定义 CSS 变量
      • body
      • #card
      • 自定义属性
      • 定义动画
      • #card::before
      • #card::after
      • img
  • 代码总汇

参考

项目描述
MDNWeb 文档
搜索引擎Bing

描述

项目描述
Edge109.0.1518.61 (正式版本) (64 位)

效果

效果
注:

CSS 部分的源代码中使用了 @property 来实现自定义属性,该属性仍处于实验阶段,部分浏览器对该属性并不支持。

兼容性

但请不要担心,在本示例中,你完全可以使用 CSS 变量来替代自定义属性(在此使用自定义属性仅是为了学习),完成这一操作仅需要对 CSS 源代码进行小小的更改。
具体的更改方式为:你仅需要删除 @property --color 整体并在 *(通配符选择器) 选择器中定义 CSS 变量(--rotate: 90deg;) 即可。如果你不明白这段话的意思,也请不要担心,请往下看吧。

支线

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>CSS 艺术之暗系魔幻卡牌</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div id="card">
        <img src="../R-C.jpg" alt="">
    </div>
</body>
</html>

图片

图片

主线

去除元素的部分默认属性

*{
    /* 去除元素默认的内外边距 */
    margin: 0px;
    padding: 0px;
    /* 
    设置为 border-box 时,设置边框后,边框将会压迫
    内容区域。元素的宽高并不会因为边框的设置而增加。
    */
    box-sizing: border-box;
}

定义 CSS 变量

:root {
    --margin: 100px;
    --card-height: 30vw;
    /* 上演一出黄金分割率的好戏 */
    --card-width: calc(var(--card-height) / 1.618);
  }

注:

  1. :root 指向文档的根元素,对于 HTML 来说,根元素为 <html> 。由于 CSS 变量具有继承性,将 CSS 变量定义在指向 <html> 元素的选择器中,CSS 变量可以被大多数选择器(html 标签选择器通配符选择器 不在范围内,三者类似与平级关系,不存在父子嵌套关系,无法 html 元素中的 CSS 变量)使用。
    为实现相同的效果,你也可以将变量定义在 html 标签选择器通配符选择器 中。

  2. calc() 函数内部可以进行计算。使用该函数进行加法或减法计算时,+- 的两边需要留有空格,否则将被理解为正负号。

  3. 通过变量,我们可以实现代码的复用。同时,合理的变量名称还能够提高代码的可读性。

body

body{
    /* 
    设置 body 元素的最小高度为视口
    (可以理解为浏览器中的可视区域)
    高度 。
    */
    min-height: 100vh;
    /* 设置背景颜色 */
    background-color: #131323;
    /* 通过 flex 弹性布局使 body 中的元素居中显示 */
    display: flex;
    justify-content: center;
    align-items: center;
}

#card

#card{
    width: var(--card-width);
    height: var(--card-height);
    position: relative;
    cursor: pointer;
}

注:

  1. 你可以通过使用 CSS 提供的内置函数 var() 函数来获取 CSS 变量中的值。
  2. #card 元素设置为相对定位,便于稍后基于 #card 元素创建的伪元素相对该元素进行定位。
  3. cursor 属性用于设定当鼠标悬停在 #card 元素之上时,鼠标样式将被设置为如下样式:

样式

自定义属性

@property --rotate{
    /* 自定义属性的默认值 */
    initial-value: 90deg;
    /* 
    定义自定义属性允许的语法结构,
    此处定义该元素仅接受角度值。    
    */
    syntax: '<angle>';
    /* 定义该自定义属性是否允许被其他元素所继承 */
    inherits: false;
}

注:

  1. 自定义属性在部分浏览器中无法正常工作,请注意使用。
  2. 该示例中,自定义属性发挥的功能可以由 CSS 变量来担任。你仅需要删除该部分代码并在 *(通配符选择器) 选择器中定义 CSS 变量(--rotate: 90deg;) 即可。
  3. 如果你希望能够对 CSS 自定义属性有更深入的了解,欢迎移步至我的另一篇博客 CSS @property(CSS 自定义属性)

定义动画

@keyframes edge{
    from{
        --rotate: 0deg;
    }
    to{
        --rotate: 360deg;
    }
}

该动画将自定义属性 --rotate 的值由 0deg 逐渐增加至 360deg

#card::before

#card::before{
    content: '';
    width: 104%;
    height: 102%;
    background: linear-gradient(var(--rotate), 
    rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));
    position: absolute;
    z-index: -1;
    top: -1%;
    left: -2%;
    /* 设置边框圆角半径 */
    border-radius: 0.5vw;
    /* 
    为当前元素指定使用的动画,并将该动画的
    持续时间设置为 3.5s,动画速度保持不变,
    动画播放次数为无限次。
    */
    animation: edge 3.5s linear infinite;
}

注:

  1. 使用伪元素时,必须指定 content 属性的值,否则该伪元素将无法正常发挥作用。
  2. linear-gradient() 函数用于创建渐变背景,该函数的第一个参数为渐变的方向,后续的值指定渐变过程中需要使用到的元素。
  3. position 的属性值为 absolute 时,该元素将依照最靠近该元素的已定位(position 的属性值不为默认值 static)的父级元素进行定位。
  4. position 的属性值不为默认值 static 的元素,可以通过使用 z-index 属性来调整该元素在上下文中的位置。简单来说,通过该属性你可以决定哪个元素覆盖哪个元素,该属性的值越大,该元素就越是靠近上层(也可以成为最上层)。

分析:

我们将该元素单独抽离出来进行观察:

效果
该伪元素的面积比 #card 元素稍大,将该元素压在 #card 的下方,通过适当的偏移,就能得到一个具有流光的边框效果。

#card::after

#card::after{
    content: '';
    width: 80%;
    height: 100%;
    background: linear-gradient(var(--rotate), 
    rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));
    position: absolute;
    top: 5%;
    left: 10%;
    filter: blur(5vw);
    z-index: -1;
    /* 使用动画 */
    animation: edge 3.5s linear infinite;
}

注:

filter 属性可以为当前元素添加滤镜,blur() 函数用于将元素中的像素进行适当的偏移,以产生到模糊的效果。

效果:

我们将该元素单独抽离出来进行观察:

效果

我们可以利用模糊过程中产生的像素偏移导致的微光(边缘)来为 #card 元素添加魔法。该元素同样位于在 #card 元素之下。

img

/* 设置图片宽高,使其占据整个父级元素(#card) */
img{
    width: 100%;
    height: 100%;
}

代码总汇

此处仅有 CSS 部分的完整代码,HTML 部分的完整代码已在本文前面给出,请留意。

*{
    /* 去除元素默认的内外边距 */
    padding: 0px;
    /* 
    设置为 border-box 时,设置边框后,边框将会压迫
    内容区域。元素的宽高并不会因为边框的设置而增加。
    */
    box-sizing: border-box;
}

:root {
    --margin: 100px;
    --card-height: 30vw;
    /* 上演一出黄金分割率的好戏 */
    --card-width: calc(var(--card-height) / 1.618);
  }

body{
    /* 
    设置 body 元素的最小高度为视口
    (可以理解为浏览器中的可视区域)
    高度 。
    */
    min-height: 100vh;
    /* 设置背景颜色 */
    background-color: #131323;
    /* 通过 flex 弹性布局使 body 中的元素居中显示 */
    display: flex;
    justify-content: center;
    align-items: center;
}

#card{
    width: var(--card-width);
    height: var(--card-height);
    position: relative;
    cursor: pointer;
}

/* 定义自定义属性 --rotate */
@property --rotate{
    /* 自定义属性的默认值 */
    initial-value: 90deg;
    /* 
    定义自定义属性允许的语法结构,
    此处定义该元素仅接受角度值。    
    */
    syntax: '<angle>';
    /* 定义该自定义属性是否允许被其他元素所继承 */
    inherits: false;
}

/* 定义动画 */
@keyframes edge{
    from{
        --rotate: 0deg;
    }
    to{
        --rotate: 360deg;
    }
}

#card::before{
    content: '';
    width: 104%;
    height: 102%;
    background: linear-gradient(var(--rotate), 
    rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));
    position: absolute;
    z-index: -1;
    top: -1%;
    left: -2%;
    /* 设置边框圆角半径 */
    border-radius: 0.5vw;
    /* 
    为当前元素指定使用的动画,并将该动画的
    持续时间设置为 3.5s,动画速度保持不变,
    动画播放次数为无限次。
    */
    animation: edge 3.5s linear infinite;
}

#card::after{
    content: '';
    width: 80%;
    height: 100%;
    background: linear-gradient(var(--rotate), 
    rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));
    position: absolute;
    top: 5%;
    left: 10%;
    filter: blur(5vw);
    z-index: -1;
    /* 使用动画 */
    animation: edge 3.5s linear infinite;
}

/* 设置图片宽高,使其占据整个父级元素(#card) */
img{
    width: 100%;
    height: 100%;
}

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

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

相关文章

DaVinci:HDR 调色

调色页面&#xff1a;HDR 调色Color&#xff1a;HDR GradeHDR 调色 HDR Grade调板不仅可用于 HDR 视频的调色&#xff0c; 也可用于 SDR 视频。其调色功能与标准色轮类似&#xff0c;但能调整的区域却要细致很多&#xff0c;同时&#xff0c;它还是可感知色彩空间的工具。高动态…

41.Isaac教程--使用DOPE进行3D物体姿态估计

使用DOPE进行3D物体姿态估计 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 深度对象姿态估计 (DOPE:Deep Object Pose Estimation) 从单个 RGB 图像执行已知对象的检测和 3D 姿态估计。 它使用深度学习方法来预测对象 3D 边界框的角点和质心的…

【数据结构】单调栈、单调队列

单调栈 单调栈 单调 栈 模拟单调递增栈的操作&#xff1a; 如果栈为 空 或者栈顶元素 大于 入栈元素&#xff0c;则入栈&#xff1b;否则&#xff0c;入栈则会破坏栈内元素的单调性&#xff0c;则需要将不满足条 件的栈顶元素全部弹出后&#xff0c;将入栈元素入栈。 单调…

研究分析如何设计高并发下的弹幕系统

一、需求背景为了更好的支持直播业务&#xff0c;产品设计为直播业务增加弹幕功能,但是最初的弹幕设计使用效果并不理想&#xff0c;经常出现卡顿、弹幕偏少等需要解决的问题。二、问题分析按照背景来分析&#xff0c;系统主要面临以下问题&#xff1a;带宽压力&#xff1b;弱网…

[基础]qml基础控件

TextText元素可以显示纯文本或者富文本(使用HTML标记修饰的文本)。它有font,text,color,elide,textFormat,wrapMode,horizontalAlignment,verticalAlignment等属性。主要看下clip&#xff0c;elide&#xff0c;textFormat&#xff0c;warpMode属性clipText 项目是可以设置宽度的…

Apache Spark 机器学习 特征抽取 4-2

Word2Vec 单词向量化是一个估算器&#xff0c;将文档转换成一个按照固定顺序排列的单词序列&#xff0c;然后&#xff0c;训练成一个Word2VecModel单词向量化的模型&#xff0c;该模型将每个单词映射成一个唯一性的、固定大小的向量集&#xff0c;对每个文档的所有单词进行平均…

【数据结构和算法】实现线性表中的静态、动态顺序表

本文是数据结构的开篇&#xff0c;上文学习了关于使用C语言实现静态、动态、文件操作的通讯录&#xff0c;其中使用到了结构体这一类型&#xff0c;实际上&#xff0c;是可以属于数据结构的内容&#xff0c;接下来我们来了解一下顺序表的相关内容。 目录 前言 一、线性表 一…

流批一体计算引擎-6-[Flink]的Python DataStream API程序

参考官方Python API文档 1 IDEA中运行Flink 从Flink 1.11版本开始, PyFlink 作业支持在 Windows 系统上运行&#xff0c;因此您也可以在 Windows 上开发和调试 PyFlink 作业了。 1.1 环境配置 pip3 install apache-flink1.15.3 CMD>set PATH查看环境变量 CMD>set JAV…

对JDBC驱动注册--DriverManager.registerDriver和Class.forName(driverClass)的理解

对JDBC驱动注册–DriverManager.registerDriver和Class.forName(driverClass)的理解 JDBC提供了独立于数据库的统一API&#xff0c;MySQL、Oracle等数据库公司都可以基于这个标准接口来进行开发。包括java.sql包下的Driver&#xff0c;Connection&#xff0c;Statement&#x…

注解方式管理Bean

1.注解方式创建对象IOC 导入依赖 aop Component(父注解) 放在类上,用于标记,告诉spring当前类需要由容器实例化bean并放入容器中 该注解有三个子注解 Controller 用于实例化controller层bean Service 用于实例化service层bean Repository 用于实例化持久层bean 当不确定是哪一…

【刷题大本营】二叉树进阶oj题(动图讲解,附代码及题目链接)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言       这篇文章给大家带来一…

RK3399平台开发系列讲解(文件系统篇)文件回写过程介绍

🚀返回专栏总目录 文章目录 一、编程接口二、回写过程2.1、周期回写2.2、强制回写2.3、系统调用sync沉淀、分享、成长,让自己和他人都能有所收获!😄 📢进程写文件时,内核的文件系统模块把数据写到文件的页缓存,没有立即写回到存储设备。文件系统模块会定期把脏页(即…

[JavaEE]线程池

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. 线程池是什么? 2. 线程池的实现原理 3. 标准…

Eureka集群构建步骤

目录 一、Eureka集群原理说明 二、EurekaServer集群环境构建步骤 三、将支付服务8001微服务发布到上面2台Eureka集群配置中 四、将订单服务80微服务发布到上面2台Eureka集群配置中 五、测试01 六、支付服务提供者8001集群环境构建 七、负载均衡 八、测试02 一、Eureka集…

论文投稿指南——中文核心期刊推荐(建筑科学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

前同事居然因为 Pycharm 的这个功能,即使离职三年也依然经常被请去喝茶~

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

教你一键生成形如Springboot的高大上banner打印效果

背景 今天闲来无聊&#xff0c;想搞一个类似于Springboot项目启动时打印效果&#xff0c;如下图&#xff1a; 问题解决方案 那这个打印效果怎么实现的呢&#xff1f; 其实&#xff0c;对于这个中效果实现起来也是很简单的。毕竟依托于Springboot强大的框架&#xff0c;任何问…

网狐大联盟非联盟成员无法创建房间解决-暂时不可创建当前游戏,请选择其他游戏!

"暂时不可创建当前游戏,请选择其他游戏!" 问题所有lua文件定位:

恶意代码分析实战 16 Shellcode分析

16.1 Lab19-01 将程序载入IDA。 一堆ecx自增的操作。到200是正常的代码段。 shellcode的解码器也是从这里开始的&#xff0c;一开始的xor用于清空ecx&#xff0c;之后将18dh赋给cx&#xff0c;jmp来到loc_21f,而在下图可以看到loc_21调用sub_208,在call指令执行后&#xff0…

40.Isaac教程--3D 物体姿态优化

3D 物体姿态优化 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 3D 物体姿态优化在操作等应用中起着至关重要的作用&#xff0c;在这些应用中&#xff0c;检测到的物体的位置会影响机器人的整体性能。 Isaac SDK 中的 3D 对象姿势优化应用程序提…