【问题标题】:want to show the thickness of an element while it rotate想要在旋转时显示元素的厚度
【发布时间】:2012-07-23 14:31:12
【问题描述】:

我通过 CSS 将一枚硬币沿 Y 轴旋转 90 度。有没有办法让我可以在硬币旋转后显示硬币的厚度,我想我可以在硬币沿 Y 轴旋转后缩放 Y,但这似乎不起作用。如果可能的话,请提出一些方法来做同样的事情。 link_on_js fiddle 相同。请使用 webkit 浏览器打开链接。

css

.coin {
    display: block;
    background: url("url-to-image-of-coin.jpg");
    background-size: 100% 100%;
    width: 100px;
    height: 100px;
    margin: auto;
    border-radius: 100%;
    transition: all 500ms linear;
}

.flip {
    transform: rotateY(180deg);
}

html

<div class="coin"></div>

jquery

$('.coin').click(function() {
    $(this).toggleClass('flip');
});

小提琴

http://jsfiddle.net/7EtLu/22/

【问题讨论】:

  • “硬币的厚度”是什么意思?它只是二维的,不存在真正的 z 轴。
  • 因为我使用硬币的 2-D 图像但实际上硬币是 3-D 对象所以当我应该沿 Y 轴旋转它时我应该看到厚度以及具有逼真的效果.这可以用 css 本身完成吗??
  • 啊,好吧。我认为 CSS 不能满足您的要求。这看起来像是 Canvas 的任务。但我没有这方面的经验。
  • 好吧,即使我不知道,谢谢你的时间 :)

标签: jquery css jquery-animate rotation css-transitions


【解决方案1】:

@joshnh 感谢提供的灵感,这里稍作修改使其看起来更像:

  <div class="flip-card">
    <div class="flip-card-inner">
      <div class="flip-card-front"></div>
      <div class="flip-card-thick"></div>
      <div class="flip-card-back"></div>
    </div>
  </div>
.flip-card {
  background-color: transparent;
  width: 300px;
  height: 300px;
  perspective: 1000px;
}

.flip-card-inner {
  position: relative;
  width: 100%;
  height: 100%;
  text-align: center;
  background: transparent url(https://i.imgur.com/GPCt3mC.jpg) no-repeat;
  background-size: 100% 100%;
  border-radius: 100%;
  transition: transform 4s;
  transform-style: preserve-3d;
}


.flip-card-front, .flip-card-back, .flip-card-inner:before, .flip-card-inner:after  {
  background-color: #a37131;
  position: absolute;
  width: 100%;
  height: 100%;
  border-radius: 100%;
  overflow: hidden;
  z-index: 1;
}

.flip-card-inner:before {
  content: '';
  top: 0;
  left: 0;
  transform: rotateY(180deg) translateZ(1px);
  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.25), hsla(0,0%,0%,.25));
}

.flip-card-inner:after {
  content: '';
  top: 0;
  left: 0;
  transform: rotateY(180deg) translateZ(10px);
  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.25), hsla(0,0%,0%,.25));
}

.flip-card-front {
  background-color: #bbb;
  color: black;
}

.flip-card-back {
  background-color: #a37131;
  color: white;
  transform: rotateY(180deg) translateZ(11px);
}

.flip-card-thick {
  background-color: #a37131;
  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.25), hsla(0,0%,0%,.25));
  bottom: 0;
  left: 130px;
  position: absolute;
  top: 0px;
  width: 10px;
  z-index: -10;
  transform: rotateY(-90deg);
  transform-origin: 100% 50%;
}

.flip-card:hover .flip-card-inner {
  transform: rotateY(180deg);
}

codepen

【讨论】:

    【解决方案2】:

    您可以使用伪元素来产生类似的效果。这是一个例子:http://jsfiddle.net/joshnh/y7rQL/

    &lt;div class="coin"&gt;&lt;/div&gt;
    body {
        transform: perspective(500px);
        transform-style: preserve-3d;
    }
    .coin {
        background-image: url("http://www.coolemails4u.com/wp-content/uploads/2010/10/indian_rupee.png");
        background-size: 100% 100%;
        border-radius: 100%;
        height: 100px;
        margin: 50px auto;
        position: relative;
        transition: .5s linear;
        transform-style: preserve-3d;
        width: 100px;
    }
    .coin:after {
        background-color: #262626;
        background-image: -webkit-linear-gradient(hsla(0,0%,100%,.25), hsla(0,0%,0%,.25));
        bottom: 0;
        content: '';
        left: 45px;
        position: absolute;
        top: 0;
        transform: rotateY(-90deg);
        transform-origin: 100% 50%;
        width: 5px;
        z-index: -10;
    }
    .coin:before {
        background-color: #262626;
        background-image: -webkit-linear-gradient(hsla(0,0%,100%,.25), hsla(0,0%,0%,.25));
        border-radius: 100%;
        content: '';
        height: 100px;
        left: 0;
        position: absolute;
        top: 0;
        transform: translateZ(-5px);
        width: 100px;
    }
    .coin:hover {
        transform: rotateY(90deg);
    }​
    

    另外,这是一个旋转 180 度的版本(虽然不是很好):http://jsfiddle.net/joshnh/Bz22S/

    【讨论】:

    • @joshnh 非常感谢你的回复真的很有帮助:) ..... 真的很棒你是怎么做到的......
    • @joshnh 我试图在我的大代码中使用你的方法,我的硬币 div 在其他 div 的大树中。似乎 Preserve-3d 属性不起作用,您能建议我在哪些情况下不维护 preserve-3d 并且 -webkit-transition-style 只是设置为 flat。请帮助
    • 嗯,奇怪。可能值得问另一个问题?如果没有进一步的信息,很难知道发生了什么。
    • 您好,这是 180 度以上旋转的固定版本,看起来与 90 度旋转一样好。 jsfiddle.net/t8gberzy/1 由于某种原因,我无法在 translateZ 的父元素中转换伪元素,所以布局没有那么苗条,但它可以工作并且看起来还不错。
    • 一些解释:::before是硬币的背面,而::after模拟硬币的边缘。当您显着减慢转换速度时,这个技巧就很明显了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多