html超市代码,前端 CSS : 5# 纯 CSS 实现24小时超市

介绍

原文链接

感謝 comehope 大佬的 [前端每日实战]

效果预览

bVboWfc?w=865&h=518

源代码地址

代码解读

1. html 结构

命名规则使用了 BEM

常规样式初始化

* {

margin: 0;

padding: 0;

box-sizing: border-box;

}

body {

height: 100vh;

overflow: hidden;

}

2. 街道背景

街道背景分为两部分

深蓝色的天空

.street {

height: 100vh;

position: relative;

display: flex;

justify-content: center;

align-items: flex-end;

background-color: #0b2e4e;

overflow: hidden;

}

黑色的地面

.street::before {

content: "";

position: absolute;

bottom: 0;

left: 0;

right: 0;

width: 100%;

height: 25vh;

background-color: #000000;

}

3. 超市

超市, 首先创建一个长方形代表超市

.market {

position: relative;

display: flex;

width: 520px;

height: 270px;

background-color: #fffecc;

border: 4px solid #333333;

}

接着给超市增加 24 HOURS 的标识, 需要在 market 下增加一个 span 标签

24 hours

生意好的超市必然亮堂堂

.market {

box-shadow: 0 22px 110px 12px #f5efa1;

}

增大超市(正方形的上 border ), 用于存放标识

.market {

border-top-width: 50px;

}

将标识定位到上 border, 并给其添加发光样式

.market__name {

position: absolute;

top: -38px;

left: 20px;

font-family: sans-serif;

font-size: 1.4em;

letter-spacing: 0.4em;

color: #bdf8ff;

text-transform: uppercase;

text-shadow: 0px 0px 9px #95cfef;

}

再给该标识添加闪烁动画

.market__name {

animation: signboardFlashes 5s infinite alternate linear;

}

/* keyframes */

@keyframes signboardFlashes {

0% {

opacity: 1;

}

35% {

opacity: 1;

}

36% {

opacity: 0;

}

37% {

opacity: 1;

}

70% {

opacity: 1;

}

72% {

opacity: 0;

}

73% {

opacity: 1;

}

74% {

opacity: 0;

}

75% {

opacity: 1;

}

100% {

opacity: 1;

}

}

接着需要给超市增加 4 扇门, 并基于基础的样式

24 hours

.market__fold {

position: relative;

width: 25%;

border: 8px solid #000000;

}

/* 此处无法在 .market__fold 使用 inset 替代 */

.market__fold::before {

content: "";

position: absolute;

top: 0;

left: 0;

bottom: 0;

right: 0;

width: 100%;

height: 100%;

box-shadow: 0 0 2px 1px #f3f1d5;

}

门是感应门, 当有生物靠近才会打开, 所以打开的动画等一下完成

4. 月亮

在 market 中添加 moon

通过绝对定位将其移动到超市的上方, 并添加动画效果

.moon {

position: absolute;

top: -125px;

left: -50px;

width: 40px;

height: 40px;

background-color: #ffffc9;

border-radius: 50%;

box-shadow: 0 0 20px 1px #ffffc9;

animation: moonMoves 360s infinite alternate linear;

}

@keyframes moonMoves {

0% {

transform: translate(0, 0);

}

50% {

transform: translate(300px, -10px);

}

100% {

transform: translate(600px, 0);

}

}

5. 原地踏步的猫

在 market 添加 cat

首先给予一个轮廓方便观察

.cat {

--cat-color: red;

position: absolute;

left: -200px;

bottom: -24px;

width: 46px;

height: 30px;

margin: auto;

color: var(--cat-color);

background-color: var(--cat-color);

border-radius: 30px;

}

修改猫的 DOM 结构, 添加头, 尾巴, 四肢

然后依次给予其样式

首先是头部, 头部使用伪元素形成耳朵, 并添加头部晃动效果

.cat__head {

position: absolute;

right: -10px;

top: -8px;

width: 24px;

height: 24px;

background-color: inherit;

border-radius: 50%;

animation: catMovesHead 0.3s infinite linear;

}

.cat__head::before, .cat__head::after {

content: "";

position: absolute;

top: 0;

width: 10px;

height: 10px;

background-color: inherit;

border-radius: 2px;

}

.cat__head::before {

left: 2px;

transform: rotate(16deg);

}

.cat__head::after {

right: 2px;

transform: rotate(-16deg);

}

@keyframes catMovesHead {

0% {

transform: translateY(0);

}

50% {

transform: translateY(2px);

}

100% {

transform: translateY(0);

}

}

添加尾巴及动画效果(尾巴由椭圆形的一半构成)

