今日是二十四节气的小满,是夏季的第二个节气。不知不觉地又是一年夏天来临了,面对烈日炎炎,夏天要吃的水果那是必不可少,今天就用CSS来给大家带来一个水果拼盘,提前给大家解解暑~

前言

以上15种水果你能看出都是什么水果吗?相对不够那么逼真,但是相信你也能猜出大概的名称。接下来将分别展开代码说明各自的实现过程,在不看下文的代码前可以先思考一下看到以上图片你会用什么方式去实现呢?

为保障文章的精华部分,部分非主要代码就不完整的贴出来了,如有不理解的地方可留言交流~

代码实现

苹果#1

只需要一个标签,整体的苹果形状基于border-radius的不同数值显示,并通过box-shadow实现侧边阴影,两个伪元素实现顶部果把及两个突出的部分。

.apple {width: 6em;height: 5em;background-color: #ff4355;box-shadow: inset 0.2em -0.2em #cc1022;border-radius: 2em 2em 3em 3em;
}
.apple:before {top: -0.2em;left: 1.8em;content: "";width: 4.1em;height: 2.75em;background-color: inherit;border-radius: 3em 3em 0 0;position: absolute;box-shadow: -1.5em 0 0 #ff4355, inset 0.2em 0.2em #ff4355;
}
.apple:after {content: "";width: 0.2em;height: 1em;background-color: brown;position: absolute;z-index: 2;top: -0.5em;left: 3em;
}

橘子#2

主体部分就是一个标签实现圆形并通过box-shadow增加阴影。再增加一个before伪元素实现叶子,叶子基于border实现,通过设置两个方向的颜色形成色差,设置两个方向的border-radius树叶的感觉就出来了。

.orange {width: 5.6em;height: 5.6em;border-radius: 50%;background-color: #ffb526;box-shadow: inset 0.2em -0.2em #cc8a0c;
}
.orange:before {content: "";position: absolute;top: -1em;left: 3em;height: 0;width: 0;border: 1em solid #539e3d;border-radius: 50% 0 50% 0;border-bottom-color: #437512;border-right-color: #437512;
}

香蕉#3

香蕉的头尾基于两个伪元素实现,再增加一个元素banana-line实现阴影的对立高亮部分,弯曲的状态都是基于border-radiusbox-shadow实现。

.banana {width: 6em;height: 6em;background-color: transparent;box-shadow: -1.1em 1.1em 0 0 #fcd110;border-radius: 50%;
}
.banana:before {content: "";width: 0.3em;height: 0.3em;transform: rotate(45deg);background-color: #937714;position: absolute;top: 5.4em;left: 4.3em;z-index: 1;
}
.banana:after {content: "";width: 0.4em;height: 0.8em;transform: rotate(31deg);background-color: #b3bb03;position: absolute;top: 1.1em;left: 0.2em;z-index: 1;
}
.banana-line {width: 5.5em;height: 5.8em;background-color: transparent;box-shadow: -0.4em 0.4em 0 0 #ffe23c;border-radius: 50%;position: absolute;top: -0.7em;left: 1.7em;transform: rotate(-4deg);
}

柠檬#4

这个相对更简单,只需要一个元素,主要是用到border-radiusbox-shadow实现,再增加一个rotate旋转就完成了。

.lemon {width: 5.1em;height: 5.1em;margin: 0.8em;background-color: #ffe135;border-radius: 50% 15%;box-shadow: inset 0.2em 0.2em #ccb42a;transform: rotate(225deg);
}

梨#5

主体部分通过设置一个方向较小数值的border-radius,再增加rotate旋转。伪元素实现顶部的把部分。

.pear {width: 5.4em;height: 5.4em;margin-top: 1.2em;background-color: #d7c322;border-radius: 50% 15% 50% 50%;transform: rotate(-45deg);box-shadow: inset 0.15em 0.25em #c3b11f;
}
.pear:after {content: "";width: 0.2em;height: 1em;background-color: brown;position: absolute;z-index: 2;top: -0.2em;left: 5.1em;transform: rotate(45deg);
}

草莓#6

主体部分和梨比较像,只是方向不一样,草莓上的多个白点并不是多个元素,是基于box-shadow的多个参数实现。顶部的叶子看着是一个六角形,其实就是两个三角形不同的角度叠在一起实现。

