如何将img元素放在透明img元素后面
How to put an img element behind a transparent img element?
我有两个img元素,我希望第一个image.png在透明image.png后面。我尝试了很多不同的东西(z索引、透明背景色、rgba背景色、绝对和相对定位、在div中嵌套一个,使它们都是div)。现在我一直在尝试使用一个透明的.png图像。图片.png实际上在它的后面,但它仍然通过它显示出来。请帮忙。
html:
<body>
<main class="site-wrapper">
<div class="carnival"></div>
<div id="images">
<img id="divbox" src="images/divbox.png">
<img id="clown1" src="images/clown1.png">
</div>
</main>
</body>
js:(我在js b/c中做了样式,我很想学习如何用这种方式做):
//styles
//divbox:
document.getElementById('divbox').style.display = "inline-block";
document.getElementById('divbox').style.transform = "skew(-2deg)";
document.getElementById('divbox').style.marginTop = "21%";
document.getElementById('divbox').style.marginLeft = "47.6%";
document.getElementById('divbox').style.height = "200px";
document.getElementById('divbox').style.width = "200px";
document.getElementById('divbox').style.border = "1px solid orange";
document.getElementById('divbox').style.position = "absolute";
document.getElementById('divbox').style.zIndex = "2";
//clown1:
document.getElementById('clown1').style.display = "inline-block";
document.getElementById('clown1').style.transform = "rotate(90deg)";
document.getElementById('clown1').style.marginTop = "21%";
document.getElementById('clown1').style.marginLeft = "53%";
document.getElementById('clown1').style.border = "1px solid green";
document.getElementById('clown1').style.position = "relative";
document.getElementById('clown1').style.zIndex = "1";
谢谢你的帮助,如果我能回答问题,请告诉我。
更新:
抱歉没有说得更清楚。我现在已经实现了将图像放在另一个图像后面,但由于上面的图像是透明的,所以后面的图像正在显示。我该如何阻止这种情况?
下面是正在发生的事情的一个例子:
http://oi61.tinypic.com/2mw9egx.jpg
请注意,橙色边框是ontop,所以它肯定是ontop。
更新2:
这应该让我清楚地知道我想要什么。再次为混乱感到抱歉:
http://oi59.tinypic.com/eamb0n.jpg
我会做一些类似于以下jsFiddle的事情:http://jsfiddle.net/7gdx48fu/.可能需要重新加载几次才能看到覆盖工作的好例子。
为您的两个图像创建一个包装器DIV。将包装器DIV设置为position: relative
,这样我们就可以对它包含的一个图像使用绝对定位。通过这样做,我们可以防止绝对定位的图像可能在页面的其他地方对齐,比如浏览器窗口的左上角。
然后,将我们的覆盖图像(透明PNG)的位置与top: 0
和left: 0
一起设置为position: absolute
,以将其与左上角的第一个图像对齐。
如果您观看包含图像的订单,则无需使用z-index
即可完成此操作。将所需的图像放在标记中的透明PNG后面,然后放在透明PNG后面。
<div class="img-container">
<img src="http://lorempixel.com/200/200/city/">
<img class="overlay" src="http://lorempixel.com/200/200/city">
</div>
.img-container {
position: relative;
}
.overlay {
position: absolute;
top: 0;
left: 0;
opacity: 0.25; /* using this to replicate the transparent PNG */
}
编辑
OP的要求已经改变,包括如何防止透明图像后面的图像通过透明图像显示。
这是一个更新的jsFiddle:http://jsfiddle.net/7gdx48fu/2/.
在这种方法中,我将透明PNG封装在封装器DIV中,并设置其背景颜色。我在例子中用了白色,但你可以用任何颜色。
<div class="img-container">
<img src="http://lorempixel.com/200/200/city/">
<div class="overlay">
<img src="http://lorempixel.com/200/200/city">
</div>
</div>
.img-container {
position: relative;
}
.overlay {
position: absolute;
top: 0;
left: 0;
background-color: white;
top: 15px; /* shifting overlay for illustrative purposes - not use case code */
left: 15px; /* shifting overlay for illustrative purposes - not use case code */
}
.overlay img {
opacity: 0.25; /* using this to replicate the transparent PNG */
}
虽然不完美,但我不确定该怎么办。
编辑2
看来OP想做一种形式的掩饰。您可以使用overflow: hidden
执行此操作。
我已经更新了jsFiddle:http://jsfiddle.net/7gdx48fu/4/
在这个更新的答案中,我保留了包装器DIV,并将其设置为固定的宽度和高度。然后应用CCD_ 7。我们在这里所做的是创建一个不可见的窗口,只有当内容在窗口的维度内时才会显示内容。
要使图像看起来像是从底层图像中出来,只需调整图像在包装器DIV内的位置。对于jsFiddle,只需在.mask img
中播放top
的值。
这需要对.mask
DIV的适当位置和大小进行一些调整,以满足您的需求,但希望能为您指明正确的方向。
<div class="img-container">
<img src="http://lorempixel.com/200/200/city/">
<div class="mask">
<img src="http://lorempixel.com/200/50/city">
</div>
</div>
.img-container {
position: relative;
}
.mask {
position: absolute;
top: 25px;
left: 25px;
height: 100px;
width: 100px;
overflow: hidden;
border: 1px solid red; /* for illustrative purposes */
}
.mask img {
position: relative;
top: 25px;
}
您尝试过css不透明属性吗?
#clown1{ opacity:0.3;}
- 将两个图像的位置设为
absolute
而不是relative
- 为了实现上述功能,一些共同的祖先(即
#images
)也必须具有非默认位置(例如relative
) - 忘记
zIndex
——如果其他元素都相等,后一个元素将是"最上面的" - 将以上所有内容放在CSS样式表中,而不是放在JS代码中
忘记其他转换和边距等,您需要的核心CSS是:
#images {
position: relative;
}
#divbox, #clown1 {
position: absolute;
}
将它们都放在父容器中。使父图像具有position:relative,并放置两个具有position:absolute的图像。这样它们就会堆积起来。(类似的事情,我没有检查img的顺序可能是错误的-玩一玩。
CSS:
.parent > img.transparent {
position: absolute;
}
.parent > img {
position: absolute; opacity: 0.5
}
HTML:
<div class="parent" style="position:relative">
<img src="other.png" class="transparent"/>
<img src="transparent.gif"/>
</div>
更多的解释:当你使父元素/祖先元素的位置相对时,这意味着它的绝对内容将相对于父元素,而不是整个窗口
- 在谷歌地图 API 中,不会为 img 元素触发 Onclick 事件
- angularjs如何找到img元素的高度和宽度
- 为什么可以'tI将IMG元素链接到类似于“;http://en.wikipedia.org/wiki/File:
- 输出表示img元素不存在(为null),但脚本在img的实现下面,并使用了onload()
- 使用带有 img 元素的 css 背景图像
- 查找所有嵌套的 img 元素
- 为什么在循环中动态将 .onclick 添加到 img 元素需要返回函数()
- 如何观看 img 元素的 ngSrc 并在自定义指令中获取新的宽度和高度
- 无法将 img 元素换成 SVG
- jquery toggleClass 在 img 元素上不起作用
- 当存在 IMG 元素时,如何设置插入符号位置
- 关于更新Javascript中的img元素类
- 延迟加载图像,但对img元素使用标准语法
- 如何使用javascript添加img元素
- javascript获取img元素的完整src-url
- 如何将html img元素传递给包含javascript的文件
- 如何将img元素放在透明img元素后面
- 如何在AngularJS中为img元素设置边框样式
- 将html img元素转换为画布
- 如果存在img元素,请禁用复选框