.cat__tail {

position: absolute;

left: -18px;

top: -22px;

width: 30px;

height: 42px;

border-radius: 50%;

border: 7px solid var(--cat-color);

border-left-color: transparent;

border-bottom-color: transparent;

transform-origin: right;

animation: catMovesTail 0.3s infinite linear;

}

@keyframes catMovesTail {

0% {

transform: rotate(0);

}

50% {

transform: rotate(-3deg);

}

100% {

transform: rotate(0);

}

}

猫咪的四肢

.cat__leg {

position: absolute;

bottom: -12px;

width: 6px;

height: 20px;

background-color: inherit;

border-radius: 3px;

transform-origin: top;

}

将四肢分开和添加动画

.cat__leg--1, .cat__leg--2 {

left: 5px;

}

.cat__leg--3, .cat__leg--4 {

right: 5px;

}

.cat__leg--1, .cat__leg--3 {

transform: rotate(24deg);

animation: catMovesLegs 0.6s infinite linear;

}

.cat__leg--2, .cat__leg--4 {

transform: rotate(-24deg);

animation: catMovesLegs 0.6s infinite -0.3s linear;

}

@keyframes catMovesLegs {

0% {

transform: rotate(36deg);

}

50% {

transform: rotate(-36deg);

}

100% {

transform: rotate(36deg);

}

}

6. 猫过门开

给予猫一个整体的动画

.cat {

animation: catRuns 20s infinite linear;

}

@keyframes catRuns {

0% {

transform: translateX(0) rotateY(0);

}

70% {

transform: translateX(800px) rotateY(0);

}

71% {

transform: translateX(1000px) rotateY(180deg);

}

100% {

transform: translateX(0) rotateY(180deg);

}

}

修改超市门的 DOM 上的 class

再增加开关门的效果, 根据上方猫的花费时间进行计算, 取一样的时间更方便一些

.market__fold--left {

animation: doorMovesLeft 20s infinite linear;

}

.market__fold--right {

animation: doorMovesRight 20s infinite linear;

}

@keyframes doorMovesLeft {

0% {

transform: translateX(0);

}

28% {

transform: translateX(0);

}

30% {

transform: translateX(-90%);

}

54% {

transform: translateX(-90%);

}

56% {

transform: translateX(0);

}

83% {

transform: translateX(0);

}

85% {

transform: translateX(-90%);

}

97% {

transform: translateX(-90%);

}

99% {

transform: translateX(0);

}

100% {

transform: translateX(0);

}

}

@keyframes doorMovesRight {

0% {

transform: translateX(0);

}

28% {

transform: translateX(0);

}

30% {

transform: translateX(90%);

}

54% {

transform: translateX(90%);

}

56% {

transform: translateX(0);

}

83% {

transform: translateX(0);

}

85% {

transform: translateX(90%);

}

97% {

transform: translateX(90%);

}

99% {

transform: translateX(0);

}

100% {

transform: translateX(0);

}

}

最后就这样大功告成了

不过记得把猫的颜色改回来

/* 猫 */

.cat {

--cat-color: #000000;

}

7. 补充

最后切换为移动端时注意到 超市会横向占满, 通过 padding 设置一个空隙即可

.street {

padding: 0 6vw 115px;

}

感想

最近忙着学习 Koa, 结果 CSS 感觉忘得差不多了,唉

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

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

相关文章

送30块树莓派PICO 开发板!

大家好,今天是周日,给大家搞个小抽奖,送30块。嵌入式猛男必备,学嵌入式看『我要学嵌入式』,知识持久有力。点击关注,回复【1031】参与抽奖,免费送 10块 树莓派最新PICO开发板。学C语言看『写代码…

嘉立创又搞大事情了,与你我相关!

你们一定不知道嘉立创最近又悄咪咪的做了一件大事儿,硬创社硬件项目共享平台上线公测啦,这是一个帮助电子工程师实现技术变现的平台,平台刚刚上线公测,前期还在邀请电子工程师填充内容阶段,即日起平台每上传一个项目就…

c html联调,JS与native 交互简单应用

JS与native 交互简单应用一、objectiveC 语法简介二、简易项目浏览器搭建新建项目步骤:1>DraggedImage.png2>2222.png3>33333.png4>4444.png建立一个小的浏览器即webview关键代码如下:// context 上下文也可以在此处获取,开始加载…

写给我弟

我堂弟今年24岁,也是我最小的一个堂弟,我想给他说点事,想告诉他一些东西,但是也担心自己所说的,并不能让他认同和接受。我心里一定是有我弟的,也是装着我弟的,所以我弟的事情,我自己…

