處理過太多次了,每次都得花我很多
一般 CSS menu 在顯示上會遇到以下的問題,稍作整理
- 被 flash 物件所覆蓋,這種情況在 Firefox 中沒有發現,其他常見瀏覽器幾乎都會
- 被 <select /> 網頁元素所覆蓋,目前這種情況只剩下
顧人怨的IE6 會發生
以下程式碼用來試驗各種瀏覽器不同遮蔽的情況
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<style>
.menu {
position: absolute;
border: solid 1px gray;
background: #f0f0f0;
padding: 3px 10px;
display: none;
}
.menu ul {
list-style: none;
margin: 0px;
padding: 0px;
max-width: 200px;
}
.menu a {
line-height: 150%;
text-decoration: none;
}
.menu a:hover {
background: #e0e0e0;
}
</style>
<script type="text/javascript">
var vars = {}, params = {};
swfobject.embedSWF('http://images.tv.adobe.com/swf/player.swf', 'MSH_MashupViewer_87602', '400', '121', '8',
'http://dilbert.com/swf/v1/express_install.swf', vars, params);
$(document).ready(function () {
var $menu = $(".menu_pad");
var $div = $menu.find("div.menu");
$menu.hover(
function () {
var pos = $menu.position();
var dim = { top: pos.top + $menu.outerHeight(), left: pos.left };
$div.css(dim).show();
},
function () {
$div.hide();
});
});
</script>
</head>
<body>
<div>
<span class="menu_pad">
Menu
<div class="menu">
<ul>
<li><a href="javascript:">New</a></li>
<li><a href="javascript:">Open</a></li>
<li><a href="javascript:">Exit</a></li>
</ul>
</div>
</span>
<br/>
<select>
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
</select>
<br/>
<div id="MSH_MashupViewer_87602"></div>
</div>
</body>
</html>
在常見瀏覽器的測試顯示結果如下表列出![]() IE 6 | ![]() IE 7 |
![]() IE 8 | ![]() IE 9 preview |
![]() Firefox 3.6.2 | ![]() Safari 4.0.5 |
![]() Opera 10.51 | ![]() Chrome 5.0.360.4 Dev |
在 flash 的部分,可以在 Adobe 官網上找到解決方式,請參考 Flash content displays on top of all DHTML layers 的指引加入 wmode 參數並指定為 transparent
在 <select /> 的部分,則可以用一份透明的 iframe 來幫忙遮住強勢的 select 元素,而且它得剛好墊在需要被保護的顯示元件之下
修改後的內容如下,反白的部分是小小的調整
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<style>
.menu {
position: absolute;
border: solid 1px gray;
background: #f0f0f0;
padding: 3px 10px;
display: none;
}
.menu ul {
list-style: none;
margin: 0px;
padding: 0px;
max-width: 200px;
}
.menu a {
line-height: 150%;
text-decoration: none;
}
.menu a:hover {
background: #e0e0e0;
}
.glass {
position: absolute;
filter: alpha(opacity=0);
-moz-opacity: 0;
opacity: 0;
width: 100%;
height: 100%;
display: none;
}
</style>
<script type="text/javascript">
var vars = {}, params = { wmode: 'transparent' };
swfobject.embedSWF('http://images.tv.adobe.com/swf/player.swf', 'MSH_MashupViewer_87602', '400', '121', '8',
'http://dilbert.com/swf/v1/express_install.swf', vars, params);
$(document).ready(function () {
var $menu = $(".menu_pad");
var $glass = $("<iframe frameBorder='0' class='glass'></iframe>");
var $div = $menu.find("div.menu").before($glass);
$menu.hover(
function () {
var pos = $menu.position();
var dim = { top: pos.top + $menu.outerHeight(), left: pos.left };
$div.css(dim).show();
dim.width = $div.outerWidth();
dim.height = $div.outerHeight();
$glass.css(dim).show();
},
function () {
$div.hide();
$glass.hide();
});
});
</script>
</head>
<body>
<div>
<span class="menu_pad">
Menu
<div class="menu">
<ul>
<li><a href="javascript:">New</a></li>
<li><a href="javascript:">Open</a></li>
<li><a href="javascript:">Exit</a></li>
</ul>
</div>
</span>
<br/>
<select>
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
</select>
<br/>
<div id="MSH_MashupViewer_87602"></div>
</div>
</body>
</html>
這樣一來,幾乎常見瀏覽器的顯示情況就都在控制內了完整的範例程式碼下載








沒有留言:
張貼留言