在内容下面插入框阴影

hen*_*ron 31 css z-index css3

我不明白为什么,但插入的盒子阴影在我的内容之下.

这是一个例子:

div {
   box-shadow:inset 0 0 10px black;
   height:300px;
   color:red;
}
Run Code Online (Sandbox Code Playgroud)
<div>
   a
</div>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/MAckM/

你看到它a位于盒子阴影的顶部.

如何让盒子阴影位于a

fnc*_*mbo 34

你需要在div中创建一个新元素,绝对定位,高度和宽度为100%,然后给该元素赋予框阴影.

HTML:

<div>
    <div></div>
    a
</div>?
Run Code Online (Sandbox Code Playgroud)

CSS:

div {
    height:300px;
    color:red;
    position:relative;
}

div div {
    box-shadow:inset 0 0 10px black;
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
}?
Run Code Online (Sandbox Code Playgroud)

这是一个JSFiddle.

编辑:

或者,您可以使用伪元素:

HTML:

<div>
    a
</div>?
Run Code Online (Sandbox Code Playgroud)

CSS:

div {
    height:300px;
    color:red;
    position:relative;
}

div:before {
    content:'';
    display:block;
    box-shadow:inset 0 0 10px black;
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
}?
Run Code Online (Sandbox Code Playgroud)

JSFiddle.

  • 在overlay元素上使用`pointer-events:none;`. (6认同)
  • 在现代浏览器(包括 IE9+)中,可以使用生成的内容(`:before`、`:after`)代替真实元素。(IE8 也支持生成的内容,但有一个错误,阻止生成的内容高于真实内容,当然也不支持 CSS 框阴影本身。) (2认同)
  • 显然,对于具有可滚动内容的容器,最好使用空的 `div`,因为 `:before` 会使阴影随内容滚动。 (2认同)
  • 对我来说,div解决方案还可以使阴影滚动。另外,我失去了父母填充来调整内容。 (2认同)

Mic*_*tke 5

这个答案通过一个最小的例子提供了最直接的解决方案,并解决了滚动问题。

不幸的是,没有办法避免额外的包装div(由于box-shadow分层)。

.container {
  position: relative;
}

.container::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  box-shadow: inset 0 0 9px 3px yellow;
  pointer-events: none;
}

.items {
  height: 100px;
  overflow: scroll;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="items">
    <div class="item">One</div>
    <div class="item">Two</div>
    <div class="item">Three</div>
    <div class="item">Four</div>
    <div class="item">Five</div>
    <div class="item">Six</div>
    <div class="item">Seven</div>
    <div class="item">Eight</div>
    <div class="item">Nine</div>
    <div class="item">Ten</div>
    <div class="item">Eleven</div>
    <div class="item">Twelve</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)