Chrome插件(扩展)

【干货】Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处。本文所有涉及到的大部分代码均在这个demo里面:https://github.com…

Apache OpenJPA 2.1.0 发布

OpenJPA 是 Apache 组织提供的开源项目,它实现了 EJB 3.0 中的 JPA 标准,为开发者提供功能强大、使用简单的持久化数据管理框架。OpenJPA 封装了和关系型数据库交互的操作,让开发者把注意力集中在编写业务逻辑上。OpenJPA 可以作为独立的持久…

手把手带你写一个中断输入设备驱动

今天群里有人问,要开始驱动开发的话从什么开始比较好。我说,应该开始去摸索触摸屏驱动,现在我想了下,触摸屏驱动可能会难了些,但是从一个GPIO开始,我觉得一定是一件很容易的事情。所以这篇文章就来了。大家…

驱动调试神器printk你掌握了吗?

[导读] 刚刚开始做Linux相关开发工作时,深感Linux内核代码庞大,要加些自己的驱动进内核代码树,常常深陷bug的泥沼难以自拔,今天来分享一下内核调试利器printk的使用心得。前面一段时间很忙,后期更文频率会渐渐回归正常…

腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案。目前负责腾讯云中间件产…

二十世纪最伟大的算法,你了解哪个?

导读:作者July总结了一篇关于计算方法的文章《 细数二十世纪最伟大的10大算法 》。一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known …

桌面计算机恢复出厂设置,windows7电脑怎么恢复出厂设置

我们使用电脑一段时间,由于各种问题,希望将电脑恢复出厂设置,那么windows7电脑怎么恢复出厂设置呢?下面跟着学习啦小编来一起了解下windows7电脑恢复出厂设置的方法吧。windows7电脑恢复出厂设置方法一按下开机键,启动…

关于Exchange管理控制台报“您的权限不足,无法此查看数据”的解决办法

今天朋友突然来电话,说自己的Exchange 2010 EMC突然报“you dont have sufficient permissions to view this data”(您的权限不足,无法查看此数据),同时所有的cmdlet命令也不可以执行。询问我解决办法,出错…

内存为什么还有管理?

本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友&…

旧手机别扔,手把手教你DIY一台Linux服务器

作者:Hannah Lee编译:弯月 欧阳姝黎来源:CSDN(ID:CSDNnews)本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机上搭建一台备份服务器。旧手机的污染问题众所周知,我有一台旧…

学计算机买电脑显卡1605ti够吗,GTX1650和GTX1050Ti哪个好?GTX1050ti和GTX1650性能差距对比评测...

GTX1650显卡在2019年4月22日进行发售,不少用户认为GTX1650是智商检测卡,真的是吗?从命名上来看,GTX1650应该是GTX1050的升级产品,不过根据英伟达的说法,GTX1650相比GTX1050提升幅度达到了70%,但…

Gamma的传说

Gamma校正对于图形和图像来说是个常提的概念,但对于gamma的缘由和使用方法,却存在着很多传说。本文将尽可能解析gamma校正来源,破解各种迷思。Gamma校正从何而来 有一种常见的说法,gamma来源于眼睛对光感受。我也曾经错误地采用了…

心急吃不了热豆腐

良好的焊接是保证电路稳定持久工作的前提。下面给出了常见到的焊接缺陷。看看你遇到过多少种?▲ 图1 焊接中的常见问题▲ 图2 锡珠▲ 图3 扰动的焊接:在焊接点冷却过程中焊锡移动,造成焊接表面起雾、结晶、粗糙▲ 图4 立碑▲ 图5 冷结&…

给电子类大学生一点求职建议

‍读大学的时候应该想清楚以后要干嘛,不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会,这个数字多少会给你点压力吧。因为我是专业对口的,所以我就从对口的角度,说下我们电子信息类专业学的啥以及怎么学。有很多人在…

Silverlight三维柱状图3D饼图的Silverlight图表组件案例

Silverlight三维柱状图3D饼图的Silverlight图表组件案例 开发环境:Visual Studio 2010 Silverlight 4 SQL2005 Silverlight开发的3D图表组件与及应用的项目截图: 本Silverlight开发的图表控件程序架构简洁清淅,是做二次开发的良好项目框架和核…

oppo专用计算机,OPPO手机助手

OPPO手机助手是OPPO官方最安全的手机助手,将OPPO手机和电脑连接后,可通过“OPPO手机助手”在电脑上管理手机中的应用程序、短信、通讯录(含通话记录)和图片等,还能在电脑上备份手机中的资料。OPPO手机助手是oppo手机的贴心管家。华军软件园提…