【问题标题】:Is it possible to create shadow like that in CSS3?是否可以在 CSS3 中创建像这样的阴影?
【发布时间】:2012-07-27 09:54:41
【问题描述】:

我几乎可以肯定在 CSS3 中创建这样的阴影是不可能的,但我想问的是以防万一有人尝试过并找到了方法:

右侧有侧边栏(高度有限),左侧有较长的内容。阴影在开始时淡入,在最后淡出。这个阴影可以是纯程序性的(根本没有光栅图像)吗?

【问题讨论】:

  • 也许你可以通过在底部和顶部添加白色阴影来作弊
  • @BiAiB 这就是我正在寻找的技巧。可能有多个渐变或多个阴影。
  • @SpaceBeers 我以前显然见过这个。我在 Google 上搜索了没有匹配的结果。
  • 您“可以”尝试 3 张背景图片。每个淡入淡出一个,中间部分一个。我会尽快尝试做一个例子。

标签: html css shadow


【解决方案1】:

你可以像这样使用径向渐变:

#leftshadow
{
    margin-left: 10px;
    height: 200px;
    width: 20px;
    border-left:1px solid #ebebeb;
    border-left:1px solid rgba(0,0,0,0.4);
    background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.3)),to(rgba(0,0,0,0)));
    -webkit-mask-box-image:-webkit-gradient(linear,left top,right bottom,color-stop(0.0,rgba(0,0,0,0)),color-stop(0.5,rgba(0,0,0,.8)),color-stop(1.0,rgba(0,0,0,0)));
    background-image:-moz-radial-gradient(left,ellipse farthest-side,rgba(0,0,0,.3),rgba(0,0,0,0));
}​

jsFiddle here

Different tweak is here


原答案

如果你需要一个“简单”的嵌入阴影,你也可以这样实现:

#leftshadow
{
    -webkit-box-shadow: inset 5px 0px 5px -2px rgba(0,0,0,0.4);
    -moz-box-shadow: inset 5px 0px 5px -2px rgba(0,0,0,0.4);
    box-shadow: inset inset 5px 0px 5px -2px rgba(0,0,0,0.4);
}​

jsFiddle here

【讨论】:

  • 是的,但我最关心的是阴影的顶部和底部。有没有办法让它像淡入一样开始?软启动而不是硬边缘。
  • 编辑后:是的,我认为这很完美或几乎完美:) 我会做一些调整,看看它是否有效。
  • 主要限制是 width: 15px; 从我所看到的但如果没有办法绕过宽度属性,我可以制作辅助容器。你觉得width: 15px;怎么样?可以消除这种情况并改用我的宽度吗?
  • @NikolaK。你现在可以恢复-1吗? :P
  • @Flow 我所做的是指定宽度(可以是像素或百分比),然后在容器中绝对定位阴影
【解决方案2】:

这里是我讲的技巧,就是在二级 div 上叠加一个白色的阴影:

http://jsfiddle.net/dmezK/

我认为它并不完美,但您可以对其进行调整以满足您的需求。

这是 HTML:

<div id="main">
<div id="cheat"></div>

</div>​

这是 CSS:

#main
{
    width: 100px;
    height: 300px;
    -webkit-box-shadow: inset 10px 0px 5px -2px #888 ;
    position: relative;
}

#cheat {
    width: 300px;
    height: 300px;
    -webkit-box-shadow: inset 10px 0px 5px -50px white ;
    position: absolute;
    left: -100px;
}

注意:也许您可以使用多个盒子阴影,但它没有得到广泛支持。

【讨论】:

  • 感谢您的回答。我最关心的是那个阴影的顶部和底部。软启动而不是硬边缘。
【解决方案3】:

这是我能做到的最接近的:

div {
  width: 300px;
  height: 600px;
  border: solid 1px;
  box-shadow:
    inset 0px 10px 10px #fff,  
    inset 0px -10px 10px #fff,
    inset 10px 0px 20px rgba(0, 0, 0, .3);
}

现场演示:Tinkerbin

【讨论】:

  • 感谢您的回答!它非常接近,但整个容器内仍然存在顶部和底部阴影。无论如何,谢谢你:) 已经找到解决方案真是太好了。我没想到这可以使用纯 CSS3 来完成。
【解决方案4】:

试试这个 http://jsfiddle.net/6QSEc/1/

div{
    height:200px;
    width:100px;
    background-color:white;
    border:1px solid #f1f1f2;
    box-shadow:10px 0px 20px -10px rgba(0,0,0,0.5) inset;
}

【讨论】:

  • 感谢您的回答。我最关心的是那个阴影的顶部和底部。软启动而不是硬边缘。
【解决方案5】:
.box {
    z-index: 100;
    border: none;
    padding: 0 0 0 10px;    
    background-image: url("images/topShadow"), url('images/bottomShadow'), url('images/shadow');
    background-position: 0 top, left top, 0 bottom;
    background-repeat: no-repeat, repeat-x, no-repeat;
}

好的,这是未经测试的,但应该可以进行一些我目前没有时间进行的调整。您有 3 张图像,顶部、中间和底部。您使用 CSS3 多个背景图像将其用作左边框,只需在框的左侧添加一些填充。顺序很重要,因为它处理图像的分层。第一个将在所有其他之上。该顺序充当图像的 z-index。

【讨论】:

  • 感谢您的回答!这就是我现在正在使用的解决方案,但由于有配备 Retina 显示屏的 Macbooks 或 iPad3 等设备以及更多即将推出 - 光栅图像不能很好地工作。最好用 CSS3 替换所有内容。再次感谢! :)
猜你喜欢
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2023-03-30
  • 2020-05-07
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多