【问题标题】:CSS3: Cube with shadowCSS3:带阴影的立方体
【发布时间】:2011-11-01 18:35:24
【问题描述】:

在这种情况下,我认为图像胜于雄辩。

我想得到这个效果:

但我能用 CSS3 做的最好的事情是:

而这方面的代码实在是太糟糕了:

box-shadow: 1px 1px hsl(0, 0%, 27%),
            2px 2px hsl(0, 0%, 27%),
            3px 3px hsl(0, 0%, 27%),
            4px 4px hsl(0, 0%, 27%),
            5px 5px hsl(0, 0%, 27%),
            6px 6px hsl(0, 0%, 27%),
            7px 7px hsl(0, 0%, 27%),
            8px 8px hsl(0, 0%, 27%),
            ...

有什么方法可以用纯 CSS3 创建这样的效果吗?我不介意它是 3D 的,但最好是等距的。

我不需要将内容放在盒子的侧面,只需放在正面,所以我只使用一个 <div> 元素。

这是我目前所拥有的:http://jsfiddle.net/X7xSf/3/

任何帮助将不胜感激!

【问题讨论】:

  • 看看这个:作者解释了如何创建一个立方体:paulrhayes.com/experiments/cube/index.html
  • 我以前见过这种效果,但它需要 3 个<div> 元素。我正在尝试创建一个跨浏览器解决方案,它只在 IE 等上显示一个平面正方形,在 Webkit 和 Firefox 中显示一个立方体。
  • @Blender 为什么不在 FF、Webkit、 IE 中使用立方体。 ;)(可能需要使用多个元素)
  • 我正在尝试对我的图片库进行拉皮条,其中每张图片都具有这种立方体结构。当你将鼠标悬停在它上面时,立方体会从网格中出来并形成一个洞。我有大约 50 张图片,这可能会对低端(cough IE cough)浏览器造成负担。但如果我找不到 CSS3 单元素解决方案,我想我将不得不用 3 个元素来解决......
  • 有趣的是,仅限 Internet Explorer 的 Shadow filter 几乎可以产生这种效果,但阴影会逐渐消失。

标签: html css cube isometric


【解决方案1】:

我会在一些 CSS 生成的元素上使用一些倾斜变换...看看这个:

http://jsfiddle.net/X7xSf/12/

如果我想在生产中使用它,我可能会确定哪些浏览器支持之前和之后,但不支持转换(仅限 IE8),然后使用 Paul Irish 从 2008 年开始的方法(http://paulirish.com/2008/ conditional-stylesheets-vs-css-hacks-answer-neither/) 为 IE8 关闭此功能。

【讨论】:

  • 只是考虑使用:before:after。这绝对是要走的路,谢谢!
  • 如果你改变尺寸要小心,我必须手动计算偏移量、宽度和高度。
  • 你不应该手动调整任何东西,真的;我认为以下updated demo 应该足够优雅地处理事情..? [更新了演示]。
  • 我将bottomleft 设置为100% 以将其推送到相关边缘,在“其他”边缘上指定0 以使其全高/全-宽度,然后为transform-origin; 指定top left 我不记得我是否做了其他任何事情,看着它......但它似乎可以在没有重新声明宽度/高度/偏移量的情况下愉快地工作=/
  • 你不知道我玩这个有多开心:jsfiddle.net/X7xSf/29
【解决方案2】:

嗯...我的想法是使用边框黑客和一些掩蔽来让它在...至少在 IE 8 中工作? 但我不知道如何让边框向后动画已修复。

你可以在这里看到我的想法:http://jsfiddle.net/k2AdU/1

代码概念是使用 :before 和 :after 为角落创建遮罩

.cube
{
    width:100px;
    height:100px;
    background:#454545;
    position:relative;
    border-right:20px solid #333;
    border-bottom:20px solid #111;
    border-right-width:0px;
    border-bottom-width:0px;
    left:20px;
    top:20px;
}
.cube:after
{
    content:"";
    display:block;
    position:absolute;
    left:0px;
    top:100%;
    border:10px solid transparent;
    border-left:10px solid white;
    border-bottom:10px solid white;
}
.cube:before
{
    content:"";
    display:block;
    position:absolute;
    top:0px;
    left:100%;
    border:10px solid transparent;
    border-top:10px solid white;
    border-right:10px solid white;
}

【讨论】:

  • 我不会使用 jQuery 制作动画。 CSS3 转换!没有想到使用边框。感谢您的代码!
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多