CSS 子悬停、旋转和翻转:饼图问题

CSS Child Hover, Rotate & Clip: Pie Chart Issues

我有一个 3 部分饼图,其中所有 3 个部分几乎相同,但 :hover 不会在第一部分触发,但会在其他两个部分触发。

每个元素都有相同数量的重叠父 div,但其他两个元素工作得很好,所以这应该不是问题。整个情况只是尖叫着随机模糊的功能错误,但我什至不知道该怎么做 "hack-fix" 它。此行为已在 Chrome、FF 和 IE

中观察到

(是的,我知道顶部位置不好,为了简​​单起见,我删除了额外的修复以强调错误)

完整代码: codepen.io

HTML:

<div class="colors">
            <div class="clip" id="color1"><div class="section" id="color1Actual"></div></div>
            <div class="clip" id="color2"><div class="section" id="color2Actual"></div></div>
            <div class="clip" id="color3"><div class="section" id="color3Actual"></div></div>
        </div>

CSS:

.colors {
    width: 131px;
    height: 131px;
    margin-top: 32%;
    margin-left: 12%;
    border-radius: 50%;
}

.colors div {
    position: absolute;
    height: 132px;
    width: 132px;
    border-radius: 50%;
}

#color1Actual {
    background-color: #ADD8E6;
    transform: rotate(60deg);
}

#color1, #color1Actual {
    clip: rect(0px, 132px, 66px, 0px);
}

#color1Actual:hover {
    background-color: #0000FF;
}

#color2Actual {
    background-color: #ADD8E6;
    transform: rotate(60deg);
}

#color2, #color2Actual {
    clip: rect(0px, 132px, 132px, 66px);
}

#color2Actual:hover {
    background-color: #0000FF;
}

#color3Actual {
    background-color: #FFFFE0;
    transform: rotate(-60deg);
}

#color3, #color3Actual {
    clip: rect(0px, 66px, 132px, 0px);
}

#color3Actual:hover {
    background-color: #FFFF00;
}

为此使用z-index

.colors {
    width: 131px;
    height: 131px;
    margin-top: 12%;
    margin-left: 12%;
    border-radius: 50%;
}

.colors div {
    position: absolute;
    height: 132px;
    width: 132px;
    border-radius: 50%;
}

#color1Actual {
    background-color: #ADD8E6;
    transform: rotate(60deg);
    z-index: 1;
}

#color1, #color1Actual {
    clip: rect(0px, 132px, 66px, 0px);
}

#color1Actual:hover {
    background-color: #0000FF;
}

#color2Actual {
    background-color: #ADD8E6;
    transform: rotate(60deg);
    z-index: 2;
}

#color2, #color2Actual {
    clip: rect(0px, 132px, 132px, 66px);
}

#color2Actual:hover {
    background-color: #0000FF;
}

#color3Actual {
    background-color: #FFFFE0;
    transform: rotate(-60deg);
    z-index: 3;
}

#color3, #color3Actual {
    clip: rect(0px, 66px, 132px, 0px);
}

#color3Actual:hover {
    background-color: #FFFF00;
}
<div class="colors">
            <div class="clip" id="color1"><div class="section" id="color1Actual"></div></div>
            <div class="clip" id="color2"><div class="section" id="color2Actual"></div></div>
            <div class="clip" id="color3"><div class="section" id="color3Actual"></div></div>
        </div>

其他 div 在第一个 div 之上,所以您只需要一个 z-index 就可以了:)

.colors {
  width: 131px;
  height: 131px;
  margin-top: 32%;
  margin-left: 12%;
  border-radius: 50%;
}
.colors div {
  position: absolute;
  height: 132px;
  width: 132px;
  border-radius: 50%;
}
#color1Actual {
  background-color: #ADD8E6;
  transform: rotate(60deg);
  z-index:1;
}
#color1,
#color1Actual {
  clip: rect(0px, 132px, 66px, 0px);
}
#color1Actual:hover {
  background-color: #0000FF;
}
#color2Actual {
  background-color: #ADD8E6;
  transform: rotate(60deg);
}
#color2,
#color2Actual {
  clip: rect(0px, 132px, 132px, 66px);
}
#color2Actual:hover {
  background-color: #0000FF;
}
#color3Actual {
  background-color: #FFFFE0;
  transform: rotate(-60deg);
}
#color3,
#color3Actual {
  clip: rect(0px, 66px, 132px, 0px);
}
#color3Actual:hover {
  background-color: #FFFF00;
}
<div class="colors">
  <div class="clip" id="color1">
    <div class="section" id="color1Actual"></div>
  </div>
  <div class="clip" id="color2">
    <div class="section" id="color2Actual"></div>
  </div>
  <div class="clip" id="color3">
    <div class="section" id="color3Actual"></div>
  </div>
</div>