蓝桥杯 web 展开你的扇子(css3)


普通答案:

css 复制代码
#box:hover #item1{
  transform: rotate(-60deg);
}
#box:hover #item2{
  transform: rotate(-50deg);
}
#box:hover #item3{
  transform: rotate(-40deg);
}
#box:hover #item4{
  transform: rotate(-30deg);
}
#box:hover #item5{
  transform: rotate(-20deg);
}
#box:hover #item6{
  transform: rotate(-10deg);
}
#box:hover #item12{
  transform: rotate(60deg);
}
#box:hover #item11{
  transform: rotate(50deg);
}
#box:hover #item10{
  transform: rotate(40deg);
}
#box:hover #item9{
  transform: rotate(30deg);
}
#box:hover #item8{
  transform: rotate(20deg);
}
#box:hover #item7{
  transform: rotate(10deg);
}

1. 选择器解析

复制代码
#box:hover #item6 {
  transform: rotateZ(-10deg);
}
(1) #box:hover
  • #box 是一个 ID 选择器,表示选中 HTML 中 id="box" 的元素。
  • :hover 是一个伪类,表示当用户将鼠标悬停在该元素上时应用样式。
  • #box:hover 的意思是:当鼠标悬停在 id="box" 的元素上时,触发相关的样式规则。
(2) #item6
  • #item6 是另一个 ID 选择器,表示选中 HTML 中 id="item6" 的元素。
  • #box:hover #item6 表示:当鼠标悬停在 #box 上时,选中 #box 内部的 #item6 元素。

2. 样式规则

复制代码
transform: rotateZ(-10deg);
(1) transform 属性
  • transform 是一个 CSS 属性,用于对元素进行变换操作(如旋转、缩放、移动等)。
  • 在这里,transform 被用来对 #item6 进行旋转。
(2) rotateZ(-10deg)
  • rotateZtransform 的一个函数,表示围绕 Z 轴旋转。
  • -10deg 表示逆时针旋转 10 度(负值为逆时针,正值为顺时针)。
  • 因此,rotateZ(-10deg) 的意思是:让 #item6 元素围绕 Z 轴逆时针旋转 10 度。

如果你不指定旋转轴(如 rotateX, rotateY, 或 rotateZ),则默认是围绕 Z 轴进行旋转。这意味着单独使用 rotate 实际上等同于 rotateZ


扩展:js 做法

javascript 复制代码
box.onmouseover = () => { 
for(let i = 1; i <=6; i++ ) {
let item = document.querySelector(`#item${i}`) item.style.transform = `rotate(${-60+(i-1)*10}deg)`
console.log(item) } for(let i = 7; i <=12; i++ ) {
let item = document.querySelector(`#item${i}`) item.style.transform = `rotate(${(i-6)*10}deg)` 
console.log(item) }

代码逐行解析

1. box.onmouseover = () => { ... }
  • 这是一个事件绑定,表示当用户将鼠标悬停在 box 元素上时,执行后面的箭头函数。
  • onmouseover 是原生 DOM 的事件属性,类似于 addEventListener('mouseover', ...)
2. 第一个 for 循环
复制代码
for (let i = 1; i <= 6; i++) {
  let item = document.querySelector(`#item${i}`);
  item.style.transform = `rotate(${-60 + (i - 1) * 10}deg)`;
  console.log(item);
}
(1) for (let i = 1; i <= 6; i++)
  • 循环从 i = 1 开始,到 i = 6 结束,总共循环 6 次。
  • 每次循环处理一个 #itemX 元素(#item1#item6)。
(2) let item = document.querySelector(#item${i})
  • 使用模板字符串 #item${i} 动态生成选择器,例如:
    • i = 1 时,选择器为 #item1
    • i = 2 时,选择器为 #item2
  • document.querySelector 返回匹配该选择器的第一个 DOM 元素。
(3) item.style.transform = rotate(${-60 + (i - 1) * 10}deg)``
  • 设置 item 元素的 transform 样式,使其旋转一定的角度。
  • -60 + (i - 1) * 10 是一个数学表达式,用于计算旋转角度:
    • i = 1 时:-60 + (1 - 1) * 10 = -60,即旋转 -60deg
    • i = 2 时:-60 + (2 - 1) * 10 = -50,即旋转 -50deg
    • i = 3 时:-60 + (3 - 1) * 10 = -40,即旋转 -40deg
    • 以此类推,直到 i = 6 时,旋转角度为 -10deg
(4) console.log(item)
  • 打印当前处理的 item 元素,方便调试和查看是否正确选择了目标元素。
3. 第二个 for 循环
复制代码
for (let i = 7; i <= 12; i++) {
  let item = document.querySelector(`#item${i}`);
  item.style.transform = `rotate(${(i - 6) * 10}deg)`;
  console.log(item);
}
(1) for (let i = 7; i <= 12; i++)
  • 循环从 i = 7 开始,到 i = 12 结束,总共循环 6 次。
  • 每次循环处理一个 #itemX 元素(#item7#item12)。
(2) let item = document.querySelector(#item${i})
  • 同第一个循环,动态生成选择器并获取对应的 DOM 元素。
(3) item.style.transform = rotate(${(i - 6) * 10}deg)``
  • 设置 item 元素的 transform 样式,使其旋转一定的角度。
  • (i - 6) * 10 是一个数学表达式,用于计算旋转角度:
    • i = 7 时:(7 - 6) * 10 = 10,即旋转 10deg
    • i = 8 时:(8 - 6) * 10 = 20,即旋转 20deg
    • i = 9 时:(9 - 6) * 10 = 30,即旋转 30deg
    • 以此类推,直到 i = 12 时,旋转角度为 60deg
(4) console.log(item)
  • 同第一个循环,打印当前处理的 item 元素。
相关推荐
疯子****12 小时前
【无标题】
前端·clawdbot
RichardLau_Cx12 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败12 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
晚霞的不甘13 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
黎子越13 小时前
python相关练习
java·前端·python
北极糊的狐14 小时前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
XRJ040618xrj14 小时前
Nginx下构建PC站点
服务器·前端·nginx
We་ct14 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
有诺千金14 小时前
VUE3入门很简单(4)---组件通信(props)
前端·javascript·vue.js
2501_9447114314 小时前
Vue-路由懒加载与组件懒加载
前端·javascript·vue.js