CSS3实战汇总提高在工作中的效率(附源码)

2025-05-29 0 16

CSS3实战汇总提高在工作中的效率(附源码)

本文是继笔者之前文章用css3实现惊艳面试官的背景即背景动画(高级附源码)的续篇也是本人最后一篇介绍css3技巧的文章,因为css这块知识难点不是很多,更多的在于去熟悉css3的新特性和基础理论知识。

所以写这篇文章的目的一方面是对自己工作中一些css高级技巧的总结,另一方面也是希望能教大家一些实用的技巧和高效开发css的方式,以提高在工作中的效率。

我们将学到

  • box-shadow的高级应用
  • 制作自适应的椭圆
  • css3实现饼图进度动画
  • 用border来实现一个对话框样式
  • css3 filter的简单应用
  • css3伪元素实现自定义复选框
  • 在线制作css3动画的利器

正文

1.box-shadow 的高级应用

利用css3的新特性可以帮助我们实现各种意想不到的特效,接下来的几个案例我们来使用css3的box-shdow来实现,马上开始吧!

实现水波动画

知识点:box-shadow

想想我们如果不用css3,是怎么实现水波扩散的动画呢?想必一定是写一大堆的js才能实现如下的效果:

CSS3实战汇总提高在工作中的效率(附源码)

css3实现核心代码

  1. <style>
  2. .wave{
  3. margin-left:auto;
  4. margin-right:auto;
  5. width:100px;
  6. height:100px;
  7. border-radius:100px;
  8. border:2pxsolid#fff;
  9. text-align:center;
  10. line-height:100px;
  11. color:#fff;
  12. background:#06curl(http://p3g4ahmhh.bkt.clouddn.com/me.jpg)no-repeatcentercenter;
  13. background-size:100%;
  14. animation:wave4slinearinfinite;
  15. }
  16. @keyframeswave{
  17. 0%{
  18. box-shadow:0000rgba(245,226,226,1),0000rgba(250,189,189,1);
  19. }
  20. 50%{
  21. box-shadow:00020pxrgba(245,226,226,.5),0000rgba(250,189,189,1);
  22. }
  23. 100%{
  24. box-shadow:00040pxrgba(245,226,226,0),00020pxrgba(245,226,226,0);
  25. }
  26. }
  27. </style>
  28. <divclass="wave"></div>

这里我们主要使用了box-shadow的多级阴影来实现的,动画部分我们使用的@keyframes,是不是感觉还行?

实现加载动画

知识点:box-shadow多阴影

加载动画大家想必也不陌生,虽然可以用很多方式实现加载动画,比如用伪元素,用gif,用js,但是更优雅的实现我觉得还是直接上css

CSS3实战汇总提高在工作中的效率(附源码)

核心代码如下:

  1. <style>
  2. .loading{
  3. margin-left:auto;
  4. margin-right:auto;
  5. width:30px;
  6. height:30px;
  7. border-radius:30px;
  8. background-color:transparent;
  9. animation:load3slinearinfinite;
  10. }
  11. @keyframesload{
  12. 0%{
  13. box-shadow:-40px00rgba(250,189,189,0),
  14. inset00015pxrgba(250,189,189,0),
  15. 40px00rgba(250,189,189,0);
  16. }
  17. 30%{
  18. box-shadow:-40px00rgba(250,189,189,1),
  19. inset00015pxrgba(250,189,189,0),
  20. 40px00rgba(250,189,189,0);
  21. }
  22. 60%{
  23. box-shadow:-40px00rgba(250,189,189,0),
  24. inset00015pxrgba(250,189,189,1),
  25. 40px00rgba(250,189,189,0);
  26. }
  27. 100%{
  28. box-shadow:-40px00rgba(250,189,189,0),
  29. inset00015pxrgba(250,189,189,0),
  30. 40px00rgba(250,189,189,1);
  31. }
  32. }
  33. </style>
  34. <divclass="loading"></div>

我们这里也是采用box-shadow多背景来实现,也是我当时思考的一个方向,至于其他的css方案,欢迎大家和我交流。

实现对话框及对话框的不规则投影

知识点:filter和伪元素

这里涉及到css滤镜的知识,不过也很简单,大家在css3官网上看看就理解了,我们直接看效果:

CSS3实战汇总提高在工作中的效率(附源码)

