gpt4 book ai didi

css - 使用 CSS3 的动画立方体(只有两个面)效果

转载 作者:行者123 更新时间:2023-12-01 02:44:43 25 4
gpt4 key购买 nike

我想重现我根据 this awesome tutorial 准备的这个 jsfiddle (请检查 the demo )。但我不想要按键功能,只需要悬停即可。

http://jsfiddle.net/b5rmW/5/

但这只使用了 2 个面(正面和背面)。

我试过,像这样:

    #cube {
position: relative;
margin: 100px auto 0;
height: 300px;
width: 300px;
-webkit-transition: -webkit-transform .5s linear;
-webkit-transform-style: preserve-3d;

-moz-transition: -moz-transform .5s linear;
-moz-transform-style: preserve-3d;
}

.face {
position: absolute;
height: 300px;
width: 300px;
padding: 0px;
background-color: rgba(50, 50, 50, 1);
font-size: 27px;
line-height: 1em;
color: #fff;
border: 1px solid #555;
border-radius: 3px;
}

#cube .one {
-webkit-transform: rotateX(90deg) translateZ(150px);
-moz-transform: rotateX(90deg) translateZ(150px);
background:red;
}

#cube .two {
-webkit-transform: translateZ(150px);
-moz-transform: translateZ(150px);
background:gold;
}

#cube .three {
-webkit-transform: rotateY(90deg) translateZ(150px);
-moz-transform: rotateY(90deg) translateZ(150px);
background:blue;
}

#cube .four {
-webkit-transform: rotateY(180deg) translateZ(150px);
-moz-transform: rotateY(180deg) translateZ(150px);
background:green;
}

#cube .five {
-webkit-transform: rotateY(-90deg) translateZ(150px);
-moz-transform: rotateY(-90deg) translateZ(150px);
background:orange;
}

#cube .six {
-webkit-transform: rotateX(-90deg) rotate(180deg) translateZ(150px);
-moz-transform: rotateX(-90deg) rotate(180deg) translateZ(150px);
}
#cube:hover{
transform:rotateY(90deg);

}

http://jsfiddle.net/5XTeU/1/

但是效果好像不太一样。

您认为实现第一个 fiddle 所需的最小 div 是多少?

谢谢。

最佳答案

更新:所以对于哪些面需要存在存在轻微的误解......所以这个更新是针对正面侧面面旋转。

但是,在下面的原始答案中,第 1) 点和第 2) 点仍然是代码的有效问题。第 3) 点和第 4) 点不再适用,因为它们涉及背面。可以删除剩余的 CSS 规则。您还可以引入透视 包装器,使立方体看起来“不那么平坦”- 参见 updated demo .

HTML

<div id="experiment">
<div class="cube">
<div class="face front">
front face
</div>
<div class="face side">
side face
</div>
</div>
</div>

CSS

#experiment {
-webkit-perspective: 800;
-webkit-perspective-origin: 50% 200px;

-moz-perspective: 800;
-moz-perspective-origin: 50% 200px;
}

.cube {
position: relative;
margin: 100px auto 0;
height: 300px;
width: 300px;
-webkit-transition: -webkit-transform .5s linear;
-webkit-transform-style: preserve-3d;

-moz-transition: -moz-transform .5s linear;
-moz-transform-style: preserve-3d;
}

.face {
position: absolute;
height: 300px;
width: 300px;
padding: 0px;
font-size: 27px;
line-height: 1em;
color: #fff;
border: 1px solid #555;
border-radius: 3px;
}

.cube .front {
-webkit-transform: translateZ(150px);
-moz-transform: translateZ(150px);
background-color:red;
}

.cube .side {
-webkit-transform: rotateY(-90deg) translateZ(150px);
-moz-transform: rotateY(-90deg) translateZ(150px);
background-color:orange;
}

.cube:hover{
-webkit-transform:rotateY(90deg);
}

原始答案

demo代码有4个问题,我们逐个来看,看看每个问题的解决方案是什么:

1) HTML 的正面 类有一个拼写错误 - 它缺少一个 r

<div class="face font">而不是 <div class="face front">

2) 对于 Webkit 浏览器,您需要使用 transform 的前缀属性

-webkit-transform:rotateY(90deg);而不是 transform:rotateY(90deg);

3) 您选择的背面是错误的面孔。您无意中改变了脸的用途。 正面 是正确的,是 <div>已翻译 150px向外。所以相应的背面应该是翻译过来的-150px向内。然而,如果我们只是这样做,位置是正确的,但当围绕立方体的中心旋转时,背面最终会向后。所以正确的背面是最初围绕Y旋转180°的那个。轴。但是,通过围绕 Y 旋转沿着 Z 轴翻译仍然需要 +150px而不是 -150px .

.cube .back{
-webkit-transform: rotateY(180deg) translateZ(150px);
-moz-transform: rotateY(180deg) translateZ(150px);
background:orange;
}

4) 使背面进入正面开始位置的旋转应该是旋转 180° 而不是 90°

.cube:hover{
-webkit-transform:rotateY(180deg);
}

将所有这些变化放在一起得到 this demo .

HTML

<div class="cube">
<div class="face front">
front face
</div>
<div class="face back">
back face
</div>
</div>

CSS

.cube {
position: relative;
margin: 100px auto 0;
height: 300px;
width: 300px;
-webkit-transition: -webkit-transform .5s linear;
-webkit-transform-style: preserve-3d;
-moz-transition: -moz-transform .5s linear;
-moz-transform-style: preserve-3d;
}

.face {
position: absolute;
height: 300px;
width: 300px;
padding: 0px;
font-size: 27px;
line-height: 1em;
color: #fff;
border: 1px solid #555;
border-radius: 3px;
}

.cube .front {
-webkit-transform: translateZ(150px);
-moz-transform: translateZ(150px);
background-color: red;
}

.cube .back {
-webkit-transform: rotateY(180deg) translateZ(150px);
-moz-transform: rotateY(180deg) translateZ(150px);
background:orange;
}

.cube:hover{
-webkit-transform:rotateY(180deg);
-moz-transform: rotateY(180deg);
transform:rotateY(180deg);
}

关于css - 使用 CSS3 的动画立方体(只有两个面)效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com