.strawberry {width: 5em;height: 5em;margin-top: 0.7em;background-color: #ed2607;border-radius: 50% 15% 50% 50%;transform: rotate(135deg);box-shadow: inset -0.15em -0.25em #c62106;
}
.strawberry:before {content: "";position: absolute;top: 3.5em;left: 2em;width: 0.3em;height: 0.3em;background-color: white;border-radius: 50%;box-shadow: 1.7em 0 0 0 white, -1em -2.8em 0 0 white, 2.5em -1.5em 0 0 white,2em -2.5em 0 0 white, 0.75em -1.5em 0 0 white, -1em -1em 0 0 white,0.8em -3.2em 0 0 white;
}

蓝莓#7

这个相对比较简单,都是基于上面的侧边阴影,再增加伪元素到顶部实现阴影部分。

.blueberry {width: 6em;height: 5.5em;border-radius: 50%;background-color: #89a2ca;box-shadow: inset 0.2em -0.2em #6081b8;
}
.blueberry:before {content: "";width: 2em;height: 1em;left: 2em;position: absolute;background-color: #3e4d64;border-radius: 50%;
}

桃#8

这个和#2的橘子类似,就border-radius的数值不一样,其他都是类似。

.peach {width: 6em;height: 5em;background-color: #f87a95;box-shadow: inset 0.2em -0.2em #cd6179;border-radius: 2.5em 2.5em 3em 3em;
}
.peach:before {content: "";position: absolute;top: -1.7em;left: 3em;height: 0;width: 0;border: 1em solid #539e3d;border-radius: 50% 0 50% 0;border-bottom-color: #437512;border-right-color: #437512;
}

樱桃#9

两颗樱桃分别是两个不同的元素实现,但本质的代码都是一样的,只是对应的位置不一样。说明一下绿色的把如何实现的,定义一个透明的长方形块,增加50%的border-radius,再使用box-shadow填充绿色。

.cherry {width: 3em;height: 2.5em;background-color: #c20e2b;box-shadow: inset 0.2em -0.2em #9b0b22;border-radius: 2.5em 2.5em 4em 4em;position: absolute;
}
.cherry1 {top: 3em;left: 0.2em;transform: rotate(15deg);
}
.cherry2 {top: 3em;left: 3.4em;transform: rotate(-15deg);
}
.cherry1:before {content: "";width: 1em;height: 2.8em;background-color: transparent;box-shadow: 0.2em -0.1em 0 0 #539e3d;border-radius: 50%;position: absolute;top: -2.6em;left: 1em;transform: rotate(19deg);
}
.cherry2:before {content: "";width: 1em;height: 2.8em;background-color: transparent;box-shadow: 0.2em -0.1em 0 0 #539e3d;border-radius: 50%;position: absolute;top: -2.5em;left: 0.5em;transform: rotate(-12deg);
}
.cherry-join {width: 0.7em;height: 0.4em;top: 0.6em;left: 3.1em;position: absolute;background-color: #724126;border-radius: 20%;transform: rotate(-12deg);
}

树莓#10

这个相对就比较复杂了,定义很多个元素实现每颗果实,通过不同的定位实现。但是注意左边的每一颗都有阴影,所有结构上保持一左一右。后面通过nth-child(2n + 0)即可设置阴影。顶部的叶子和草莓一致,两个三角形结合。

.berry {width: 1.7em;height: 3.5em;border-radius: 10% 10% 50% 50%;position: absolute;left: 2.5em;top: 1.1em;z-index: 1;
}
.raspberry {background-color: #d33653;border-left: 0.3em solid #d33653;border-right: 0.3em solid #d33653;
}
.berry-ball {width: 1.3em;height: 1.3em;position: absolute;border-radius: 50%;
}
.berry-ball1 {top: 4.1em;left: 2.6em;
}
...code
.berry-ball8 {top: 1.5em;left: 3.9em;
}
.raspberry-leaf-up {top: 0.5em;left: 2.6em;z-index: 2;
}
.raspberry-leaf-down {top: 1em;left: 2.6em;z-index: 2;
}
.raspberry-ball:nth-child(2n + 0) {box-shadow: inset 0.1em -0.1em #a82b42;
}
.raspberry-ball {background-color: #d33653;
}

黑莓#11

同上一样,只是设置不同的颜色即可。

.blackberry-ball,
.blackberry {background-color: #5d46a0;
}
.blackberry {border-left: 0.3em solid #5d46a0;border-right: 0.3em solid #5d46a0;
}
.blackberry-ball:nth-child(2n + 0) {box-shadow: inset 0.1em -0.1em #3d2475;
}

西瓜#12

设置一个方向的border-radius为100%,再增加一个绿色的边框,白色的西瓜子基于box-shadow的多个参数实现。为了逼真还增加了一个伪元素实现西瓜两边的阴影。

