分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

纯CSS3实现蜡烛(冒烟)效果

发布时间:2023-09-06 01:59责任编辑:顾先生关键词:CSS

1. 闲来无事时在网上看一些前辈的博客文章,自己尝试了一下。学习到最重要的一点就是box-shadow的叠加使用,受益非线。先上一下效果图:

其中有以下重要的几点:

1. 蜡烛底座的border-radius的水平圆角与垂直圆角设置,即 border-radius:左上水平   右上水平    右下水平    左下水平  / 左上垂直   右上垂直  右下垂直  左下垂直;即border-radius其实是可以设置八个值的。

2. box-shadow的多层叠加(详细可见代码)。

3. 镜像渐变的方式(circle、ellipse),详细可见代码。

4. box-shadow的内嵌

5. 烟的径向渐变虚化效果

代码如下:

<!DOCTYPE html><html lang="en"><head> ???<meta charset="UTF-8"> ???<title>Document</title> ???<style> ???????.candle-box{ ???????????border: 1px solid #ddd; ???????????width: 300px; ???????????height: 300px; ???????????display: flex; ???????????justify-content: center; ???????????align-items: center; ???????} ???????.box{ ???????????width: 300px; ???????} ???????.box .title{ ???????????color: #ccc; ???????????text-align: center; ???????} ???????.candle-main{ ???????????position: relative; ???????????width: 40px; ???????????height: 120px; ???????????background: #f00; ???????????border-radius: 0 0 60px 60px / 0 0 25px 25px; ???????????margin-top: 50px; ???????} ???????.candle-tip{ ???????????position: relative; ???????????top: -17px; ???????} ???????.candle-top{ ???????????position: absolute; ???????????top: 5px; ???????????left: 0; ???????????width: 40px; ???????????height: 20px; ???????????z-index: 10; ???????????background: #EF4D65; ???????????box-shadow:0 0 10px #f00 inset; ???????????border-radius: 60px / 25px; ???????} ???????.candle-top:after{ ???????????content: ""; ???????????position: absolute; ???????????top: -8px; ???????????left: calc( 50% - 2px); ???????????width: 4px; ???????????height: 20px; ???????????border-radius: 2px 2px 0 0; ???????????background: linear-gradient(to bottom ,#000 0%,#fff 100%); ???????} ???????.candle-fame{ ???????????width: 10px; ???????????height: 20px; ???????????border-radius: 20px / 40px; ???????????background: radial-gradient(circle,transparent 20%,#fff 75%); ???????????box-shadow: 0 -3px 8px 2px #fff, 0 -8px 15px 5px #ff0, 0 -8px 0 8px #f00; ???????????position: relative; ???????????z-index: 50; ???????????top: -5px; ???????????-webkit-animation: flicker 3s linear infinite; ???????????-o-animation: flicker 3s linear infinite; ???????????animation: flicker 3s linear infinite; ???????} ???????.candle-fame-box{ ???????????height: 20px; ???????????display: flex; ???????????justify-content: center; ???????} ???????.smoke{ ???????????position: relative; ???????????width: 20px; ???????????height: 20px; ???????????z-index: 50; ???????????top: -7px; ???????????display: none; ???????} ???????.smoke span{ ???????????display: block; ???????????width: 20px; ???????????height:20px; ???????????opacity: 0; ???????????border-radius: 50%; ???????????position: absolute; ???????????top:0; ???????????left: 0; ???????????background: radial-gradient(#333, transparent); ???????} ???????.l-smoke1{animation:smokeL linear 10s 1s infinite;} ???????.l-smoke2{animation:smokeL linear 10s 2s infinite;} ???????.l-smoke3{animation:smokeL linear 10s 3s infinite;} ???????.l-smoke4{animation:smokeL linear 10s 4s infinite;} ???????.l-smoke5{animation:smokeL linear 10s 5s infinite;} ???????.l-smoke6{animation:smokeL linear 10s 6s infinite;} ???????.l-smoke7{animation:smokeL linear 10s 7s infinite;} ???????.l-smoke8{animation:smokeL linear 10s 8s infinite;} ???????.l-smoke9{animation:smokeL linear 10s 9s infinite;} ???????.l-smoke10{animation:smokeL linear 10s 10s infinite;} ???????.r-smoke1{animation:smokeR linear 10s 1.5s infinite;} ???????.r-smoke2{animation:smokeR linear 10s 2.5s infinite;} ???????.r-smoke3{animation:smokeR linear 10s 3.5s infinite;} ???????.r-smoke4{animation:smokeR linear 10s 4.5s infinite;} ???????.r-smoke5{animation:smokeR linear 10s 5.5s infinite;} ???????.r-smoke6{animation:smokeR linear 10s 6.5s infinite;} ???????.r-smoke7{animation:smokeR linear 10s 7.5s infinite;} ???????.r-smoke8{animation:smokeR linear 10s 8.5s infinite;} ???????.r-smoke9{animation:smokeR linear 10s 9.5s infinite;} ???????.r-smoke10{animation:smokeR linear 10s 10.5s infinite;} ???????@keyframes flicker{ ?????????0% { ???????????transform:scale(1); ?????????} ?????????20% { ???????????transform:scale(1.1,0.9) rotate(3deg); ?????????} ?????????50% { ???????????transform:scale(1,1.2); ?????????} ?????????80% { ???????????transform:scale(0.9,1.1) rotate(-3deg); ?????????} ?????????100% { ???????????transform:scale(1); ?????????} ???????} ???????@keyframes smokeL { ???????????0%{ ???????????????transform:scale(0.2); ???????????} ???????????5%{ ???????????????transform:scale(0.2) translate(-5px, 0); ???????????????opacity: 1; ???????????} ???????????100%{ ???????????????transform:scale(1) translate(-5px, -100px); ???????????????opacity:0; ???????????} ???????} ???????@keyframes smokeR { ???????????0%{ ???????????????transform:scale(0.2); ???????????} ???????????5%{ ???????????????transform:scale(0.2) translate(2px, 0); ???????????????opacity: 1; ???????????} ???????????100%{ ???????????????transform:scale(1) translate(2px, -100px); ???????????????opacity:0; ???????????} ???????} ???</style></head><body> ???<div class="box"> ???????<h2 class="title">点击蜡烛点亮或熄灭</h2> ???????<div class="candle-box"> ???????????<div class="candle-main" id="candle"> ???????????????<div class="candle-tip"> ???????????????????<div class="candle-top"></div> ???????????????????<div class="candle-fame-box"> ???????????????????????<div class="candle-fame" id="fame"></div> ???????????????????????<div class="smoke" id="smoke"> ???????????????????????????<span class="l-smoke1"></span> ???????????????????????????<span class="r-smoke1"></span> ???????????????????????????<span class="l-smoke2"></span> ???????????????????????????<span class="r-smoke2"></span> ???????????????????????????<span class="l-smoke3"></span> ???????????????????????????<span class="r-smoke3"></span> ???????????????????????????<span class="l-smoke4"></span> ???????????????????????????<span class="r-smoke4"></span> ???????????????????????????<span class="l-smoke5"></span> ???????????????????????????<span class="r-smoke5"></span> ???????????????????????????<span class="l-smoke6"></span> ???????????????????????????<span class="r-smoke6"></span> ???????????????????????????<span class="l-smoke7"></span> ???????????????????????????<span class="r-smoke7"></span> ???????????????????????????<span class="l-smoke8"></span> ???????????????????????????<span class="r-smoke8"></span> ???????????????????????????<span class="l-smoke9"></span> ???????????????????????????<span class="r-smoke9"></span> ???????????????????????????<span class="l-smoke10"></span> ???????????????????????????<span class="r-smoke10"></span> ???????????????????????</div> ???????????????????</div> ???????????????</div> ???????????</div> ???????</div> ???</div> ???<script> ???????var candle = document.querySelector("#candle"); ???????var fame = document.querySelector("#fame"); ???????var smoke = document.querySelector("#smoke") ???????var flag = 1; ???????candle.addEventListener("click",function(){ ???????????if(flag){ ???????????????fame.style.display = "none"; ???????????????smoke.style.display = "block"; ???????????????flag = 0; ???????????}else{ ???????????????fame.style.display = "block"; ???????????????smoke.style.display = "none"; ???????????????flag = 1; ???????????} ???????}) ???</script></body></html>

纯CSS3实现蜡烛(冒烟)效果

原文地址:https://www.cnblogs.com/pomelott/p/9180499.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved