29 旋转工具箱

效果演示

实现了一个菜单按钮的动画效果,当鼠标悬停在菜单按钮上时,菜单按钮会旋转315度,菜单按钮旋转的同时,菜单按钮旋转的8个小圆圈也会依次旋转360度,并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反,当鼠标悬停在某个小圆圈上时,该小圆圈的旋转方向会变为顺时针旋转360度。整个效果看起来像是一只小鸟在飞翔,菜单按钮像是它的翅膀,菜单按钮旋转的同时,小圆圈也在飞翔。此外,这段代码还定义了一些自定义的图标,并使用了阿里巴巴的图标库。

Code

html 复制代码
<div class="menu">
    <div class="btn"><i class="iconfont icon-add"></i></div>
    <span style="--i: 0;"><i class="iconfont icon-home"></i></span>
    <span style="--i: 1;"><i class="iconfont icon-more"></i></span>
    <span style="--i: 2;"><i class="iconfont icon-gift"></i></span>
    <span style="--i: 3;"><i class="iconfont icon-setting"></i></span>
    <span style="--i: 4;"><i class="iconfont icon-message"></i></span>
    <span style="--i: 5;"><i class="iconfont icon-cart"></i></span>
    <span style="--i: 6;"><i class="iconfont icon-money"></i></span>
    <span style="--i: 7;"><i class="iconfont icon-star"></i></span>
</div>
css 复制代码
* {
    margin: 0;
    padding: 0;
    list-style: none;
}

body {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #e8e8e8;
}

.menu {
    position: relative;
    width: 200px;
    height: 200px;
    display: flex;
    justify-content: center;
    align-items: center;
}

.btn {
    position: absolute;
    width: 60px;
    height: 60px;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #fff;
    border-radius: 50%;
    z-index: 1000;
    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
    cursor: pointer;
    transition: all 1.25s;
}

.btn i {
    font-size: 32px;
}

.menu span {
    position: absolute;
    left: 0;
    transform-origin: 100px;
    transition: .5s;
    transition-delay: calc(.1s * var(--i));
    transform: rotate(0deg) translateX(80px);
    width: 40px;
    height: 40px;
    background-color: #fff;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 50%;
    cursor: pointer;
    box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
}

.menu:hover .btn {
    transform: rotate(315deg);
}

.menu:hover span {
    transform: rotate(calc(360deg / 8 * var(--i)));
}

.menu span i {
    transform: rotate(calc(360deg / -8 * var(--i)));
}

.menu span:hover i {
    color: #f51760;
}

@font-face {
    font-family: "iconfont";
    /* Project id 4090357 */
    src: url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.woff2?t=1685189584312') format('woff2'),
        url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.woff?t=1685189584312') format('woff'),
        url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.ttf?t=1685189584312') format('truetype');
}

.iconfont {
    font-family: "iconfont" !important;
    font-size: 16px;
    font-style: normal;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

.icon-add:before {
    content: "\e60c";
}

.icon-home:before {
    content: "\e604";
}

.icon-more:before {
    content: "\e606";
}

.icon-gift:before {
    content: "\e611";
}

.icon-setting:before {
    content: "\e612";
}

.icon-message:before {
    content: "\e613";
}

.icon-star:before {
    content: "\e618";
}

.icon-cart:before {
    content: "\e61d";
}

.icon-money:before {
    content: "\e61e";
}

实现思路拆分

css 复制代码
* {
  margin: 0;
  padding: 0;
  list-style: none;
}

这段代码是设置全局样式,将所有元素的外边距、内边距和列表样式都设置为0,并将列表样式设置为none。

css 复制代码
body {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #e8e8e8;
}

这段代码是设置页面的基本样式,将页面的高度设置为100vh,并将页面的内容居中对齐。同时,将页面的背景颜色设置为#e8e8e8。

css 复制代码
.menu {
  position: relative;
  width: 200px;
  height: 200px;
  display: flex;
  justify-content: center;
  align-items: center;
}

这段代码是设置菜单按钮的样式,将菜单按钮的位置设置为相对定位,宽度和高度都设置为200px,并将菜单按钮的内容居中对齐。

css 复制代码
.btn {
  position: absolute;
  width: 60px;
  height: 60px;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #fff;
  border-radius: 50%;
  z-index: 1000;
  box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
  cursor: pointer;
  transition: all 1.25s;
}

这段代码是设置菜单按钮的样式,将菜单按钮的位置设置为绝对定位,宽度和高度都设置为60px,并将菜单按钮的内容居中对齐。同时,将菜单按钮的背景颜色设置为白色,边框半径设置为50%,并添加了一个box-shadow属性来设置阴影效果。当鼠标悬停在菜单按钮上时,菜单按钮的样式会发生变化。

css 复制代码
.btn i {
  font-size: 32px;
}

这段代码是设置菜单按钮的图标样式,将菜单按钮的字体大小设置为32px。

css 复制代码
.menu span {
  position: absolute;
  left: 0;
  transform-origin: 100px;
  transition:.5s;
  transition-delay: calc(.1s * var(--i));
  transform: rotate(0deg) translateX(80px);
  width: 40px;
  height: 40px;
  background-color: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
}

这段代码是设置菜单按钮旋转的小圆圈的样式,将小圆圈的位置设置为绝对定位,左边距设置为0,将小圆圈的旋转中心设置为100px,并添加了一个transition属性来设置过渡效果。当鼠标悬停在菜单按钮上时,小圆圈的位置会发生变化。

css 复制代码
.menu:hover.btn {
  transform: rotate(315deg);
}

这段代码是设置鼠标悬停在菜单按钮上时的样式,将菜单按钮旋转315度。

css 复制代码
.menu:hover span {
  transform: rotate(calc(360deg / 8 * var(--i)));
}

这段代码是设置鼠标悬停在菜单按钮上时,小圆圈的旋转效果。

css 复制代码
.menu span i {
  transform: rotate(calc(360deg / -8 * var(--i)));
}

这段代码是设置小圆圈的旋转效果,将小圆圈的旋转方向设置为与菜单按钮的旋转方向相反。

css 复制代码
.menu span:hover i {
  color: #f51760;
}

这段代码是设置鼠标悬停在小圆圈上时的样式,将小圆圈的颜色设置为#f51760。

css 复制代码
@font-face {
  font-family: "iconfont";
  /* Project id 4090357 */
  src: url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.woff2?t=1685189584312') format('woff2'),
    url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.woff?t=1685189584312') format('woff'),
    url('//at.alicdn.com/t/c/font_4090357_z2qpnic06um.ttf?t=1685189584312') format('truetype');
}

这段代码是定义一个字体,将字体的名称设置为"iconfont",字体的来源设置为三个不同的格式,分别为woff2、woff和ttf。

css 复制代码
.iconfont {
  font-family: "iconfont"!important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

这段代码是设置字体的样式,将字体的名称设置为"iconfont",字体的大小设置为16px,字体的样式设置为普通字体,并添加了一些属性来优化字体的显示效果。

css 复制代码
.icon-add:before {
  content: "\e60c";
}

这段代码是定义一个图标,将图标的名称设置为"icon-add",将图标的Unicode编码设置为"\e60c",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-home:before {
  content: "\e604";
}

这段代码是定义一个图标,将图标的名称设置为"icon-home",将图标的Unicode编码设置为"\e604",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-more:before {
  content: "\e606";
}

这段代码是定义一个图标,将图标的名称设置为"icon-more",将图标的Unicode编码设置为"\e606",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-gift:before {
  content: "\e611";
}

这段代码是定义一个图标,将图标的名称设置为"icon-gift",将图标的Unicode编码设置为"\e611",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-setting:before {
  content: "\e612";
}

这段代码是定义一个图标,将图标的名称设置为"icon-setting",将图标的Unicode编码设置为"\e612",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-message:before {
  content: "\e613";
}

这段代码是定义一个图标,将图标的名称设置为"icon-message",将图标的Unicode编码设置为"\e613",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-star:before {
  content: "\e618";
}

这段代码是定义一个图标,将图标的名称设置为"icon-star",将图标的Unicode编码设置为"\e618",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-cart:before {
    content: "\e61d";
}

这段代码是定义一个图标,将图标的名称设置为"icon-cart",将图标的Unicode编码设置为"\e61d",这个编码是阿里巴巴的图标库中的一个图标的编码。

css 复制代码
.icon-money:before {
    content: "\e61e";
}

这段代码是定义一个图标,将图标的名称设置为"icon-money",将图标的Unicode编码设置为"\e61e",这个编码是阿里巴巴的图标库中的一个图标的编码。

相关推荐
百万蹄蹄向前冲2 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙2 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan3 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen4 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理4 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒5 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche15005 小时前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情6735 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
SoonITer5 小时前
怎样构建一个 Agent-friendly 的网站
前端·agent
颜进强6 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程