結果看了以後,發現menu寫法還真簡單……
首先是list,先建立list:
<ul> <li> 檔案 <ul> <li>開新檔案</li> <li>開啟舊檔</li> <li> 最近開啟檔案 <ul> <li>/tmp/a.doc</li> <li>/tmp/b.docx</li> <li>/tmp/c.odt</li> </ul> </li> <li>儲存</li> <li>另存新檔</li> <li>關閉</li> </ul> </li> <li> 編輯 <ul> <li>剪下</li> <li>複製</li> <li>貼上</li> </ul> </li> <li> 檢視 <ul> <li> 工具列 <ul> <li>表格</li> <li>表單</li> </ul> </li> <li>全螢幕</li> </ul> </li> <li> 說明 <ul> <li>說明</li> <li>關於</li> </ul> </li> </ul>直接顯示如下:
- 檔案
- 開新檔案
- 開啟舊檔
- 最近開啟檔案
- /tmp/a.doc
- /tmp/b.docx
- /tmp/c.odt
- 儲存
- 另存新檔
- 關閉
- 編輯
- 剪下
- 複製
- 貼上
- 檢視
- 工具列
- 表格
- 表單
- 全螢幕
- 工具列
- 說明
- 說明
- 關於
然後讓第二層及以下的list隱藏
ul ul{ display: none; }滑鼠移到母項時,會顯示子清單
li:hover>ul{ display: block; }移除list的默認樣式
ul{ list-style-type: none; }不過寫
li{list-style-type: none;}
也可以就是僅清單的最上層設為橫向清單
ul>li{ display: inline-block } ul ul li{ display: list-item; }但這樣子,當滑鼠移動到選單時,會變成像下面這樣
- 檔案
- 開新檔案
- 開啟舊檔
- 最近開啟檔案
- 儲存
- 另存新檔
- 關閉
- 編輯
- 檢視
- 說明
ul ul{ position: absolute; }但因為ul的默認CSS有一條
ul{padding-left: 40px}
雖然不知道為什麼,chrome等webkit瀏覽器是
ul{-webkit-padding-start: 40px;}
,不過意思是一樣的將之移除:
ul{ padding-left: 0; }然後設定第三層(含)以下的ul tag,參考bootstrap、css3 menu、apycom……等網站,基本上都是利用left和top來調整位置的,這也讓我意外知道了,可以藉由
left: 100%
來讓子選單放在旁邊(三者都是這種作法),總而言之第三層(含)以下的子選單的設定如下
ul ul ul{ left: 100%; top: 0; }現在又蹦出一個問題--對齊問題
例如/tmp/a.doc不是對齊最近開啟檔案而是對齊開新檔案。這是因為我們給第二層的ul tag 設定
position: absolute;
,但是li的css仍是默認的position: static;
,所以ul ul li{ position: relative; }這樣就大功告成了
完成結果
※為了方便起見,上面這個完成結果是使用js直接設定style的,但效果跟上述提到的css是一樣的而css統整起來就是:
ul{ list-style-type: none; } ul ul{ display: none; position: absolute; padding-left: 0; } li:hover>ul{ display: block; } ul>li{ display: inline-block } ul ul li{ display: list-item; position: relative; } ul ul ul{ left: 100%; top: 0; }
沒有留言:
張貼留言