如何在css中创建叠加层?

时间:2012-03-15 16:31:52

标签: html css

我想创建一个任意大小的div,然后在该div上面显示一些东西。在css中完全按照下面的div来定位和调整叠加层的最佳方法是什么?

9 个答案:

答案 0 :(得分:110)

您可以使用position:absolute将叠加层放置在div中,然后将其拉伸到所有方向,如下所示:

CSS 已更新*

.overlay {
    position:absolute;
    top:0;
    left:0;
    right:0;
    bottom:0;
    background-color:rgba(0, 0, 0, 0.85);
    background: url(data:;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAATSURBVBhXY2RgYNgHxGAAYuwDAA78AjwwRoQYAAAAAElFTkSuQmCC) repeat scroll transparent\9; /* ie fallback png background image */
    z-index:9999;
    color:white;
}

您只需要确保您的父div添加了position:relative属性并且z-index更低。


制作一个适用于所有浏览器的演示,包括IE7 +,适用于下面的评论者。

Demo

从css中删除了opacity属性,而是使用rGBA颜色来提供背景,只使用背景,不透明度级别。这样,叠加所承载的内容不会受到影响。由于IE不支持rGBA,我使用IE hack而不是给它一个base64编码的PNG背景图像来填充叠加div,这样我们就可以避开IE不透明度问题,它也将不透明度应用于子元素。

答案 1 :(得分:8)

http://jsfiddle.net/55LNG/1/

CSS:

#box{
    border:1px solid black;
    position:relative;
}
#overlay{
    position:absolute;
    top:0px;
    left:0px;
    bottom:0px;
    right:0px;
    background-color:rgba(255,255,0,0.5);
}

答案 2 :(得分:8)

我迟到了派对,但是如果你想只使用CSS对任意元素进行操作,而不需要处理定位,叠加div等,你可以使用插入框阴影:

box-shadow: inset 0px 0px 0 2000px rgba(0,0,0,0.5);

这适用于任何小于4000像素长或宽的元素。

示例:http://jsfiddle.net/jTwPc/

答案 3 :(得分:0)

没有看到当前HTML和CSS示例的快速回答是使用z-index

的CSS:

#div1 {
position: relative;
z-index: 1;
}

#div2 {
position: relative;
z-index: 2;
}

其中div2是叠加层

答案 4 :(得分:0)

我建议使用css属性来执行此操作。您可以使用position:absolute将元素置于另一个元素之上。

例如:

<div id="container">
   <div id="on-top">Top!</div>
   <div id="on-bottom">Bottom!</div>
</div>

和css

#container {position:relative;}
#on-top {position:absolute; z-index:5;}
#on-bottom {position:absolute; z-index:4;}

我会看一下这个建议: http://www.w3schools.com/cssref/pr_class_position.asp

最后这里有一个jsfiddle向你展示我的例子

http://jsfiddle.net/Wgfw6/

答案 5 :(得分:0)

如果你不介意搞乱z-index,但是你想避免为叠加添加额外的div,你可以使用以下方法

/* make sure ::before is positioned relative to .foo */
.foo { position: relative; }

/* overlay */
.foo::before {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0,0,0,0.5);
    z-index: 0;
}
/* make sure all elements inside .foo placed above overlay element */
.foo > * { z-index: 1; }

答案 6 :(得分:0)

这是使用伪元素的叠加层(例如:不需要添加更多标记来执行此操作)

&#13;
&#13;
.box {
  background: 0 0 url(http://ianfarb.com/wp-content/uploads/2013/10/nicholas-hodag.jpg);
  width: 300px;
  height: 200px;
}

.box:after {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.4);
}
&#13;
  <div class="box"></div>
&#13;
&#13;
&#13;

答案 7 :(得分:0)

我刚刚在codepen上遇到了类似的问题,这就是我使用简单的css标记创建叠加层的方法。我创建了一个应用了类.box的div元素。在这个div里面我创建了两个div,一个用.inner类应用于它,另一个用.notext类应用于它。 .box div中的这两个类最初都设置为display:none,但是当.box悬停时,这些类都可见。

&#13;
&#13;
.box{
  height:450px;
  width:450px;
  border:1px solid black;
  margin-top:50px;
  display:inline-block;
  margin-left:50px;
  transition: width 2s, height 2s;
  position:relative;
  text-align: center;
    background:url('https://upload.wikimedia.org/wikipedia/commons/c/cd/Panda_Cub_from_Wolong,_Sichuan,_China.JPG');
  background-size:cover;
  background-position:center;
  
}
.box:hover{
  width:490px;
  height:490px;
}
.inner{
  border:1px solid red;
  position:relative;
  width:100%;
  height:100%;
  top:0px;
  left:0px;
  display:none; 
  color:white;
  font-size:xx-large;
  z-index:10;
}
.box:hover > .inner{
  display:inline-block;
}
.notext{
  height:30px;
  width:30px;
  border:1px solid blue;
  position:absolute;
  top:0px;
  left:0px;
  width:100%;
  height:100%;
  display:none;
}
.box:hover > .notext{
  background-color:black;
  opacity:0.5;
  display:inline-block;
}
&#13;
<div class="box">
  <div class="inner">
    <p>Panda!</p>
  </div>
  <div class="notext"></div>
</div>
&#13;
&#13;
&#13;

希望这有帮助! :)欢迎任何建议。

答案 8 :(得分:-1)

         div{
         background-image:url('');
         background-size:cover;
         background-position:top center;
         position:relative;
         }

         div:before{
         content:'';
         position:absolute;
         left:0;
         top:0;
         height:100%;
         width:100%;
         background-color:rgba(0,0,0,0.7);
         }