分享实现地铁车辆侧面图

简介

通过伪类和关键帧动画实现地铁车辆侧面图

在线演示

伪元素和关键帧动画

实现代码

<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="always" name="referrer"><meta name="theme-color" content="#ffffff">
<meta name="description" content="">
<title>伪元素和关键帧动画</title>
<style>
.loading{--ballSize: 10px;--containerSize: 150px;--duration: 2s;--barderWidth: 3px;width: var(--containerSize);height: var(--containerSize);border: 1px solid #12332100;margin: 50px auto;position: relative;border-radius:50%;
}
.loading:before{content: '';position: absolute;left: calc( 50% - var(--ballSize) / 2 - var(--barderWidth) );top: calc( 40% - var(--ballSize) / 2 - var(--barderWidth)  );width: var(--ballSize);height: var(--ballSize);border-radius: 50%;background: transparent;border-top: 0 solid gray;border-left: var(--barderWidth) solid gray;border-right:  var(--barderWidth) solid gray;border-bottom:  0 solid gray;animation: run 3s ease-in infinite;
}
.loading:after{content: '';position: absolute;left: calc( 50% - var(--ballSize) / 2 - var(--barderWidth) / 10 );top: calc( 50% - var(--ballSize) / 2 - 4*var(--barderWidth) );width: calc( var(--ballSize) / 2 );height: calc( var(--ballSize) / 2 );border-radius: 50%;background: transparent;border-top: 0 solid gray;border-left: var(--barderWidth) solid gray;border-right: var(--barderWidth) solid gray;border-bottom: 0 solid gray;animation: run 2s ease-out infinite;
}
@keyframes run {0%{border-color: #00ff0022;}25%{border-color: #00ff0044;}50%{border-color: #00ff0088;}75%{border-color: #00ff00aa;}100%{border-color: #00ff00;}
}
.dot{position: absolute;left: 50%;top: 0;width: var(--ballSize);height: var(--ballSize);margin-left: calc( var(--ballSize) / (-2) );margin-top: calc( var(--ballSize) / (-2) );background: #65432123;transform-origin: center calc( var(--containerSize) / 2 +  var(--ballSize) / 2 );perspective: 70px;transform-style: preserve-3d;
}.dot:nth-child(1){transform: rotate(0deg);
}
.dot:nth-child(1)::before,.dot:nth-child(1)::after{animation-delay: calc( var(--duration) / 36 * ( 1 - 1)*6*-1 );
}.dot:nth-child(2){transform: rotate(10deg);
}
.dot:nth-child(2)::before,.dot:nth-child(2)::after{animation-delay: calc( var(--duration) / 36 * ( 2 - 1 )*6*-1 );
}
.dot:nth-child(3){transform: rotate(20deg);
}
.dot:nth-child(3)::before,.dot:nth-child(3)::after{animation-delay: calc( var(--duration) / 36 * ( 3 - 1 )*6*-1 );
}
.dot:nth-child(4){transform: rotate(30deg);
}
.dot:nth-child(4)::before,.dot:nth-child(4)::after{animation-delay: calc( var(--duration) / 36 * ( 4 - 1 )*6*-1 );
}
.dot:nth-child(5){transform: rotate(40deg);
}
.dot:nth-child(5)::before,.dot:nth-child(5)::after{animation-delay: calc( var(--duration) / 36 * ( 5 - 1 )*6*-1 );
}
.dot:nth-child(6){transform: rotate(50deg);
}
.dot:nth-child(6)::before,.dot:nth-child(6)::after{animation-delay: calc( var(--duration) / 36 * ( 6 - 1 )*6*-1 );
}
.dot:nth-child(7){transform: rotate(60deg);
}
.dot:nth-child(7)::before,.dot:nth-child(7)::after{animation-delay: calc( var(--duration) / 36 * ( 7 - 1 )*6*-1 );
}
.dot:nth-child(8){transform: rotate(70deg);
}
.dot:nth-child(8)::before,.dot:nth-child(8)::after{animation-delay: calc( var(--duration) / 36 * ( 8 - 1 )*6*-1 );
}
.dot:nth-child(9){transform: rotate(80deg);
}
.dot:nth-child(9)::before,.dot:nth-child(9)::after{animation-delay: calc( var(--duration) / 36 * ( 9 - 1 )*6*-1 );
}
.dot:nth-child(10){transform: rotate(90deg);
}
.dot:nth-child(10)::before,.dot:nth-child(10)::after{animation-delay: calc( var(--duration) / 36 * ( 10 - 1 )*6*-1 );
}
.dot:nth-child(11){transform: rotate(100deg);
}
.dot:nth-child(11)::before,.dot:nth-child(11)::after{animation-delay: calc( var(--duration) / 36 * ( 11 - 1 )*6*-1 );
}
.dot:nth-child(12){transform: rotate(110deg);
}
.dot:nth-child(12)::before,.dot:nth-child(12)::after{animation-delay: calc( var(--duration) / 36 * ( 12 - 1 )*6*-1 );
}
.dot:nth-child(13){transform: rotate(120deg);
}
.dot:nth-child(13)::before,.dot:nth-child(13)::after{animation-delay: calc( var(--duration) / 36 * ( 13 - 1 )*6*-1 );
}
.dot:nth-child(14){transform: rotate(130deg);
}
.dot:nth-child(14)::before,.dot:nth-child(14)::after{animation-delay: calc( var(--duration) / 36 * ( 14 - 1 )*6*-1 );
}
.dot:nth-child(15){transform: rotate(140deg);
}
.dot:nth-child(15)::before,.dot:nth-child(15)::after{animation-delay: calc( var(--duration) / 36 * ( 15 - 1 )*6*-1 );
}
.dot:nth-child(16){transform: rotate(150deg);
}
.dot:nth-child(16)::before,.dot:nth-child(16)::after{animation-delay: calc( var(--duration) / 36 * ( 16 - 1 )*6*-1 );
}
.dot:nth-child(17){transform: rotate(160deg);
}
.dot:nth-child(17)::before,.dot:nth-child(17)::after{animation-delay: calc( var(--duration) / 36 * ( 17 - 1 )*6*-1 );
}
.dot:nth-child(18){transform: rotate(170deg);
}
.dot:nth-child(18)::before,.dot:nth-child(18)::after{animation-delay: calc( var(--duration) / 36 * ( 18 - 1 )*6*-1 );
}
.dot:nth-child(19){transform: rotate(180deg);
}
.dot:nth-child(19)::before,.dot:nth-child(19)::after{animation-delay: calc( var(--duration) / 36 * ( 19 - 1 )*6*-1 );
}
.dot:nth-child(20){transform: rotate(190deg);
}
.dot:nth-child(20)::before,.dot:nth-child(20)::after{animation-delay: calc( var(--duration) / 36 * ( 20 - 1 )*6*-1 );
}
.dot:nth-child(21){transform: rotate(200deg);
}
.dot:nth-child(21)::before,.dot:nth-child(21)::after{animation-delay: calc( var(--duration) / 36 * ( 21 - 1 )*6*-1 );
}
.dot:nth-child(22){transform: rotate(210deg);
}
.dot:nth-child(22)::before,.dot:nth-child(22)::after{animation-delay: calc( var(--duration) / 36 * ( 22 - 1 )*6*-1 );
}
.dot:nth-child(23){transform: rotate(220deg);
}
.dot:nth-child(23)::before,.dot:nth-child(23)::after{animation-delay: calc( var(--duration) / 36 * ( 23 - 1 )*6*-1 );
}
.dot:nth-child(24){transform: rotate(230deg);
}
.dot:nth-child(24)::before,.dot:nth-child(24)::after{animation-delay: calc( var(--duration) / 36 * ( 24 - 1 )*6*-1 );
}
.dot:nth-child(25){transform: rotate(240deg);
}
.dot:nth-child(25)::before,.dot:nth-child(25)::after{animation-delay: calc( var(--duration) / 36 * ( 25 - 1 )*6*-1 );
}
.dot:nth-child(26){transform: rotate(250deg);
}
.dot:nth-child(26)::before,.dot:nth-child(26)::after{animation-delay: calc( var(--duration) / 36 * ( 26 - 1 )*6*-1 );
}
.dot:nth-child(27){transform: rotate(260deg);
}
.dot:nth-child(27)::before,.dot:nth-child(27)::after{animation-delay: calc( var(--duration) / 36 * ( 27 - 1 )*6*-1 );
}
.dot:nth-child(28){transform: rotate(270deg);
}
.dot:nth-child(28)::before,.dot:nth-child(28)::after{animation-delay: calc( var(--duration) / 36 * ( 28 - 1 )*6*-1 );
}
.dot:nth-child(29){transform: rotate(280deg);
}
.dot:nth-child(29)::before,.dot:nth-child(29)::after{animation-delay: calc( var(--duration) / 36 * ( 29 - 1 )*6*-1 );
}
.dot:nth-child(30){transform: rotate(290deg);
}
.dot:nth-child(30)::before,.dot:nth-child(30)::after{animation-delay: calc( var(--duration) / 36 * ( 30 - 1 )*6*-1 );
}
.dot:nth-child(31){transform: rotate(300deg);
}
.dot:nth-child(31)::before,.dot:nth-child(31)::after{animation-delay: calc( var(--duration) / 36 * ( 31 - 1 )*6*-1 );
}
.dot:nth-child(32){transform: rotate(310deg);
}
.dot:nth-child(32)::before,.dot:nth-child(32)::after{animation-delay: calc( var(--duration) / 36 * ( 32 - 1 )*6*-1 );
}
.dot:nth-child(33){transform: rotate(320deg);
}
.dot:nth-child(33)::before,.dot:nth-child(33)::after{animation-delay: calc( var(--duration) / 36 * ( 33 - 1 )*6*-1 );
}
.dot:nth-child(34){transform: rotate(330deg);
}
.dot:nth-child(34)::before,.dot:nth-child(34)::after{animation-delay: calc( var(--duration) / 36 * ( 34 - 1 )*6*-1 );
}
.dot:nth-child(35){transform: rotate(340deg);
}
.dot:nth-child(35)::before,.dot:nth-child(35)::after{animation-delay: calc( var(--duration) / 36 * ( 35 - 1 )*6*-1 );
}
.dot:nth-child(36){transform: rotate(350deg);
}
.dot:nth-child(36)::before,.dot:nth-child(36)::after{animation-delay: calc( var(--duration) / 36 * ( 36 - 1 )*6*-1 );
}.dot::before,.dot::after{content: '';position: absolute;left: 0;top: 0;width: var(--ballSize);height: var(--ballSize);border-radius: 50%;
}
.dot::before{background: #123456;top: -100%;animation: rotate-black var(--duration) infinite;}
@keyframes rotate-black{0%{animation-timing-function: ease-in;}25%{transform: translate3d(0,100%,10px);animation-timing-function: ease-out;}50%{transform: translate3d(0,200%,0);animation-timing-function: ease-in;}75%{transform: translate3d(0,100%,-10px);animation-timing-function: ease-out;}}.dot::after{background: red;top: 100%;animation: rotate-red var(--duration) infinite;
}
@keyframes rotate-red{0%{animation-timing-function: ease-in;}25%{transform: translate3d(0,-100%,-10px);animation-timing-function: ease-out;}50%{transform: translate3d(0,-200%,0);animation-timing-function: ease-in;}75%{transform: translate3d(0,-100%,10px);animation-timing-function: ease-out;}}.train {--speed: 1s;display: black;align-items: center;box-sizing: border-box;flex: 1;height: 100px;padding: 0 60px;padding-top: 20px;flex-wrap: wrap;
}
.content_item {display: flex;align-items: center;justify-content: space-between;flex: 1;padding: 0 8px;
}
.carriageUp {background: #eaeaeb;box-shadow: 0px 20px 20px 5px #01071788;height: 100%;display: flex;align-items: center;justify-content: space-around;color: #a2a7b5;font-size: 14px;font-weight: bold;border-top-left-radius: 5px;border-top-right-radius: 5px;width: calc( ( 100% - (8 - 1) * 8px) / 8);cursor: pointer;
}
.carriageUp::before{content: "";position: relative;z-index: 1;width: 40px;height: 20px;border-radius: 2px;background-color: #dbdbe6;box-shadow: 1px -1px 1px 1px #0000004d;top: 0px;left: 0px;
}
.carriageUp::after{content: "";position: relative;z-index: 1;width: 40px;height: 20px;border-radius: 2px;background-color: #dbdbe6;box-shadow: 1px -1px 1px 1px #0000004d;top: 0px;right: 0px;
}
.carriageUp:first-child{border-top-left-radius: 80px;
}
.carriageUp:last-child{border-top-right-radius: 80px;
}
.carriageUp:first-child::before{left: -5px;border-top-left-radius: 20px;border-bottom-left-radius: 5px;width: 40px;
}
.carriageUp.openmc1:first-child::before{background: #4ebe11;
}
.carriageUp:last-child::after{right: -5px;border-top-right-radius: 20px;border-bottom-right-radius: 5px;width: 40px;
}
.carriageUp.openmc2:last-child::after{background: #4ebe11;
}
.carriageDown {background: #eaeaeb;height: 100%;display: flex;align-items: center;justify-content: center;color: #a2a7b5;font-size: 20px;font-weight: bold;border-radius: 1px;border-top: 10px solid #dbdbe6;width: calc( ( 100% - (8 - 1) * 8px) / 8);
}
.carriageDown::before{content: "";position: relative;z-index: 1;width: 40px;height: 40px;border-radius: 20px;background-color: #dbdbe6;box-shadow: 0px -1px 1px 1px #0000004f;top: 0px;left: -20px;animation: runRight calc( var(--speed)/24 ) linear infinite;
}
.carriageDown::after{content: "";position: relative;z-index: 1;width: 40px;height: 40px;border-radius: 20px;background-color: #dbdbe6;box-shadow: 0px -1px 1px 1px #0000004f;top: 0px;right: -20px;animation: runRight calc( var(--speed)/24 ) linear infinite;
}
.carriageDown:first-child{border-bottom-left-radius: 80px;
}
.carriageDown:last-child{border-bottom-right-radius: 80px;
}.content_item:first-child{height: 80%;
}
.content_item:last-child{height: 20%;
}@keyframes runRight{0%{transform: rotate(0deg) scale(0.96);}25%{transform: rotate(-90deg) scale(0.98);}50%{transform: rotate(-180deg) scale(1);}75%{transform: rotate(-270deg) scale(0.98);}100%{transform: rotate(-360deg) scale(0.96);}
}@keyframes runLeft{0%{transform: rotate(0deg) scale(0.96);}25%{transform: rotate(90deg) scale(0.98);}50%{transform: rotate(180deg) scale(1);}75%{transform: rotate(270deg) scale(0.98);}100%{transform: rotate(360deg) scale(0.96);}
}</style>
</head><body><div class="loading"><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div><div class="dot"></div>
</div><div class="train"><div class="content_item"><div class="carriageUp openmc1"></div><div class="carriageUp"></div><div class="carriageUp"></div><div class="carriageUp"></div><div class="carriageUp"></div><div class="carriageUp"></div><div class="carriageUp"></div><div class="carriageUp"></div></div><div class="content_item"><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div><div class="carriageDown"></div></div>
</div><div style="width: 100%;height: 30px;background:#123456;"></div><script></script></body></html>

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

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

相关文章

设计模式之单例模式(Java)

单例模式实现方式&#xff1a;懒汉式、饿汉式、双重检查、枚举、静态内部类&#xff1b; 懒汉式&#xff1a; /*** 懒汉式单例模式* author: 小手WA凉* create: 2024-07-06*/ public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…

对BSV区块链的曼达拉网络通俗易懂的解释

​​发表时间&#xff1a;2023年6月15日 BSV区块链正在引入“曼达拉”升级&#xff0c;使BSV区块链网络的拓扑结构能够适配Teranode&#xff0c;适配这个可以大幅扩容的节点软件。BSV区块链上曼达拉网络的概念并不会改变整个系统的核心规则&#xff1b;相反&#xff0c;它能够引…

为什么https比http更安全

读完本文&#xff0c;希望你能明白&#xff1a; HTTP通信存在什么问题HTTPS如何改进HTTP存在那些问题HTTPS工作原理是什么 一、什么是HTTPS HTTPS是在HTTP上建立SSL加密层&#xff0c;并对传输数据进行加密&#xff0c;是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感…

【qt】如何获取本机的IP地址?

需要用到这个类QHostInfo和pro里面添加network模块 用这个类的静态函数forName()来获取该主机名的信息 返回的就是这个类 这个QHostInfo类就包括主机的IP地址信息 用静态函数addresses()来获取 返回的是一个QHostAddress的容器 QList<QHostAddress>addrList hostIn…

课题申报书中要用的思路图(技术路线图)30张,超高清!

最近在弄课题申报书的时候&#xff0c;需要画“技术路线图”&#xff1b;和小伙伴们探讨才发现很多人居然不会画这种图&#xff0c;还有很多人在Word里面一点一点拼凑…… 我给大家收集了网上非常热门的30张“技术路线图”&#xff0c;但网上流传的都太模糊了&#xff0c;想看…

KBPC3506-ASEMI储能专用整流桥KBPC3506

编辑&#xff1a;ll KBPC3506-ASEMI储能专用整流桥KBPC3506 型号&#xff1a;KBPC3506 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 正向电流&#xff08;Id&#xff09;&#xff1a;35A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;600V 正向浪涌电流&#xf…

基于RK3588的8路摄像头实时全景拼接

基于RK3588的8路摄像头实时全景拼接 输入&#xff1a;2路csi转8路mpi的ahd摄像头&#xff0c;分辨率1920 * 1080 8路拼接结果&#xff1a; 6路拼接结果&#xff1a; UI界面&#xff1a; UI节目设计原理

SpringBoot新手快速入门系列教程一:window上编程环境安装和配置

首先编译器&#xff0c;建议各位不要去尝试AndroidStudio和VisualStudio来做SpringBoot项目。乖乖的直接下载最新版即可 https://www.jetbrains.com.cn/idea/ 当然这是一个收费的IDE&#xff0c;想要便宜可以想办法去某宝买授权&#xff0c;仅供学习参考用&#xff01;赚了钱…

Matlab中collectPlaneWave函数的应用

查看文档如下&#xff1a; 可以看出最多5个参数&#xff0c;分别是阵列对象&#xff0c;信号幅度&#xff0c;入射角度&#xff0c;信号频率&#xff0c;光速。 在下面的代码中&#xff0c;我们先创建一个3阵元的阵列&#xff0c;位置为&#xff1a;&#xff08;-1,0,0&#x…

52-3 权限维持 - IFEO注入(镜像劫持)

IFEO注入(映像劫持)介绍 IFEO(Image File Execution Options)位于Windows注册表中的路径为: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options IFEO最初设计用于为在默认系统环境下可能出现错误的程序提供特殊的调试和执…

Android实现获取本机手机号码

和上次获取设备序列号一样&#xff0c;仍然是通过无障碍服务实现&#xff0c;在之前的代码基础上做了更新。代码和demo如下&#xff1a; package com.zwxuf.lib.devicehelper;import android.accessibilityservice.AccessibilityService; import android.app.Activity; import…

Bpuzzle V1.2 支持任意图片!BlueLife Puzzle (bPuzzle) 是一款简单的游戏,通过按正确的顺序滑动拼图块来玩

BlueLife Puzzle (bPuzzle) 是一款简单的游戏&#xff0c;通过按正确的顺序滑动拼图块来玩。将您选择的图像拖放到主窗口或使用文件菜单选择默认图像。如果图片格式是 JPG&#xff0c;大小无关紧要&#xff0c;但如果是 Png&#xff0c;则应为 800600 像素&#xff0c;然后 bPu…

nginx配置尝试

from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse, HTMLResponse import logging import os from datetime import datetime import uvicorn# 初始化日志 logging.basicConfig(filenamefile_server.lo…

详细的讲解一下网络变压器应用POE ,AT BT AF BF的概念,做电路连接指导分析

网络变压器在应用POE&#xff08;Power over Ethernet&#xff09;技术时&#xff0c;承担着重要的角色。它不仅负责数据的传输&#xff0c;同时也为网络设备提供电力。在IEEE 802.3标准中&#xff0c;定义了几个与POE相关的标准&#xff0c;包括802.3af、802.3at、802.3bt等&a…

智慧景区解决方案PPT(89页)

智慧景区解决方案摘要 解决方案概述智慧景区解决方案旨在利用现代信息技术解决景区管理机构面临的保护与发展矛盾&#xff0c;推动服务职能转变&#xff0c;促进旅游产业跨越式发展&#xff0c;实现旅游经营增长和管理成本优化。 宏观政策背景国家旅游局发布的《“十三五”全国…

VideoAgent——使用大规模语言模型作为代理来理解长视频

概述 论文地址&#xff1a;https://arxiv.org/pdf/2403.10517 本研究引入了一个新颖的基于代理的系统&#xff0c;名为 VideoAgent。该系统以大规模语言模型为核心&#xff0c;负责识别关键信息以回答问题和编辑视频。VideoAgent 在具有挑战性的 EgoSchema 和 NExT-QA 基准上进…

数据特征采样在 MySQL 同步一致性校验中的实践

作者&#xff1a;vivo 互联网存储研发团队 - Shang Yongxing 本文介绍了当前DTS应用中&#xff0c;MySQL数据同步使用到的数据一致性校验工具&#xff0c;并对它的实现思路进行分享。 一、背景 在 MySQL 的使用过程中&#xff0c;经常会因为如集群拆分、数据传输、数据聚合等…

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …

https 自签证书相关生成csr文件、p12文件、crt文件、jks文件、key文件、pem文件

文章目录 前言https 自签证书相关生成csr文件、p12文件、crt文件、jks文件、key文件、pem文件1, 检查openssl的版本2. 生成私钥和证书签署请求 (CSR)3. 生成自签名证书4. 将证书和私钥转换为 PKCS12 格式的密钥库5. 创建信任库 (Truststore)6. 将 PKCS12 文件转换为 JKS 文件7.…

IDEA安装IDE Eval Reset插件,30天自动续期,无限激活

第一步&#xff1a; 下载idea 注意&#xff1a;版本要是2021.2.2以下 第二步&#xff1a;快捷键CtrlAlts打开设置 第三步&#xff1a;打开下图中蓝色按钮 第四步&#xff1a;点击弹窗的 “” &#xff0c;并输入 plugins.zhile.io 点击 “ok” 第五步&#xff1a;搜索IDE Ea…