聽說 CSS3 有專門的解法,但是這邊先用 CSS2 之前的作法。
原理很簡單,就是因為上下層的透明度會傳染,那就切斷上下層的關係就好了,也就是說彈出視窗和遮片是在同一層,然後用 position 為 absolute 將兩個 div 疊在一起。
<div class="body">
<!-- 上下層關係造成子層一定跟著上層的透明度 -->
<div class="opacityParentA">
<div class="opacityChildA">我變透明了</div>
</div>
<div class="opacityParentB">
<!-- 改成兩個平行的 absolute position div -->
<!-- 下層做半透明背景 -->
<div class="opacityBackgroundB"></div>
<!-- 上層的透明度就不受影響 -->
<div class="opacityChildB">我不是透明</div>
</div>
</div>
<style type="text/css">
div.body {
margin: 50px auto;
width: 200px;
height: 200px;
background-image: url(images/Amelie.jpg);
padding: 20px 10px 20px 50px;
}
div.opacityParentA {
opacity: 0.5; /* 半透明背景 */
background-color: #cfc;
border: 1px solid #00f;
width: 100px;
height: 50px;
margin: 20px;
}
div.opacityParentB {
border: 1px solid #00f;
position: relative;
width: 100px;
height: 50px;
margin: 20px;
}
div.opacityParentB .opacityBackgroundB {
opacity: 0.5; /* 半透明背景 */
background-color: #cfc;
width: 100%; /* 佔滿整個上層背景 */
height: 100%;
position: absolute; /* 一定要 */
}
div.opacityParentB .opacityChildB {
position: absolute; /* 一定要 */
}
</style>
這樣就可以得到以下的結果。2012/11/7 補上 CSS3 的作法。
<style type="text/css">
body {
background-image: url(AmeliePoulain04.jpg);
}
div {
position: abosolute;
width: 160px;
height: 60px;
margin: 30px auto;
font-size: 16pt;
font-weight: bold;
}
div#normalDiv {
background-color: rgb(255, 255, 255);
opacity: 0.5;
}
div#css3Div {
background-color: rgba(255, 255, 255, 0.5);
}
</style>
<body>
<div id="normalDiv">我變透明了!</div>
<div id="css3Div">我不要變透明!</div>
</body>
CSS3 增加了 rgba 這樣的 function。聽說最簡單的辦法,就是使用半透明的 PNG 圖片做背景。
---
---
---



那請問有CSS3的解法嗎?
回覆刪除補上囉,請參考!
回覆刪除