我们会通过filter的drop-shadow来实现不规则图形的阴影,然后利用伪元素和border来实现头部三角形:

  1. <style>
  2. .odd-shadow{
  3. margin-left:auto;
  4. margin-right:auto;
  5. width:200px;
  6. height:80px;
  7. border-radius:8px;
  8. color:#fff;
  9. font-size:24px;
  10. text-align:center;
  11. line-height:80px;
  12. background:#06c;
  13. filter:drop-shadow(2px2px2pxrgba(0,0,0,.8))
  14. }
  15. .odd-shadow::before{
  16. content:'';
  17. position:absolute;
  18. display:block;
  19. margin-left:-20px;
  20. transform:translateY(20px);
  21. width:0;
  22. height:0;
  23. border:10pxsolidtransparent;
  24. border-right-color:#06c;
  25. }
  26. </style>
  27. <divclass="odd-shadow">哎呦,猪先森</div>复制代码

哎呦,猪先森复制代码

模糊效果

知识点:filter

这个比较简单,这里我直接上图和代码:

CSS3实战汇总提高在工作中的效率(附源码)

  1. filter:blur(20px)

2.制作自适应的椭圆

border-radius的出现让我们实现圆角效果提供了极大的便利,我们还可以通过对Border-radius特性的进一步研究来实现各种图形效果,接下来就让我们看看它的威力吧!

知识点:border-radius: a / b; //a,b分别为圆角的水平、垂直半径,单位若为%,则表示相对于宽度和高度进行解析

CSS3实战汇总提高在工作中的效率(附源码)

