轉載自52css.com,實際項目中經常用到,是以收藏下
[code]
<ul>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
</ul>
[/code]
[code]
* {margin:0;padding:0;font:normal 12px/25px "宋體";}
body {background:#f8f8f8;}
ul {list-style:none;width:300px;height:25px;margin:20px auto;}
li {float:left;width:86px;height:25px;text-align:center;margin:0 -5px;display:inline;}
a {color:#fff; float:left;width:86px;height:25px;top:0;left:0;background:url(***.gif) center center no-repeat;}
a:hover {color:#000;background:url(***.gif) 0 0 no-repeat;width:86px;position:relative;}
[/code]
實作思路:
主要是利用當:hover觸發的時候讓a定位,出了li的浮動範圍,出現梯形的圖檔。進而實作了不規則導航的菜單。
編碼過程:
1、在浏覽器中,根據li的結構表現,後面的li會覆寫住前面的li,如果寬度足夠的話,是靠邊在一起,那麼隻要利用負邊距就可以實作初始狀态下互相疊加的樣式。margin:0 -5px;
2、初始狀态下的疊加實作了,要解決的就是:hover觸發的時候,讓<a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a>這個放棄浮動使用定位。在這個過程中如果是要利用絕對定位話,會讓有一個z-index的問題出現。
這個問題隻展現在IE中,FF下是無問題的,可以正常顯示。IE中表現出來的是最後一個li永遠都會蓋住前面的li,那麼當滑鼠經過的時候就無法完美顯示了。
最終代碼:
[code]
<!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="Linxz" />
<title>CSS布局執行個體:制作不規則形狀的CSS導航菜單 - http://www.52css.com%3c/title>
<style type="text/css">
* {margin:0;padding:0;font:normal 12px/25px "宋體";}
body {background:#f8f8f8;}
ul {list-style:none;width:300px;height:25px;margin:20px auto;}
li {float:left;width:86px;height:25px;text-align:center;margin:0 -5px;display:inline;}
a {color:#fff; float:left;width:86px;height:25px;top:0;left:0;background:url(attachments/month_0804/o2008424202323.gif) center center no-repeat;}
a:hover {color:#000;background:url(attachments/month_0804/f2008424202316.gif) 0 0 no-repeat;width:86px;position:relative;}
</style>
</head>
<body>
<ul>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" title="菜單">菜單</a></li>
</ul>
</body>
</html>
[/code]
在IE6中出現問題的補充:
此案例在IE6浏覽器中運作時,最左側的菜單被“切”掉了一個角,這是由IE6對寬度了解的不同造成。為了避免這一情況的出現,我們在合理計算尺寸的情況下,給ul增加一個左内邊距,即:padding-left。就可以合理的解決此問題。修改ul的CSS樣式編碼如下:
Example Source Code [www.52css.com] ul {list-style:none;width:300px;height:25px;margin:20px auto; padding-left:20px;}
比較重要的幾個屬性:
1、li中的負邊距,實作疊加效果
2、:hover中的position:relative
3、a是内聯元素,要觸發haslayout,可以使用float:left來觸發
轉載于:https://www.cnblogs.com/Lion5859/articles/1360123.html