【开原宝藏】30天学会CSS - DAY1 第一课

下面提供一个由浅入深、按步骤拆解的示例教程,让你能从零开始,逐步理解并实现带有旋转及悬停动画的社交图标效果。为了更简单明了,以下示例仅创建四个图标(Facebook、Twitter、Google+、LinkedIn),并在每一步都附带代码展示和讲解。


在这里插入图片描述

第 0 步:项目结构说明

先准备两个文件:

  1. index.html
    • HTML 的主体结构
  2. style.css
    • 样式代码,控制图标外观与动画

目录结构如下:

project/|- index.html|- style.css

后面每一步都会提示你往哪个文件里添加或修改代码。


第 1 步:创建最基础的 HTML 骨架

index.html 中,先写一个最简化的结构,并在 <head> 区域中引入 Font Awesome(用于社交媒体图标)。

<!-- index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>社交图标旋转动画示例</title><!-- 引入 Font Awesome 4.7.0 CDN,用于显示社交媒体图标 --><linkrel="stylesheet"href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"><!-- 引入我们自己的CSS文件 --><link rel="stylesheet" href="style.css">
</head>
<body><!-- 预留一个容器,用来放置社交媒体图标的列表 --><ul class="icon-list"><!-- 四个图标,每个图标对应一个 <li> --><li class="icon-item"><a href="#" class="icon-link"><!-- 多个 <span> 用于分层, 这里先简单放一个,占位 --><span class="fa fa-facebook"></span></a></li><li class="icon-item"><a href="#" class="icon-link"><span class="fa fa-twitter"></span></a></li><li class="icon-item"><a href="#" class="icon-link"><span class="fa fa-google-plus"></span></a></li><li class="icon-item"><a href="#" class="icon-link"><span class="fa fa-linkedin"></span></a></li></ul></body>
</html>

