一朵好靓花送,给我司食堂大厨们【玩转CSS】

举报
叶一一 发表于 2023/05/27 20:51:37 2023/05/27
【摘要】 为了感谢提供了丰富美食的食堂大师傅们,我用CSS绘制了一个【给你花】的表情包,本文分享实现表情包的重点设计。

前因后果

之前分享过我司食堂的美食,虽然档口不多,但是美食种类会周期性的更迭。

先来报个菜名

早餐种类丰富:

菜包、素包、油条、油饼、馅饼、肉饼、鸡排夹饼。手抓饼(限定)、蒸南瓜、烤梨(限定)、玉米、红薯、紫薯饼、烧麦、蒸饺、小笼包、鸡丝面(限定)、混沌、麻花(限定)、南瓜蒸糕、松糕、烤包子(限定)、紫米蒸糕(限定)、面包片(限定)、红枣窝头、肉夹馍、粽子(限定)、面片汤、豆腐脑、疙瘩汤、胡辣汤(限定)、银耳羹(限定)、粥、牛奶、豆浆、茶叶蛋、水煮蛋、煎蛋、烤肠、各种小咸菜、芥菜咸菜丝(免费)

来张美食九宫格

换回正题

每日三餐,是我非常期待的,为了吃到食堂的早饭,我会定好闹铃早起。

最近为需求挠头,今天晚上吃了块食堂的南瓜,一下子甜到心里了,瞬间所有的烦恼忧愁都消散了。

今天在群里和群友聊天,看到最近喜欢的表情,我来了灵感,准备用CSS画朵花送给我司食堂的大厨们。

上技能

表情拆分

我们看这个表情里面是所有元素,拆分再聚合,就能实现它了。

  • 表情的脸是一个圆。
  • 表情的眼睛是两个眼,每个眼睛里的眼仁是一个圆,每个眼睛里的光亮是两个圆。
  • 表情的嘴巴,遮住上半部分是半个椭圆,上半部分还是个猫儿唇(微笑唇),下面自说怎么实现。
  • 表情的手,是两个圆。
  • 表情拿的花是六个圆,五个花瓣外加一个花蕊。
  • 送花的动画效果,手和花上下移动,这个时候注意将花设计为一个整体,做动画效果的时候比较省力。

这样一拆分,就能了解怎么实现它了。最终将实现的所有部分组合起来就是上面预览的效果啦。

一个圆

第一个圆指的是表情的圆脑袋,圆脑袋还带一圈边框。

.face,
.hand {
  border-radius: 100%;
  border: 2px solid #d9900a;
  background: #fcf08b;
  position: absolute;
}
.face {
  width: 80px;
  height: 80px;
  top: 0;
  left: 0;
}

两个圆

两个圆是表情的两个眼睛。

白色的大圆是眼仁。

为了表现眼睛亮晶晶的状态,又给眼睛加了两个光点,光点不必单加元素,使用::after和::before伪元素即可。

.eye {
  width: 20px;
  height: 20px;
  border-radius: 100%;
  background: #5a2407;
  box-shadow: -7px 16px 4px -11px #8e4e1b inset;
  position: absolute;
  z-index: 99;
}
.eye1 {
  left: 6px;
  top: 15px;
}
.eye2 {
  left: 37px;
  top: 12px;
}
.eye::after,
.eye::before {
  content: '';
  width: 3px;
  height: 3px;
  background: #fff;
  border-radius: 100%;
  position: absolute;
  opacity: 0.8;
}
.eye::before {
  left: 4px;
  bottom: 4px;
}
.eye::after {
  right: 5px;
  bottom: 2px;
}
.eye-inner {
  width: 7px;
  height: 7px;
  background: #fff;
  border-radius: 100%;
  position: absolute;
  top: 3px;
  left: 7px;
  opacity: 0.8;
}

半个椭圆

这个椭圆是表情的嘴巴,不过只有椭圆呈现出来的效果一般。

想要更好的效果,还得像表情那样加个猫儿唇。

弧线是比较难实现的,还得有点技巧。我一般是用个椭圆设置单边边框,就能实现弧线。别说,效果还挺好。

.mouth {
  width: 20px;
  height: 26px;
  background: #732a04;
  border-radius: 0 0 100% 100%;
  position: absolute;
  top: 35px;
  left: 23px;
  box-shadow: 0px -15px 8px -4px #c42c02 inset;
  transform: rotate(-5deg);
}
.mouth::before,
.mouth::after {
  content: '';
  width: 18px;
  height: 10px;
  background: #fcf08b;
  border-radius: 200%;
  position: absolute;
  border-bottom: 3px solid #732a04;
}
.mouth::before {
  left: -7px;
  top: -7px;
  transform: rotate(-20deg);
}
.mouth::after {
  right: -6px;
  top: -7px;
  transform: rotate(16deg);
}

再来两个圆

这两个圆是两个小手。

  • 当遇到相似元素样式的时候,可以进行样式合并,选择器是可以用逗号间隔的,手和脸的样式重合率挺高的,所以我进行了合并。
  • 手部的动画效果,是配合花朵一起的,用动画的形式,表示送花的积极寓意。注意要上下移动,效果会更好一些。
.hand {
  width: 24px;
  height: 24px;
}

.hand1 {
  left: 47px;
  top: 59px;
  animation: hand1 0.5s linear infinite;
}
.hand2 {
  left: 70px;
  top: 50px;
  animation: hand2 0.5s linear infinite;
}
@keyframes hand1 {
  0% {
    top: 59px;
  }
  50% {
    top: 64px;
  }
  100% {
    top: 59px;
  }
}
@keyframes hand2 {
  0% {
    top: 50px;
  }
  50% {
    top: 55px;
  }
  100% {
    top: 50px;
  }
}

六个圆

最后这一圈就是花了。

  • 五个椭圆是花瓣,整体的样式相似所以五个花瓣都有共同的class类,然后再给每个花瓣设置单独的样式,进行定位和旋转。
  • 一个圆是花蕊,花蕊的背景是白色,和花瓣有区分,比较有辨识度。
  • 这里的动画效果,用animation实现,主要设置了一个上下移动的距离,且循环间隔的时间设置的0.5s,这样视觉上会好一点。
.flower {
  position: absolute;
  width: 50px;
  height: 50px;
  left: 36px;
  top: 21px;
  transform: rotate(-14deg) scale(0.9);
  animation: flower 0.5s linear infinite;
}
@keyframes flower {
  0% {
    top: 21px;
  }
  50% {
    top: 26px;
  }
  100% {
    top: 21px;
  }
}
.flower-inner {
  width: 21px;
  height: 21px;
  border: 3px solid #f1558e;
  background: #fff;
  position: absolute;
  border-radius: 100%;
  left: 20px;
  top: 20px;
  z-index: 99;
}
.petal {
  width: 20px;
  height: 24px;
  border: 3px solid #f1558e;
  background: #fcc3d7;
  position: absolute;
  border-radius: 100%;
  left: 20px;
  top: 20px;
  z-index: 29;
}

未完待续

美食吃到了,花也画出来了,好事当然要成双。

正如前面文章说过的,CSS真能玩出花。


彩蛋时刻

一组早餐六宫格,跟大家分享我的早餐的快乐时光。



作者:非职业「传道授业解惑」的开发者叶一一简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。