核心代码:

  1. <style>
  2. .br-1{
  3. width:200px;
  4. height:100px;
  5. border-radius:50%/10%;
  6. background:linear-gradient(45deg,#06f,#f6c,#06c);
  7. }
  8. .br-2{
  9. width:100px;
  10. border-radius:20%50%;
  11. }
  12. .ani{
  13. animation:skew4sinfinite;
  14. }
  15. .ani1{
  16. animation:skew14sinfinite2s;
  17. }
  18. .ani2{
  19. animation:skew24sinfinite3s;
  20. }
  21. @keyframesskew{
  22. to{
  23. border-radius:50%;
  24. }
  25. }
  26. @keyframesskew1{
  27. to{
  28. border-radius:20px20px100%;
  29. }
  30. }
  31. @keyframesskew2{
  32. to{
  33. transform:rotate(360deg);
  34. }
  35. }
  36. </style>
  37. <divclass="br-1black-theme"></div>
  38. <divclass="br-1black-themeani"></div>
  39. <divclass="br-1black-themeani1"></div>
  40. <divclass="br-1br-2black-themeani2"></div>

这里我们主要使用了背景渐变来实现华而不实的背景,用border-radius实现各种规格的椭圆图案。

3.纯css3实现饼图进度动画

知识点:border-radius: a b c d / e f g h; animation多动画属性;

效果如下:

CSS3实战汇总提高在工作中的效率(附源码)

核心代码:

  1. <style>
  2. .br-31{
  3. width:100px;
  4. height:100px;
  5. border-radius:50%;
  6. background:linear-gradient(toright,#f6c50%,#3330);
  7. }
  8. .br-31::before{
  9. content:'';
  10. display:block;
  11. margin-left:50%;
  12. height:100%;
  13. border-radius:0100%100%0/50%;
  14. background-color:#f6c;
  15. transform-origin:left;
  16. animation:skin4slinearinfinite,
  17. bg8sstep-endinfinite;
  18. }
  19. @keyframesskin{
  20. to{
  21. transform:rotate(.5turn);
  22. }
  23. }
  24. @keyframesbg{
  25. 50%{
  26. background:#333;
  27. }
  28. }
  29. .br-32::before{
  30. animation-play-state:paused;
  31. animation-delay:inherit;
  32. }
  33. </style>
  34. <divclass="br-31black-theme"></div>
  35. <divclass="br-31br-32black-theme"style="animation-delay:-1s"></div>复制代码

这块的实现我们主要用了渐变背景,也是实现扇形进度的关键,包括代码中的如何遮挡半圆,如何对半圆做动画,如何改变旋转原点的位置等,这些虽然技巧性很强,但是我们稍微画一画,也可以实现的。

4.css3伪元素实现自定义复选框

我们都知道原生的复选框控件样式极难自定义,这对于工程师实现设计稿的难度加大了一大截。css3的出现,增加了:checked选择器,因此我们可以利用:checked和label来实现各式各样的表单选择控件,接下来让我们来看看如何实现吧!

CSS3实战汇总提高在工作中的效率(附源码)

我们来看看如何实现上述自定义的复选框:

  1. <style>
  2. .check-wrap{
  3. text-align:center;
  4. }
  5. .checkbox{
  6. position:absolute;
  7. clip:rect(0,0,0,0);
  8. }
  9. .checkbox[type="checkbox"]:focus+label::before{
  10. box-shadow:00.6em#06c;
  11. }
  12. .checkbox[type="checkbox"]+label::before{
  13. content:'\\a0';/*不换行空格*/
  14. display:inline-block;
  15. margin-right:.3em;
  16. width:2em;
  17. height:2em;
  18. border-radius:.3em;
  19. vertical-align:middle;
  20. line-height:2em;/*关键*/
  21. font-size:20px;
  22. text-align:center;
  23. color:#fff;
  24. background:gray;
  25. }
  26. .checkbox[type="checkbox"]:checked+label::before{
  27. content:'\\2713';/*对勾*/
  28. background:black;
  29. }
  30. label{
  31. margin-right:40px;
  32. font-size:20px;
  33. }
  34. </style>
  35. <divclass="check-wrap">
  36. <inputtype="checkbox"class="checkbox"id="check-1"/>
  37. <labelfor="check-1">生男孩</label>
  38. <inputtype="checkbox"class="checkbox"id="check-2"/>
  39. <labelfor="check-2">生女孩</label>
  40. </div>

生男孩 生女孩

这里为了隐藏原生的checkbox控件,我们用了clip: rect(0,0,0,0)进行截取,然后使用checkbox的伪类:checked来实现交互。

接下来扩展一下,我们来实现自定义开关:

CSS3实战汇总提高在工作中的效率(附源码)

这里原理是一样的,只不过样式做了改动,直接上代码:

  1. <style>
  2. .check-wrap{
  3. margin-bottom:20px;
  4. text-align:center;
  5. }
  6. .switch{
  7. position:absolute;
  8. clip:rect(0,0,0,0);
  9. }
  10. .switch[type="checkbox"]+label{
  11. width:6em;
  12. height:3em;
  13. padding:.3em;
  14. border-radius:.3em;
  15. border:1pxsolidrgba(0,0,0,.2);
  16. vertical-align:middle;
  17. line-height:2em;/*关键*/
  18. font-size:20px;
  19. text-align:center;
  20. color:#fff;
  21. box-shadow:01pxwhiteinset;
  22. background-color:#ccc;
  23. background-image:linear-gradient(#ddd,#bbb);
  24. }
  25. .switch[type="checkbox"]:checked+label{
  26. box-shadow:0.05em.1em.2emrgba(0,0,0,.6)inset;
  27. border-color:rgba(0,0,0,.3);
  28. background:#bbb;
  29. }
  30. label{
  31. margin-right:40px;
  32. font-size:14px;
  33. }
  34. .switch-an{
  35. position:absolute;
  36. clip:rect(0,0,0,0);
  37. }
  38. .switch-an[type="checkbox"]+label{
  39. position:relative;
  40. display:inline-block;
  41. width:5em;
  42. height:2em;
  43. border-radius:1em;
  44. color:#fff;
  45. background:#06c;
  46. text-align:left;
  47. }
  48. .switch-an[type="checkbox"]+label::before{
  49. content:'';
  50. width:2em;
  51. height:2em;
  52. position:absolute;
  53. left:0;
  54. border-radius:100%;
  55. vertical-align:middle;
  56. background-color:#fff;
  57. transition:left.3s;
  58. }
  59. .switch-an[type="checkbox"]+label::after{
  60. content:'OFF';
  61. margin-left:2.6em;
  62. }
  63. .switch-an[type="checkbox"]:checked+label::before{
  64. transition:left.3s;
  65. left:3em;
  66. }
  67. .switch-an[type="checkbox"]:checked+label::after{
  68. content:'NO';
  69. margin-left:.6em;
  70. }
  71. </style>
  72. <divclass="check-wrap">
  73. <inputtype="checkbox"class="switch"id="switch-1"/>
  74. <labelfor="switch-1">生男孩</label>
  75. <inputtype="checkbox"class="switch"id="switch-2"/>
  76. <labelfor="switch-2">生女孩</label>
  77. </div>
  78. <divclass="check-wrap">
  79. <inputtype="checkbox"class="switch-an"id="switch-an-1"/>
  80. <labelfor="switch-an-1"></label>
  81. </div>

生男孩 生女孩

是不是感觉css3提供了更强大的动画和自定义功能呢?其实我们可以实现更酷炫更实用的效果,等待你去尝试。

5.在线制作css3动画的利器

最后推荐一个在线制作各种贝塞尔曲线的工具,也是本人在做动画时经常使用的:

cubic-bezier。

地址:https://cubic-bezier.com/#.17,.67,.83,.67

本文转载自微信公众号「趣谈前端」

CSS3实战汇总提高在工作中的效率(附源码)

原文链接:https://mp.weixin.qq.com/s/VQwfNhgI9OROXgulR6Uwlg

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 CSS3实战汇总提高在工作中的效率(附源码) https://www.kuaiidc.com/90270.html

相关文章

发表评论
暂无评论