.watermelon {position: relative;width: 0;border: 2.2em solid #f33;border-radius: 100% 0 0 0;box-shadow: -0.25em -0.25em 0 0.25em #373;transform: rotate(-135deg);
}
.watermelon:before {content: "";position: absolute;bottom: 0.2em;right: 0.2em;width: 0.33em;height: 0.33em;background-color: #fff;border-radius: 0 50%;box-shadow: 1.75em 0 0 0 #fff, 0 1.75em 0 0 #fff, 2.5em -1.5em 0 0 #fff,-1.5em 2.5em 0 0 #fff, 2em 2em 0 0 #fff;
}
.watermelon:after {content: "";position: absolute;top: -2.6em;left: -2.6em;width: 4.8em;height: 4.8em;box-shadow: inset -0.35em -0.35em rgba(0, 0, 0, 0.2);
}

牛油果#13

主要分为两块内容,果肉是一块,果核是一块,果肉部分通过设置border-radius实现椭圆形状,并通过不同的背景色和边框颜色画出深浅部分。果核部分通过伪元素模拟出反光的部分,让结果更逼真。

.avocado {position: relative;width: 3em;height: 4.2em;margin-left: 1em;background: #cde06d;border-radius: 50% 50% 50% 50% / 75% 75% 40% 40%;border: 0.6em solid #9fcd65;box-shadow: 0 0 0 2px #3c632b;
}.inner {position: absolute;bottom: 8%;left: 16%;background: #98602d;border: 0.2em solid #704f31;width: 55%;height: 48%;border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}
.inner:after {content: "";height: 80%;width: 80%;opacity: 0.7;background: #ffffff;position: absolute;left: 13%;top: 14%;transform: rotate(8deg);border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}
.inner:before {content: "";position: absolute;width: 80%;height: 95%;left: 6%;background: #98602d;transform: rotate(20deg);border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;z-index: 1;
}

切面橙子#14

主要也可分为两部分,内部将果肉分为六块的是三条线,基于一个元素和元素内部的两个伪元素实现。另一部分就实现主要的果皮和果肉部分,通过设置不同的 box-shadow画出不同深浅的橙色。

.fruit-orange {width: 5em;height: 5em;border-radius: 50%;position: relative;display: flex;justify-content: center;align-items: center;background: #f57400;
}.fruit-orange::after {content: "";position: absolute;width: 0.5em;height: 0.5em;top: calc(50% - 0.22em);left: calc(50% - 0.22em);background: #fffab9;z-index: 10;border-radius: 50%;box-shadow: 0 0 3px 2px #fffab9;
}.fruit-orange::before {position: absolute;content: "";width: 100%;height: 100%;border: 1px solid #f57400;box-shadow: 0 0 0.1em 1px rgb(0, 0, 0, 0.4), 0 0 1px 0.2em #fec70c inset,0 0 0.2em 0.3em #fce819 inset, 0 0 0.2em 0.5em #fffab9 inset,0 0 0.2em 0.7em #fffab9 inset;border-radius: 50%;
}.slices {position: absolute;z-index: 5;width: 4em;height: 0.3em;background: #fffab9;box-shadow: 0 0 0.05em 1px #fffab9;
}.slices::before {content: "";position: absolute;z-index: 5;top: 0px;left: 0px;width: 100%;height: 100%;background: #fffab9;transform-origin: center;transform: rotate(60deg);box-shadow: 0 0 0.05em 1px #fffab9;
}.slices::after {content: "";position: absolute;z-index: 5;top: 0px;left: 0px;width: 100%;height: 100%;background: #fffab9;transform-origin: center;transform: rotate(120deg);box-shadow: 0 0 0.05em 1px #fffab9;
}

切面柠檬#15

这个和#14切面橙子实现方式一样,只是设置不同的颜色,基于这个代码还可以画出西柚等类似水果。

.fruit-lemon {background: #fddd09;width: 5em;height: 5em;border-radius: 50%;position: relative;display: flex;justify-content: center;align-items: center;
}.fruit-lemon::before {position: absolute;content: "";width: 100%;height: 100%;border: 1px solid #e9ce1d;box-shadow: 0 0 0.1em 1px rgb(0, 0, 0, 0.4), 0 0 1px 0.2em #fec70c inset,0 0 0.2em 0.3em #fce819 inset, 0 0 0.2em 0.5em #fffab9 inset,0 0 0.2em 0.7em #fffab9 inset;border-radius: 50%;
}

最后

整体代码分析就结束啦,看到最后和你预期的相差多远呢。如果你有更多更好的方案欢迎留言交流。如果觉得有用,记得点赞收藏哦,说不定哪天就用上啦~

「专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)」

夏天来啦,用纯CSS实现水果解解馋吧相关推荐

  1. html div点击选中效果,纯css实现选中切换效果

    最近不太忙,多写几篇文章.很多时候我们用js来实现视觉效果,其实不用那么麻烦,掌握一些常用的css知识能让你事半功倍,这篇文章讲的是使用纯css来实现一个列表项的选中效果,希望对你有所帮助 实现这个效 ...

  2. 纯CSS制作的图形效果

    纯CSS制作的图形效果 很少会有人意识到,当浏览器绘制的border,会有一个角度的问题.我们就是得用这样的一个技巧来制作三角的效果.我们只需要保证一边的边框是有色,其他边框色为透明色,这样我们就很容 ...

  3. 纯CSS实现蓝色圆角下拉菜单

    代码简介: 这个菜单没有使用任何的图片,完全是用CSS实现的,包括圆角效果也同样是,而且还考虑了多浏览器的兼容性,可以说非常不错,既兼容性好,又外观漂亮,下拉导航菜单目前比较流行,好好感觉一下本款菜单 ...

  4. html树状结构怎么展开,纯css实现树形结构

    纯css实现属性结构 **css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收 缩以及复选框效果还得配合js来实现.其实展开和收缩就是一个点击元素其子元素隐藏 和显示的切换.* ...

  5. 纯css写单选框和复选框的样式和功能

    只用纯css写的单选框和复选框的样式和功能该怎么写?看这里,复制下面的代码运行一遍就知道了,快试试吧! 效果截图: <!doctype html> <html lang=" ...

  6. 超棒的跨浏览器纯CSS动画实现 - Animate.css

    为什么80%的码农都做不了架构师?>>>    日期:2012-8-12  来源:GBin1.com 在线演示  本地下载 通常情况下如果需要生成web动画效果的话,我们肯定会考虑使 ...

  7. 三角形css_纯 CSS 实现绘制各种三角形(各种角度)

    转载至:纯 CSS 实现绘制各种三角形(各种角度) 一.前言 三角形实现原理:宽度width为0:height为0:(1)有一条横竖边(上下左右)的设置为border-方向:长度 solid red, ...

  8. web中用纯CSS实现筛选菜单

    web中用纯CSS实现筛选菜单 本文我们来用纯css实现像淘宝宝贝筛选菜单那样的效果,例子虽然没有淘宝那样强大,不过原理差不多,如果花点心思也可以实现和淘宝一样的. 内容过滤是一个在Web上常见的一个 ...

  9. 纯 CSS 实现波浪效果!

    一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...

最新文章

  1. 虚拟多Mac地址工具Multimac
  2. C#.NET 中的类型转换 (转)
  3. StaticQueue
  4. Python 常见的17个错误分析
  5. QT安装和Hello,world
  6. (转)分布式文件存储FastDFS(三)FastDFS配置
  7. 全面提升AR感知能力的新款iPad Pro或将延期发布
  8. Java-虚拟机-局部变量表
  9. 《海量数据库解决方案》之位图索引的结构和特征
  10. static变量会被垃圾回收吗_废泡沫塑料属于哪种垃圾?废泡沫塑料是可回收垃圾吗?...
  11. 有时,不做什么比做什么更重要,拒绝比答应更重要
  12. matlab仿真ssb调制解调,ssb调制解调原理
  13. 合唱队形(最大上升子序列)
  14. (分布式网络)基于残差网络的多光谱全色图像分布式融合框架
  15. (9)LICEcap——PC端动图创建工具
  16. SpaceShooter打飞机教程笔记(二)
  17. ReentrantReadWriteLock、StampedLock
  18. Openlayers 快速上手教程
  19. 表单环境外访问Xrm.Page.context对象
  20. 实践是检验真理的唯一标准之python array.sum(axis=0)

热门文章

  1. 【WEB漏洞】【低级】【部分账号信息泄露】总结
  2. CS75显示服务器,长安cs75仪表盘指示灯,长安cs75仪表盘故障灯
  3. Scrapyd部署scrapy项目
  4. 媒体报道 | 香港科大(广州)(筹)校长倪明选:建一所独一无二的“交叉学科大学”...
  5. Characters_of_the_Three_Kingdoms - 三国人物结构化数据 1
  6. dup/dup2函数
  7. Surfacebook误删显卡恢复办法/无法打开nVidia控制面板解决办法/找不到显卡恢复方法
  8. Py之tkinter:tkinter库的简介、安装、使用方法之详细攻略
  9. python使用 f 格式化字符串
  10. 缓慢的HTTP拒绝服务攻击漏洞验证