html--簡單左側選單欄的實現
阿新 • • 發佈:2022-03-27
(圖片地址:https://panjiachen.github.io/vue-element-admin/#/dashboard)
如圖示這種豎向排列的選單欄,展示效果比較好,而且互動比較直觀,下面來介紹一下實現步驟
1.先把整體佈局寫出來
1.1由於子選單展開收縮會變化div大小,所以使用flex彈性盒子。
<div class="box"> <ul class="ulList"> <li class="liList"> <p onclick="menu_active(ulOne)">這是第一個子選單</p> <ul class="childUl" id="ulOne" style="display: none;"> <li>選項1.1</li> <li>選項1.2</li> </ul> </li> <li class="liList"> <p onclick="menu_active(ulTwo)">這是第二個子選單</p> <ul class="childUl" id="ulTwo" style="display: none;"> <li>選項2.1</li> <li>選項2.2</li> </ul> </li> <li class="liList"> <p onclick="menu_active(ulThree)">這是第三個子選單</p> <ul class="childUl" id="ulThree" style="display: none;"> <li>選項3.1</li><li>選項3.2</li> <li>選項3.3</li> </ul> </li> <li class="liList"> <p onclick="menu_active(ulFour)">這是第四個子選單</p> <ul class="childUl" id="ulFour" style="display: none;"> <li>選項4.1</li> </ul> </li> </ul> </div>
*{ margin: 0; padding: 0; } .box{ width: 300px; top: 10%; left: 10%; display: flex; position: absolute; } .ulList{ width: 100%; display: flex; left: 20%; top: 20%; flex-direction: column; background-color: grey; position: absolute; list-style: none; } .liList{ width: 100%; height:100px; display: flex; flex-direction: column; background-color: #FF9900; position: relative; } .liList p{ font-size: 20px; text-align: center; }
1.2先把子選單下的ul隱藏。
這裡要注意一點:list-style設定為none時,會發現li前邊的點雖然消失了,但還是佔著空間,如下圖所示
出現此原因是因為預設情況下,li是有margin和padding的,此時只需要給其設定都為0即可,為了方便,直接全域性修改:
*,body{ margin: 0; padding: 0; }
1.3給一級ul設定了flex,其下的每一個選項下的子選單欄是不需要再設定flex的,只需要給每一個ul設定寬度,然後每一個li設定相同用的高度和寬度即可。
.liList ul{ width: 100%; position: relative; } .liList ul li{ width: 100%; height: 60px; line-height: 60px; background-color: #FF4400; list-style: none; text-align: center; position: relative; }
2.給每一個選單選項新增點選事件,選擇展開或者隱藏子選單
這裡使用到選擇語句進行判斷
function menu_active(ulId){ if(ulId.style.display == "none"){ ulId.style.display = "block" }else{ ulId.style.display = "none" } }
寫到這裡,程式碼基本寫完了,那就渲染一下看看效果
誒?為什麼效果和我想得不一樣?
這裡會發現二級選單展示的時候,會被一級選單覆蓋掉。仔細尋找後發現問題出在高度設定上
.liList{ width: 100%; line-height: 80px; display: flex; flex-direction: column; background-color: #FF9900; position: relative; }
給每一個一級選單設定了一個100px的高度!這就使得無論怎麼改動二級選單,始終是和一級選單衝突的,把它去掉就好了。
好啦,一個使用ul列表的豎向選單欄就做好了✌!
當然你也可以自己渲染的更美觀一些✌✌✌
後續如果要給每一個選單選項新增連結的話也是不難的。
--2022.3.26 21:44