一朵好靓花送,给我司食堂大厨们【玩转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畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)