网站首页 > 技术文章 正文
大家好,我是一碗周,一个不想被喝(内卷)的前端。如果写的文章有幸可以得到你的青睐,万分有幸~
写在前面
过年了~ 过年了~ 过年了~
辞旧迎新过年啦 张灯结彩春节啦~
金鸡起舞送福啦 新的一年福来啦~
文章开头几句歌词,顿时显得喜庆了不,我们的灯笼是下面这个样子的。
animation属性
画灯笼我们肯定不能画一个静态的灯笼,我们先来复习一下CSS中的 animation 属性,该是是一个简写属性,由 animation-name , animation-duration , animation-timing-function , animation-delay , animation-iteration-count , animation-direction , animation-fill-mode 和 animation-play-state 属性组成。这里我们就不展开讲解了,具体可以跳转到MDN学习。
我们先来看一下下面这个示例:
animation: swing 3s infinite ease-in-out;
在上面的例子中使用了一个名为 swing 的动画序列,动画序列通过 @keyframes 创建,执行时间 3s ,动画循环执行,最后 ease-in-out 表示动画执行的节奏。
实现思路
- 为一个矩形添加 border-radius 使其,形成一个灯笼的外形。
- 为矩形添加 ::before 和 ::after 来形成灯笼的顶部和头部
- 画一个灯笼线。
- 在 矩形内部添加两个比较细的矩形,通过添加 border-radius 来形成灯笼的线条。
- 设置灯笼的动画效果
- 添加灯穗的样式
接下来我们就分步骤实现。
绘制灯笼外形
首先我们定义HTML结构,代码如下:
<!-- 灯笼容器 -->
<div class="lantern-con">
<!-- 提着灯笼的线 -->
<div class="lantern-line"></div>
<!-- 灯笼主要区域 -->
<div class="lantern-light">
</div>
</div>
然后我们画一个椭圆,然后通过 ::before 和 ::after ,绘制上下的两个灯笼盖,CSS如下:
/* 灯笼容器 */
.lantern-con {
position: fixed;
left: 160px;
}
/* 灯笼中间红色区域 */
.lantern-light {
position: relative;
width: 120px;
height: 90px;
background-color: red;
margin: 30px;
border-radius: 50%;
box-shadow: -5px 5px 50px 4px #fa6c00;
/* 设置旋转点 */
transform-origin: top center;
animation: swing 3s infinite ease-in-out;
}
/* 灯笼顶部和底部的样式 */
.lantern-light::before,
.lantern-light::after {
content: '';
position: absolute;
border: 1px solid #dc8f03;
width: 60px;
height: 12px;
/* 背景渐变 */
background: linear-gradient(
to right,
#dc8f03,
#ffa500,
#dc8f03,
#ffa500,
#dc8f03
);
left: 30px;
}
/* 顶部位置 */
.lantern-light::before {
top: -7px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
/* 底部位置 */
.lantern-light::after {
bottom: -7px;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
/* 提着灯笼的线的样式 */
.lantern-line {
width: 2px;
height: 50px;
background-color: #dc8f03;
position: absolute;
left: 88px;
}
/* 灯笼的动画效果 */
@keyframes swing {
0% {
transform: rotate(-6deg);
}
50% {
transform: rotate(6deg);
}
100% {
transform: rotate(-6deg);
}
}
现在就实现了一个比较基础灯笼外形,效果如下:
灯笼内部线条
灯笼的内部线条是通过两个矩形实现了,通过 border-radius 属性将其设置为椭圆,然后绘制边,呈现灯笼线条。
<div class="lantern-light">
<!-- 灯笼中间的线条 -->
<div class="lantern-circle">
<div class="lantern-rect">
<!-- 灯笼中间的文字内容 -->
<div class="lantern-text">灯笼</div>
</div>
</div>
</div>
对应的CSS如下:
- 中间的线条 */
/* 灯笼中间的线条 */
.lantern-circle,
.lantern-rect {
height: 90px;
border-radius: 50%;
border: 2px solid #dc8f03;
background-color: rgba(216, 0, 15, 0.1);
}
/* 外层 */
.lantern-circle {
width: 100px;
margin: 12px 8px 8px 10px;
}
/* 内层 */
.lantern-rect {
margin: -2px 8px 8px 26px;
width: 45px;
}
/* 文字样式 */
.lantern-text {
font-size: 28px;
font-weight: bold;
text-align: center;
color: #dc8f03;
margin-top: 4px;
}
灯笼穗
现在我们来绘制一下灯笼穗,这个东西比较简单,最主要的是添加一个动画效果,其HTML结构如下:
<!-- 灯笼主要区域 -->
<div class="lantern-light">
<!-- more code -->
<!-- 灯笼穗 -->
<div class="lantern-tassel-top">
<div class="lantern-tassel-middle"></div>
<div class="lantern-tassel-bottom"></div>
</div>
</div>
主要区域 -->
CSS如下:
/* 灯穗 */
.lantern-tassel-top {
width: 5px;
height: 20px;
background-color: #ffa500;
border-radius: 0 0 5px 5px;
position: relative;
margin: -5px 0 0 59px;
/* 让灯穗也有一个动画效果 */
animation: swing 3s infinite ease-in-out;
}
.lantern-tassel-middle,
.lantern-tassel-bottom {
position: absolute;
width: 10px;
left: -2px;
}
.lantern-tassel-middle {
border-radius: 50%;
top: 14px;
height: 10px;
background-color: #dc8f03;
z-index: 2;
}
.lantern-tassel-bottom {
background-color: #ffa500;
border-bottom-left-radius: 5px;
height: 35px;
top: 18px;
z-index: 1;
}
到这我们就把这个灯笼画完了。
写在最后
本篇文章到这就结束了,都看完了就点个赞支持一下,谢谢了~
原作者姓名: 一碗周
原文链接: https:// juejin.cn/post/70513709 71932033038
- 上一篇: svg+circle实现请求后台时的过度动画
- 下一篇: 5个小巧的CSS技巧(css 技巧)
猜你喜欢
- 2024-10-30 基于Web的“戳泡泡”解压小游戏(戳泡泡用英文怎么说)
- 2024-10-30 暗夜发光,独自闪耀,网页暗黑模式下的特效和动效,CSS3实现
- 2024-10-30 HTML多行代码搞定微信8.0的炸裂特效!C/C++怎么能输
- 2024-10-30 Nick_N像素画教程:像素画动画缓入缓出
- 2024-10-30 CSS动画制作(css动画制作电池充电效果)
- 2024-10-30 前端系列:在线认识贝塞尔曲线的运动轨迹(中文版网站)
- 2024-10-30 CSS3 transition过渡效果(css3过度效果)
- 2024-10-30 15个CSS 常见错误,请一定要注意避免
- 2024-10-30 css动画之transition(css transition动画)
- 2024-10-30 daisyUI - 主题漂亮、代码纯净!免费开源的 Tailwind CSS 组件库
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)