2015-04-03 30 views
1

所以我与创建长长的影子,但在纹理背景任务。网上的其他教程都是如何用坚实的背景来做到这一点,该背景对于背景纹理或图像看起来非常糟糕。CSS透明的长影

我非常接近它,尝试一些不同的技术,但是我来到了两种可能性,每一个问题,因此,如果任何人都可以帮我调试它要么将不胜感激。这些不是跨浏览器,我只是想找出最低限度,如果它是可行的,所以请忽略缺乏前缀等。

类型1:纯CSS 在CSS中使用Skew选项我能够添加两个块在左侧和底部有一个渐变。然后,每个倾斜45度,我得到接近预期的效果,但有一条线在那里之间的阴影并不完全符合,我不能去走不重叠: http://jsfiddle.net/mfeola/4bfrkagu/

.block:before, .block:after{ 
    content:"";position:absolute; display:block; 
} 

.block:before{top:0; left:100%; height:100%; width:0; padding-right:100%; 
    transform-origin: 0% 0%; 
    transform: skew(0deg, 45deg); 
    background: linear-gradient(to right, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); 
} 
.block:after{top:100%; left:0; width:100%; height:0; padding-top:100%; 
    transform-origin: 0% 0%; 
    transform: skew(45deg, 0deg); 
    background: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); 
} 

2型:Javascript 随着旋转数学的计算出来,我可以旋转渐变盒做出完美的阴影。问题是如果盒子的大小发生变化,阴影的角度会发生变化,并且这对我所要做的事情不起作用。我希望它能够普遍运作。当我计算出数学时,我在这个包括了一个textarea: http://jsfiddle.net/mfeola/tpdhLqs1/

+0

如果您将右侧阴影的宽度更改为200x,容器的高度,线性渐变将在对角线上匹配得更好http://jsfiddle.net/teddyrised/4bfrkagu/6/ – Terry 2015-04-03 19:32:19

+0

我会这么做,谢谢:)阴影真的排队好得多这种方式 – 2015-04-03 19:49:48

+0

我做了什么,使底部阴影一个正方形(响应与高度0填充顶部100%)得出了相同的结果。事实上,现在它可以自动处理任何高度!非常感谢你带领我朝着正确的方向前进!我会更新问题 – 2015-04-03 21:13:30

回答

0

您可以尝试添加边界渐变来填补空白。

从这个链接想出来:https://css-tricks.com/examples/GradientBorder/

无法得到确切的颜色正确的,但我认为你应该能够做到这一点使用一些边界梯度的格式如下:

.top-to-bottom { 
    border-right: 0 !important; 
    border-left: 0 !important; 
    border-top: 0 !important; 
    border: 1px solid; 
    -webkit-border-image: 
     -webkit-gradient(linear, 0 0, 0 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,1))) 1 100%; 
    -webkit-border-image: 
     -webkit-linear-gradient(rgba(0,0,0,0.5), rgba(0, 0, 0, 1)) 1 100%; 
    -moz-border-image: 
     -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0, 0, 0, 1)) 1 100%;  
    -o-border-image: 
     -o-linear-gradient(rgba(0,0,0,0.5), rgba(0, 0, 0, 1)) 1 100%; 
    border-image: 
     linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0, 0, 0, 1)) 1 100%; 
} 

在这里搞了一些:http://jsfiddle.net/4bfrkagu/13/,但无法得到正确的着色 - 我想我可以把它留给你。

+0

似乎没有工作,现在我一直有一条黑线,而不是一条空线 – 2015-04-07 18:07:30

+0

哦,我想我明白发生了什么......它几乎就像边界,当在两个透明背景重叠的背景,所以你看到的是如果你添加了两个不透明的图像。 - 看看这个小提琴,我摆脱了所有的边界垃圾,并将伪元素向下移动1px。这是一样的效果。所以我建议不要使用'rgba'并选择不透明度,只需用'rgb'选择明确的颜色过渡。那么你应该能够使用边界渐变技巧 – Adjit 2015-04-07 20:05:29

+0

使用任何东西,但透明度不会在带纹理的背景上看起来不错。我更新了小提琴,看起来更像是我需要做的事情。我认为如果我将透明度从黑暗的起始不透明度降低到较轻的透明度,则线条几乎不会引起注意,因此现在应该没问题。如果我没有在颜色中使用阿尔法,那么无论如何我都会在那里使用奇怪的颜色。 – 2015-04-08 17:28:19