[參與測試的瀏覽器:IE6 / IE7 / IE8 / FF3.5 / OP9.6 / SF4 / Chrome2 ]
[作業系統:Windows]
本教學設計實現lightBox時的樣式與行為分離,減少JS在各方面(全螢幕遮蔽、ie6中遮蔽select、雙向居中、高度自適應內容等)的工作。
先上程式碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Chomo" />
<link rel="start" href=" http://www.14px.com " title="Home" />
<title>全螢幕屏蔽、自動居中的lightBox</title>
<style type="text/css">
* { margin:0; padding:0; }
html,body { height:100%; overflow:hidden; font:12px/1.5 simsun;}
.myPage { line-height:3; overflow:auto; width:100%; height:100%;}
.lightBox,
.popupCover,
.popupIframe,
.popupComponent { position:absolute; left:0; top:0; width:100%; height:100%;}
.popupComponent { z-index:2; display:none;}
.popupIframe { display:none; _display:block; _filter:alpha(opacity=0);}
.popupCover { background:#000; opacity:0.7; *filter:alpha(opacity=70);}
.lightBox { text-align:center; overflow:auto;}
.lightBoxContent { display:inline-block; *display:inline; zoom:1; width:300px; padding:10px; background:#fff; border:5px solid #00b4ff; vertical-align:middle;}}
.lightBoxMaxHeight { display:inline-block; vertical-align:middle; height:100%; *height:99.5%; width:1px; overflow:hidden; margin-left:-1px;}
.lightBoxWrapper { display:inline-block; *display:inline; zoom:1; text-align:left;}
.lightBoxClose { color:#f00;}
.lightBoxSubmit { margin-top:10px; padding-top:5px; border-top:1px solid #ccc;}
.lightBoxSubmit input { font-size:12px; padding:0 10px; overflow:visible; margin:0 5px;}
</style>
</head>
<body>
<div class="popupComponent" id="lightBox">
<iframe class="popupIframe"></iframe>
<div class="popupCover"></div>
<div class="lightBox">
<span class="lightBoxMaxHeight"></span>
<div class="lightBoxContent">
<div class="lightBoxWrapper">
當提示小於一行時文字居中<br />
</div>
<div class="lightBoxSubmit">
<input type="button" value="確定" onclick="hideLayer('lightBox')" />
<input type="button" value="取消" onclick="hideLayer('lightBox')" />
</div>
</div>
</div>
</div>
<div class="popupComponent" id="lightBox2">
<iframe class="popupIframe"></iframe>
<div class="popupCover"></div>
<div class="lightBox">
<div class="lightBoxContent">
<div class="lightBoxWrapper">
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度當內容已經超過了一屏的高度<br />
</div>
<div class="lightBoxSubmit">
<input type="button" value="確定" onclick="hideLayer('lightBox2')" />
<input type="button" value="取消" onclick="hideLayer('lightBox2')" />
</div>
</div>
<span class="lightBoxMaxHeight"></span>
</div>
</div>
<div class="myPage">
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
<div style="text-align:center;"><input type="button" value="位於第一屏的按鈕" onclick="showLayer('lightBox')" /></div>
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
<select><option>一個用於測試IE6中是否能覆蓋住的select</option></select><br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
<select><option>又一個用於測試IE6中是否能覆蓋住的select</option></select><br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
<div style="text-align:center;"><input type="button" value="位於第二螢幕中的按鈕" onclick="showLayer('lightBox')" /><input type="button" value="當內容物已經超過了一屏的高度" onclick="showLayer('lightBox2')" /></div>
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
</div>
<script>
function showLayer(id) {
document.getElementById(id).style.display = "block";
}
function hideLayer(id) {
document.getElementById(id).style.display = "none";
}
</script>
</body>
</html>
這款lightBox具備以下特性,大家可以透過修改程式碼測一測^-^:
如有興趣,構成這個lightBox的以下小技巧可供您參詳:
1. 全螢幕遮蔽的方法:
A. 隱藏html/body的捲軸。
B. 用一個div做遮罩,再用一個div做一個有捲軸的頁面,一個疊上面,一個疊下面。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Chomo" />
<link rel="start" href=" http://www.14px.com " title="Home" />
<title>全螢幕遮蔽的方法</title>
<style type="text/css">
* {
margin:0; padding:0; /*--- 簡單的css reset,據說它的效率不高,請自行替換為高效的---*/
}
html,body {
height:100%; /*--- 有了這個高度,IE6下,body的子物件設定height:100%才有效---*/
overflow:hidden; /*--- 滅掉html或body產生的滾動條---*/
}
.page {
line-height:3;
overflow:auto; /*--- 滾動條就靠它了---*/
width:600px; height:400px; background:#f60; /*--- 暫時先做這麼大,方便大家看清楚---*/
position:relative; left:50px; top:50px; /*--- 移動一點點,方便大家看清楚,把它去掉,遮罩的基本的效果就實現了---*/
}
.cover {
position:absolute;
width:600px; height:400px; background:#000;
opacity:0.7; *filter:alpha(opacity=70);
z-index:2;
}
</style>
</head>
<body>
<div class="cover"></div>
<div class="page">
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />假裝很豐富的內容<br />
</div>
</body>
</html>