You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复CSS旋转轮盘中选项堆叠重叠的问题?

旋转轮盘布局异常:第5-8个扇形堆叠在第4个之上

问题描述

我尝试实现一个带8个等距扇形的旋转轮盘,目前遇到以下布局问题:

  • 仅前3个选项的位置、尺寸、文本显示正常
  • 第4个选项尺寸和形状正常,但第5至8个选项全部堆叠在第4个之上,尺寸与方向异常
  • 第5-8个选项的文本仅在特定位置显示,甚至完全不显示

原代码

CSS代码

@import url('https://fonts.googleapis.com/css?family=Poppins:200,300,400,500,600,700,800,900&display=snap');
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: 'Poppins', sans-serif;
}

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

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

.container .spinBtn {
  position: absolute;
  width: 60px;
  height: 60px;
  background: #fff;
  border-radius: 50%;
  z-index: 10;
  display: flex;
  justify-content: center;
  align-items: center;
  text-transform: uppercase;
  font-weight: 600;
  color: #333;
  letter-spacing: 0.1em;
  border: 4px solid rgba(0, 0, 0, 0.75);
  cursor: pointer;
  user-select: none;
}

.container .spinBtn::before {
  content: '';
  position: absolute;
  top: -28px;
  width: 20px;
  height: 30px;
  background: #fff;
  clip-path: polygon(50% 0%, 15% 100%, 85% 100%);
}

.container .wheel {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #333;
  overflow: hidden;
  border-radius: 50%;
  box-shadow: 0 0 0 5px #333, 0 0 0 15px #fff, 0 0 0 18px #111;
}

.container .wheel .number {
  position: absolute;
  width: 50%;
  height: 50%;
  background: var(--clr);
  transform-origin: bottom right;
  transform: rotate(calc(45deg * var(--i)));
  clip-path: polygon(0 0, 56% 0, 100% 100%, 0 56%);
  display: flex;
  justify-content: center;
  align-items: center;
  user-select: none;
  cursor: pointer;
}

HTML代码

<div class="container">
  <div class="spinBtn">Spin</div>
  <div class="wheel">
    <div class="number" style="--i:1;--clr:#db7093;"><span>Bite Release</span></div>
    <div class="number" style="--i:2;--clr:#20b2aa;"><span>Front Choke Release</span></div>
    <div class="number" style="--i:3;--clr:#d63e92;"><span>Stripping a Grab</span></div>
    <div class="number" style="--i:4;--clr:#daa520;"><span>Wrist Release</span>
      <div class="number" style="--i:5;--clr:#ff340f;"><span>Shoulder Check</span></div>
      <div class="number" style="--i:6;--clr:#ff7f50;"><span>Protective Shuffle</span></div>
      <div class="number" style="--i:7;--clr:#3cb371;"><span>Safety Stance</span></div>
      <div class="number" style="--i:8;--clr:#4169e1;"><span>Elbow Check</span></div>
    </div>
  </div>

问题原因

核心问题是HTML结构错误:你把第5-8个.number元素嵌套在了第4个.number元素内部,而不是作为.wheel的直接子元素。由于.number使用绝对定位,嵌套后这些子元素的定位和旋转会基于父元素(第4个扇形),而非轮盘本身,导致它们全部堆叠在第4个扇形区域内。

修复方案

1. 修正HTML结构

将第5-8个.number元素从第4个里面移出来,作为.wheel的直接子元素:

<div class="container">
  <div class="spinBtn">Spin</div>
  <div class="wheel">
    <div class="number" style="--i:1;--clr:#db7093;"><span>Bite Release</span></div>
    <div class="number" style="--i:2;--clr:#20b2aa;"><span>Front Choke Release</span></div>
    <div class="number" style="--i:3;--clr:#d63e92;"><span>Stripping a Grab</span></div>
    <div class="number" style="--i:4;--clr:#daa520;"><span>Wrist Release</span></div>
    <div class="number" style="--i:5;--clr:#ff340f;"><span>Shoulder Check</span></div>
    <div class="number" style="--i:6;--clr:#ff7f50;"><span>Protective Shuffle</span></div>
    <div class="number" style="--i:7;--clr:#3cb371;"><span>Safety Stance</span></div>
    <div class="number" style="--i:8;--clr:#4169e1;"><span>Elbow Check</span></div>
  </div>
</div>

2. 优化文本显示

为了让扇形内的文本保持水平(抵消扇形的旋转角度),在CSS中添加以下样式:

.container .wheel .number span {
  position: relative;
  transform: rotate(45deg);
  font-size: 0.9em;
  font-weight: 500;
  color: #fff;
  text-shadow: 0 2px 2px rgba(0,0,0,0.2);
  width: 60%;
  text-align: center;
}

效果说明

修复后,8个扇形会以轮盘中心为原点,按45度间隔均匀分布,每个扇形的文本也会水平显示,符合预期效果。

内容的提问来源于stack exchange,提问作者Finn Flaherty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:24:59