如何不使用任何JavaScript或jQuery,僅使用純CSS語法
來達到二階層、三階層的下拉選單按鈕?
應該不少網頁設計師會遇到這樣的瓶頸,然而,我自己也遇到這樣的瓶頸
花了不少時間Google找了資料,但能完美跨瀏覽器,卻又是另外一個瓶頸
今天來分享一個 目前為止 我找到最好的語法
1. 首先,你要先使用ul及li來建立以下階層的按鈕內容,如下圖
HTML CODE :
<div id="menu">
<ul>
<li> <a href="#">Fruits</a>
<ul>
<li><a href="#">Apple</a></li>
<li><a href="#">Banana</a></li>
<li><a href="#">Cherry</a></li>
<li><a href="#">Orange</a></li>
</ul>
</li>
<li> <a href="#">Vegetables</a>
<ul>
<li><a href="#Broccoli">Broccoli</a></li>
<li><a href="#Cabbage">Cabbage</a></li>
<li><a href="#Peas">Peas</a></li>
<li><a href="#Onion">Onion</a></li>
</ul>
</li>
<li> <a href="#Meats">Meats</a>
<ul>
<li> <a href="#White_Meat">White Meat</a>
<ul>
<li><a href="#Chicken">Chicken</a></li>
<li><a href="#Duck">Duck</a></li>
<li><a href="#Fish">Fish</a></li>
</ul>
</li>
<li> <a href="#Red_Meat">Red Meat</a>
<ul>
<li><a href="#Beef">Beef</a></li>
<li><a href="#Pork">Pork</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
最後,再加上以下的CSS語法,即可達到二階層、三階層的下拉菜單按鈕了
CSS CODE :
/* 加載csshover3.htc,解決IE6沒有li:hover擬類的問題 */
* html body {
behavior:url("csshover3.htc");
}
/* ---------- 大小與定位 ---------- */
#menu {
/* 選單大小 */
width:600px;
height:30px;
}
#menu ul {
/* 取消ul樣式符號 */
list-style-type:none;
/* 重設ul邊界與留白為零 */
margin:0;
padding:0;
/* 內有浮動元件時,需設overflow才會自動調整大小 */
overflow:auto;
}
* html #menu ul {
/* 解決IE6不理overflow問題,直接指定高度 */
height:30px;
}
#menu ul li {
/* 利用float讓第一層li水平排列 */
float:left;
}
/* 解決IE6條列式餘白問題*/
* html #menu ul li {
display:inline;
}
#menu ul li a {
/* 將a改為區塊元件,以便指定寬高 */
display:block;
/* 這邊也要設float,否則IE6會以100%寬度顯示 */
float:left;
/* 固定高度 */
height:30px;
width: 100px;
text-align: center;
}
#menu ul li ul {
/* 讓第二層ul跳脫文件流以利定位 */
position:absolute;
/* 固定寬度 */
width:100px;
/* 避免出現捲軸 */
overflow:visible;
/* 讓ul與母階層li相同位置 */
clear:left;
margin-top: 30px;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
/* 修正IE7絕對定位差異 */
*:first-child+html #menu ul li ul {
margin-top:0;
}
/* 修正IE6絕對定位差異 */
* html #menu ul li ul {
margin-top:0;
}
#menu ul li ul li {
/* 覆寫繼承自第一層的浮動設定 */
float:none;
text-align: center;
}
#menu ul li ul li a {
/* 覆寫繼承自第一層的浮動設定 */
float:none;
width: 100%;/* 註:display、height、padding繼承第一層的設定 */
}
#menu ul li ul li ul {
margin-top: -30px;
margin-right: 0;
margin-bottom: 0;
margin-left: 100px;
width: 100%;
}
/* 修正IE7絕對定位差異 */
*:first-child+html #menu ul li ul li ul {
margin-top:-30px;
}
#menu ul li ul li ul li {
/* width、float繼承第二層,免設定 */
}
#menu ul li ul li ul li a {
/* width、float繼承第二層,免設定 */
}
/* ---------- 隱藏與顯示階層 ---------- */
#menu ul li ul {
/* 預先隱藏第二層 */
visibility:hidden;
}
#menu ul li:hover ul {
/* 觸動第一層時,顯示第二層 */
visibility:visible;
}
#menu ul li:hover ul li ul {
/* 顯示第二層時,隱藏第三層,避免同時彈出 */
visibility:hidden;
}
#menu ul li ul li:hover ul {
/* 觸動第二層時,顯示第三層 */
visibility:visible;
}
#menu ul li ul li:hover ul li ul {
/* 顯示第三層時,隱藏第四層,避免同時彈出 */
visibility:hidden;
}
#menu ul li ul li ul li:hover ul {
/* 觸動第三層時,顯示第四層 */
visibility:visible;
}
/* ---------- 以下為美化用,非必需 ---------- */
/* 預設字體 */
#menu {
font-size:12px;
font-family:Arial, Helvetica, sans-serif;
}
/* 第一層ul背景色彩與邊框 */
#menu ul {
background:#6f6f6f;
}
/* 第一層a字型 */
#menu ul li a {
color:#FFF;
text-decoration:none;
line-height: 30px;
}
/*第二層ul背景色彩與邊框 */
#menu ul li ul {
background:#efefef;
}
/* 第二層a字型 */
#menu ul li ul li a {
font-size:12px;
color:#333333;
text-decoration:none;
}
/* 觸動第一層li時,改變背景色 */
#menu ul li:hover, #menu ul li a:hover {
background:#efefef;
}
#menu ul li:hover a {
color:#333333;
}
/* 觸動第二層以上li時改變背景色 */
#menu ul li ul li:hover, #menu ul li ul li a:hover {
background:#dfdfdf;
}
其中特別注意必須加載 "csshover3.htc" 這補丁
這是用來解決IE6沒有li:hover擬類的問題
搞定,收工!
文章標籤
全站熱搜

你好,謝謝你的分享^^ 我最近也是被IE的下拉顯示弄得有點狼狽
感謝分享,這風格很好看 =)
請教一下,我要讓三層的選單底色顏色都不一樣,要怎麼修改呢? 謝謝你了,可以的話 msn 或 EMAIL給我, mo13145@msn.com 非常感謝你~
CSS的部分新增以下: /*以下開始為第三層不一樣的顏色*/ #menu ul li ul li ul { background-color: #6C0; } #menu ul li ul li ul li a { color: #060; font-size: 12px; text-decoration: none; } #menu ul li ul li ul li:hover, #menu ul li ul li ul li a:hover { background-color: #060; color: #FFF; }
好不容易找到您的網頁,看完之後真的很感謝您的分享,受用不少,覺得您好偉大! 想請教一下:決定選單水平跟垂直 的設定點在哪呢 ?? 要如何使水平的選單改成垂直的呢? 非常感謝您~
我是這套CSS的原作者,提醒您轉貼註明出處是網路基本禮儀
作者您好: 請要如何將整個選單水平置中, 把整個選單放在畫面的水平居中位置呢? 感謝教學><
to樓上: 設定選單的寬度,有可能是ul也有可能是div 然後在被設定一定寬度的該物件再加上:margin:0 auto; 即可
TO 樓上好心人的解答: 了解!我再去嘗試修改一下!感謝解答!
非常感謝您的分享, 非常實用, 想請問一下, 第一層選單, 我想要每個列表項目的顏色不一樣,該怎麼改呢?
可以使用:nth-child(n)偽類別來解決
哈囉,方便提供線上直接瀏覽的路徑嗎?
我解決了XDD 我把 display: none display: inline 改成visible hidden這個選項 就不會亂飄了