说明

  • <ul class="icon-list"> 中放了四个 <li>,每个 <li> 都用 <a> 包裹图标,方便用户点击跳转到对应社交页面(此处链接为 # 占位)。
  • <span class="fa fa-xxx"> 指定了具体图标。
  • 现在只放了一个 <span>(实际成品会放多个 <span> 叠加实现分层,但我们先保持简洁,后面会逐步添加)。

第 2 步:初步的 CSS 布局与样式

先给 style.css 添加一些基础样式,让列表水平居中、图标摆放整齐。

/* style.css *//* 通用的复位 */
* {margin: 0;padding: 0;box-sizing: border-box;
}/* 让 body 高度占满浏览器,使用 flex 居中对齐 */
body {height: 100vh;display: flex;justify-content: center;align-items: center;background: #f3f3f3; /* 一个浅灰背景 */
}/* 让 ul 横向排列,并去掉默认的项目符号 */
.icon-list {list-style: none;display: flex;gap: 40px; /* 图标间的间隙 */
}/* 每个图标项的基础大小和摆放 */
.icon-item {width: 60px;height: 60px;list-style: none;margin: 0 10px;background: #ccc; /* 初步观察用的灰色背景,后面再细化 */display: flex;align-items: center;justify-content: center;
}/* <a> 链接的基础样式,去除默认的下划线 */
.icon-link {text-decoration: none;color: #fff; /* 字体颜色改成白色,方便在深色背景下显示 */font-size: 30px; display: flex;align-items: center;justify-content: center;width: 100%;height: 100%;
}/* 先给图标项加个简单的圆角,看着更好看 */
.icon-item {border-radius: 8px;
}

效果预览

  • 打开 index.html,可以看到四个浅灰色方块,里面各自放一个白色的社交图标。还没有任何旋转或动画效果,这时只是一个基础的“网格”排版。

第 3 步:让图标倾斜(添加 transform

根据示例需求,图标会有一个倾斜或旋转的视觉效果。我们可以直接对 .icon-item 做变换,例如旋转 -30deg 并倾斜 25deg

/* 在 style.css 里,给 .icon-item 增加 transform 属性 */
.icon-item {/* 原有的宽高、背景、省略 */transform: rotate(-30deg) skew(25deg);/* 可以额外尝试transition,悬停时再变回来 */transition: 0.5s;
}

第 4 步:添加多层 <span>,为后续动画做准备

在实际的分层动画中,每个图标要有多个 <span> 叠加。一个常见做法是在同一个位置重叠多个 <span>,然后在悬停时让它们分别平移、改变透明度,产生“撕裂”或“分层”效果。

下面,就以单个 <li> 为例,示范把 <span class="fa fa-xxx"> 拆成 5 个 <span>,其中最后一个用来显示社交图标,其余 4 个只是“彩色层”。请在 index.html 内修改四个 <li> 里的结构:

<li class="icon-item"><a href="#" class="icon-link"><!-- 前四个 span 仅仅是背景层,用来分层 --><span></span><span></span><span></span><span></span><!-- 第五个 span 才是真正的图标 --><span class="fa fa-facebook"></span></a>
</li>

同理,把另外三个图标也改成这样(只把 fa-facebook 改成对应的 fa-twitterfa-google-plusfa-linkedin)。
此时,如果你再刷新页面,你会看到所有图标变成了大黑块 —— 因为我们还没给这几个新的 <span> 设置正确的样式。


第 5 步:定位这些 <span> 并设置颜色

先把 .icon-link span 统一定位到同一个位置(顶层重叠),再分别给不同图标设置他们常见的主题色。

/* 在 style.css 里加上如下规则 *//* 让 .icon-link 下面的所有 span 都绝对定位、完全覆盖 */
.icon-link span {position: absolute; /* 基于 .icon-link 定位 */top: 0;left: 0;width: 100%;height: 100%;background: #000;        /* 默认背景,先给黑色 */display: flex !important;           /* 让图标居中 */align-items: center;justify-content: center;font-size: 30px !important;color: #fff;             /* 字体/图标颜色 */transition: 0.5s;        /* 后面做动画会用到 */border-radius: 8px;
}.icon-item:hover span {border-radius: 8px;
}/* 但 .icon-item 本身默认是倾斜的,如果需要让这些 span 撑满父级,就要给.icon-link 设为 position: relative; */
.icon-link {position: relative;overflow: hidden; /* 防止动画时溢出 */
}/* 分别给第 1、2、3、4 个 icon-item 下的 span 设置不同颜色 */
.icon-list li:nth-child(1) span {background: #3b5999; /* Facebook */
}.icon-list li:nth-child(2) span {background: #55acee; /* Twitter */
}.icon-list li:nth-child(3) span {background: #dd4b39; /* Google+ */
}.icon-list li:nth-child(4) span {background: #0077b5; /* LinkedIn */
}.icon-list li:nth-child(5) span {background: #e4405f;
}

注意:由于现在有 5 个 <span>,且我们给所有 <span> 写了 background,所以图标(fa-xxx)也被背景覆盖
但没关系,我们稍后要通过“分层 + 悬停时平移”把下层展现出来,最上方会看到图标本身。


第 6 步:添加鼠标悬停动画(把多层 <span> 拆开)

现在,为了实现分层效果,我们可以针对每个 <span> 在鼠标悬停时给它们不同的 translate 平移量和 opacity

先理解下思路:

  1. 默认状态:多个 <span> 叠在一起,看起来就是一个整体。
  2. 鼠标悬停:通过 :hover span:nth-child(n) 这样的选择器,让每一层 <span>(按照顺序)位移不同的距离,并且透明度也不同。

style.css 里补充如下代码(你可以在文件末尾添加):

/* 鼠标悬停在每个图标时,做分层平移和渐变 */
.icon-item:hover span:nth-child(5) {transform: translate(40px, -40px);opacity: 1;
}
.icon-item:hover span:nth-child(4) {transform: translate(30px, -30px);opacity: 0.8;
}
.icon-item:hover span:nth-child(3) {transform: translate(20px, -20px);opacity: 0.6;
}
.icon-item:hover span:nth-child(2) {transform: translate(10px, -10px);opacity: 0.4;
}
.icon-item:hover span:nth-child(1) {transform: translate(0, 0);opacity: 0.2;
}/* 如果想让默认状态下也叠加在一起,最好都不移动并 opacity = 1但这里图标最上层实际是 .fa-xxx,对上层的 background 也要做些处理:不过最简单的方式是,都保持 1,就会挡住下面的层。你可以让上面背景做点透明处理,保证能看到下面的色阶。或者再分配一套默认的 transform/opacity。
*/

效果解析

  • .icon-item:hover span:nth-child(5):因为这是最后一个 <span>,里边带有 fa-xxx 图标,我们让它在悬停时移动最大,并且 opacity: 1 保持完全不透明。
  • 其他 <span> 就做逐层递减的位移与透明度,形成向下错落的层级感。
进一步优化
  • 如果你发现最底层的 <span>nth-child(1))在默认状态就挡住了图标,你可以给默认状态加 opacity: 0 或者 .icon-link span:nth-child(-n+4) { opacity: .6 } 之类的设置,以让你在不悬停时也能看见图标。
  • 也可以让图标的 <span class="fa ..."> 放在第一个 <span>,其他背景的放在后面,只要注意 :nth-child() 的顺序,灵活调试即可。

第 7 步:测试与调试

  1. 刷新页面:默认时候,四个图标可能看上去还是彼此叠加在一起,或者部分被覆盖。
  2. 鼠标悬停:移动到某个图标时,应该看到图标立刻分层散开、色块呈现不同的位移与透明度,从而得到一个酷炫的分层效果。

如果想让动画更缓慢或更迅速,可以修改:

transition: 0.2s; /* 让动画更快 */
transition: 1s;   /* 让动画更慢 */

第 8 步:根据需要微调或扩展

  1. 修改图标
    • Font Awesome 提供了众多类名,你可以把 fa-facebook 等换成你喜欢的:比如 fa-instagram, fa-github, fa-youtube 等。
  2. 修改主题颜色
    • .icon-list li:nth-child(n) span 中更改 background 值即可改变层的颜色搭配。
  3. 修改位移距离和角度
    • translate(40px, -40px) 可以改成任何数值,比如 (30px, -50px) 等,创造不同方向和错落感。
    • 也可以把 rotate(-30deg) skew(25deg) 改成其他角度。
  4. 鼠标移开时还原
    • 本示例是鼠标移开就自动还原,如果你想做不一样的动画,可以增加 :hover 之外的默认样式定义,比如:
      .icon-item span:nth-child(5) {transform: translate(0, 0);opacity: 1;
      }
      .icon-item span:nth-child(4) {transform: translate(0, 0);opacity: 1;
      }
      /* 依此类推 */
      
      这样就能确保鼠标移开后回到初始叠加状态。

总结

通过以上分步骤的讲解,你应该能清晰地知道代码是如何搭建与运行的:

  1. 搭建基础 HTML:列表 & 链接 & 图标占位
  2. 初始样式布局:使用 flex 居中,把列表横向摆放
  3. 图标倾斜或旋转transform 基本变换
  4. 多层 <span>:为图标增加分层结构
  5. 定位与颜色:用绝对定位让所有 <span> 重叠,分配不同的背景色
  6. 鼠标悬停动画:通过 :hover 改变 translateopacity,让各层散开

就这样,一个简洁的分层旋转社交图标效果就完成了。希望这个拆解式教程能帮助你理解各部分的功能,并在实际项目中灵活运用。祝你学习愉快!

参考链接

https://github.com/Chalarangelo/30-seconds-of-code

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pytest框架源码分析五】pytest插件的注册流程

前文介绍到pytest整体是运用插件来实现其运行流程的。这里仔细介绍下具体过程。 首先进入main方法 def main(args: list[str] | os.PathLike[str] | None None,plugins: Sequence[str | _PluggyPlugin] | None None, ) -> int | ExitCode:"""Perform an i…

谷歌or-tools开源库入门

1.命令行编译程序 这里要说明下&#xff0c;直接用qt或者VS2022打开cmake工程&#xff0c;编译没有成功。所以&#xff0c;老老实实的按照官方教程来&#xff0c;使用命令行编译。 &#xff08;1&#xff09;准备 1&#xff09;安装cmake&#xff0c;版本3.18以上&#xff0…

Python实现WYY音乐下载

一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…

拥抱健康生活,开启养生之旅

在快节奏的现代生活中&#xff0c;健康养生愈发重要&#xff0c;它不仅能让我们保持良好状态&#xff0c;更是享受美好生活的基石。​ 饮食养生是健康的关键。我们应秉持均衡原则&#xff0c;一日三餐合理搭配。多摄入新鲜蔬果&#xff0c;它们富含维生素、矿物质与膳食纤维&a…

《Waf 火绒终端防护绕过实战:系统程序副本+Certutil木马下载技术详解》

目录 绕过火绒终端安全软件的详细方法 方法一&#xff1a;利用系统程序副本绕过命令监控 方法二&#xff1a;结合certutil.exe副本下载并执行上线木马 注意事项 总结 实际案例解决方案 前提条件 详细操作步骤 1. 攻击主机&#xff08;VPS&#xff09;上的准备工作 2.…

机器学习概要

文章目录 一、什么是机器学习 二、机器学习的种类 1. 有监督学习 2. 无监督学习 3.强化学习 三、机器学习的应用 四、机器学习的步骤 1. 数据的重要性 2. 数据和学习的种类 3. 可视化 一、什么是机器学习 机器学习指的是计算机根据给定的问题、课题或环境进行学习&a…

C# Winform 实现换肤,并自定义皮肤功能

具体实现原理详见 SkinHelp.cs类&#xff0c;实现了对原有控件的重绘&#xff0c;详见源码 public abstract class SkinHelp{private static SkinColor _currentSkinColor SkinColor.Default;private static BackgroundStripe _currentStripe BackgroundStripe.Default;priva…

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介&#xff1a; 本板为模拟量高速采样板&#xff08;ADI&#xff09;&#xff0c;主要用于电机转速和相电流检测&#xff0c;以实现电机闭环控制。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#xff0c;DC24V FPGA&#xff1a;…

python爬虫概述

0x00 python爬虫概述 以豆瓣的选电影模块为例&#xff0c;当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的 这时服务器的工作方式应该是这样的 客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码) 当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据…

win10 如何用我的笔记本 接网线 远程控制 台式机

1.查看笔记本ip&#xff0c;台式机ip。确保在同一网段 可以ping通 1.1 ip在同一网段&#xff0c;但是ping不通 1.解决&#xff1a;把双方防火墙关闭 2.解决&#xff1a;当前网口&#xff0c;先禁用再启用 以上两台电脑就可以ping通了 2.设置双方电脑 启动远程控制 此电脑-》…

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛&#xff0c;做这个的作用呢&#xff0c;1是商场的所有商户员工可以看平面或者视频随时自学&#xff0c; 2是我们定期培训必修课程、考试&#xff0c;这个需要留存他们的手签字的签到表确认我们讲给他们听了&#xff08;免责很重要&am…

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤n≤105&#xff0c;0 ≤ai≤109&#xff0c;0 ≤k≤109 要求&am…

Quartz知识点总结

简单说明 简单的定时任务使用Timer或者ScheduledExecutorService quartz支持复杂的定时执行功能。支持ram存储&#xff08;内存存储&#xff09;和持久化存储。quartz有分布式和集群能力 简单使用 获取任务调度器Schedule。任务调度器可以管理任务。创建任务实例。使用JobB…

C语言每日一练——day_12(最后一天)

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第十二天。&#xff08;最后一天&#xff0c;完结散花啦&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff0…

【宇宙回响】从Canvas到MySQL:飞机大战的全栈交响曲【附演示视频与源码】

&#x1f31f; 这是星际大战系列的第三篇送福利文章&#xff0c;感谢一路以来支持和关注这个项目的每一位朋友&#xff01; &#x1f4a1; 文章力求严谨&#xff0c;但难免有疏漏之处&#xff0c;欢迎各位朋友指出&#xff0c;让我们一起在交流中进步。 &#x1f381; 项目代码…

数据结构知识点1

目录 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 1.2空间复杂度&#xff1a; 二、装箱和拆箱 三、泛型 3.1泛型类的使用&#xff1a; 3.2泛型的上界&#xff1a; 3.3泛型方法&#xff1a; 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 时间复杂…

华为ipd流程华为流程体系管理华为数字化转型流程数字化管理解决方案介绍81页精品PPT

华为流程体系最佳实践主要包括构建完善的流程框架&#xff0c;明确各层级流程要素与职责&#xff0c;梳理涵盖研发、采购、营销、服务、资产管理等多领域的流程&#xff0c;通过梳理业务场景和核心能力搭建差异化流程框架&#xff0c;采用自上而下与自下而上相结合的建模方法&a…

在大数据开发中ETL是指什么?

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字经济时代&#xff0c;数据已成为企业最核心的资产。然而&#xff0c;分散在业务系统、日志文件…

Collection系列集合的小结+集合并发修改异常问题

一、Collection系列集合的小结 二、补充知识&#xff1a;集合的并发修改异常问题 三、Collection的其他相关知识 1. 前置知识&#xff1a;可变参数 2. 集合的工具类&#xff1a;Collections 3. 综合案例&#xff1a;斗地主游戏 &#xff08;1&#xff09;创建Card类 public c…

QT Quick(C++)跨平台应用程序项目实战教程 2 — 环境搭建和项目创建

目录 引言 1. 安装Qt开发环境 1.1 下载Qt安装包 1.2 安装Qt 1.3 安装Visual Studio 2022 1.4 在Visual Studio 2022中安装Qt插件 1.5 在Visual Studio 2022中安装大模型编程助手 2. 创建Qt Quick项目 2.1 创建新项目 2.2 项目结构 2.3 运行项目 3. 理解项目代码 3…