孩子们身上的盒子阴影

Ron*_*ld 37 html css css3

如何box-shadow在其子元素之上渲染嵌入式CSS3 ?

问题:

在此输入图像描述

HTML:

<div id="chatroom">
    <div class="chatmessage"><b>User 1:</b>Test</div>
    <div class="chatmessage"><b>User 2:</b>Test</div>
    <div class="chatmessage"><b>User 1:</b>Test</div>
    <div class="chatmessage"><b>User 2:</b>Test</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#chatroom{
    border: 1px solid #CCC;
    height: 135px;
    font-size: 0.75em;
    line-height: 1.2em;
    overflow: auto;
    -moz-box-shadow: inset 0 0px 4px rgba(0,0,0,.55);
    -webkit-box-shadow: inset 0 0px 4px rgba(0,0,0,.55);
}
.chatmessage{
    padding: 4px 2px;
}
.chatmessage b{
    margin-right: 2px;
}
.chatmessage:nth-child(2n) {
    background: #EEE;
}
Run Code Online (Sandbox Code Playgroud)

mig*_*ain 37

要避免使用其他元素,可以使用css伪元素.试试这个演示.

#chatroom {
    position: relative;
}

#chatroom:before {
    content: "";

    /* Expand element */
    position: absolute;
    left: 0px;
    top: 0px;
    right: 0px;
    bottom: 0px;

    -moz-box-shadow: inset 0 0 8px rgba(0,0,0,.55);
    -webkit-box-shadow: inset 0 0 8px rgba(0,0,0,.55);
    box-shadow: inset 0 0 8px rgba(0,0,0,.55);

    /* Disable click events */
    pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

基本上这个css为你创造了额外的元素.请注意pointer-events:none,允许单击事件通过此元素.

请记住,pointer-events:none在某些移动设备上关于触摸滚动效果不佳(点击/录制效果很好).因此,我最终没有使用插入阴影.

  • 如果#chatroom 元素是滚动元素,则效果不佳。有任何想法吗? (2认同)

Gab*_*oli 20

不能直接从css完成..(如果超过重叠元素,它不是阴影)

你需要通过添加一个div(或使用miguelcobain的答案所建议的伪元素)重新编写你的html 来覆盖阴影和你的CSS以使新的div具有阴影.

#chatroom {
  border: 1px solid #CCC;
  height: 135px;
  font-size: 0.75em;
  line-height: 1.2em;
  overflow: auto;
  position: relative;
}

.shadow {
  position: absolute;
  left: 0px;
  top: 0px;
  right: 0px;
  bottom: 0px;
  -moz-box-shadow: inset 0 0px 4px rgba(0, 0, 0, .55);
  -webkit-box-shadow: inset 0 0px 4px rgba(0, 0, 0, .55);
  box-shadow: inset 0 0px 4px rgba(0, 0, 0, .55);
}

.chatmessage {
  padding: 4px 2px;
}

.chatmessage b {
  margin-right: 2px;
}

.chatmessage:nth-child(2n) {
  background: #EEE;
}
Run Code Online (Sandbox Code Playgroud)
<div id="chatroom">
  <div class="chatmessage"><b>User 1:</b>Test</div>
  <div class="chatmessage"><b>User 2:</b>Test</div>
  <div class="chatmessage"><b>User 1:</b>Test</div>
  <div class="chatmessage"><b>User 2:</b>Test</div>
  <div class="shadow"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 所以我们基本上再次黑客攻击了.这真是难过;这真是伤心.:( (6认同)
  • 我有一个跟进问题.正如您所看到的,#chatroom将溢出设置为auto,因此一旦填充了足够的内容,它就可以滚动.滚动div时,阴影元素也会滚动.有没有简单的方法来匹配大小?我尝试使用scrollHeight设置阴影的高度,但这看起来很脆弱.有任何想法吗? (5认同)
  • @LoïcFaure-Lacroix,对于这种情况,你可以使用css [`pointer-events:none`](https://developer.mozilla.org/en/CSS/pointer-events/)属性(*[用于现代]浏览器](http://caniuse.com/pointer-events)*)在`.shadow`元素上.. (4认同)
  • 它有效,但在我的情况下无法使用.我有按钮,它无法点击任何东西.但是,如果有人想将其添加到图像中,那真是个不错的小技巧. (3认同)