CSS3實現二級選單
阿新 • • 發佈:2019-02-11
今天看了一個demo,原demo雖說是CSS3實現,但其中也使用了js,再一個裡面的程式碼有些地方,我覺得還可以優化 ,所以自己就嘗試著用css3實現一下
我想說: 不論寫一個多麼炫酷的demo,z-index的值都最好不要超過2
下面是原始碼:
html部分
<div class="sidebar"> <h1><i class="fa fa-bars push"></i>Animated <span class="color">Menu</span></h1> <ul> <li><a href="#"><i class="fa fa-dashboard push"></i>Dashboard<i class="fa fa-angle-right"></i></a><span class="hover"></span> </li> <li><a href="#"><i class="fa fa-user push"></i>Users<i class="fa fa-angle-right"></i></a><span class="hover"></span> <ul class="sub-menu"> <li><a href="#">Add User<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> <li><a href="#">Manage Users<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> </ul> </li> <li><a href="#"><i class="fa fa-cog push"></i>Settings<i class="fa fa-angle-right"></i></a><span class="hover"></span> <ul class="sub-menu"> <li><a href="#">Dashboard Settings<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> <li><a href="#">Profile Settings<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> <li><a href="#">Manage Menu<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> <li><a href="#">User Profiles<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> </ul> </li> <li><a href="#"><i class="fa fa-picture-o push"></i>appearance<i class="fa fa-angle-right"></i></a><span class="hover"></span> <ul class="sub-menu"> <li><a href="#">Change Theme<i class="fa fa-angle-right"></i></a><span class="hover"></span> </li> <li><a href="#">Theme Options<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> </ul> </li> <li><a href="#"><i class="fa fa-file push"></i>Information<i class="fa fa-angle-right"></i></a><span class="hover"></span> <ul class="sub-menu"> <li><a href="#">Latest News<i class="fa fa-angle-right"></i></a><span class="hover"></span> </li> <li><a href="#">Recent Articles<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> </ul> </li> <li><a href="#"><i class="fa fa-plane push"></i>Contact<i class="fa fa-angle-right"></i></a><span class="hover"></span></li> </ul> </div>
css部分
1、在li標籤中有兩個元素,a標籤和span標籤,對於span標籤,我使用了絕對定位,當然這個絕對定位和平常使用的絕對定位元素是不一樣的,因為在li標籤上沒有相對定位這個屬性,這個小技巧是來源於一個部落格。而a標籤中的class為fa-angle-right使用了絕對定位,與span標籤是一種想法,a標籤上我也不想給它加上相對定位這個包袱。可是,問題出現了,無論我怎樣調整a標籤和span標籤的z-index,span標籤都會把a標籤給蓋住,去網上搜了一下解決辦法,於是給a加上了絕對定位這個屬性,於是可以達到我想要的效果了,所以我就把fa-angle-right的屬性改為了平常使用的絕對定位。。。真是不甘心呀。。* { padding: 0; margin: 0; font-family: "microsoft yahei" } a { color: #000; text-decoration: none; } ul { list-style: none } i { margin-right: 15px; } html,body { background-color: #808080; height: 100%; } .sidebar { background: url(img/menu_pattern_1.png); width: 200px; height: 100%; border-right: 10px solid #d00355; color: #fff; padding-left: 40px; } .sidebar h1 { font-size: 16px; height: 80px; line-height: 80px; } .sidebar h1 .color { color: #d00355; } .sidebar ul li { padding: 8px; } .sidebar ul li a { color: #6B6363; position: relative; z-index: 1; } .sidebar ul li a .fa-angle-right { position: absolute; left: 160px; top: 4px; } .sidebar ul li .hover { display: block; position: absolute; width: 0; height: 37px; margin-top: -30px; margin-left: -8px; z-index: 0; background-color: #d00355; opacity: 0; transition: all .5s .1s; } .sidebar ul li .sub-menu { display: block; background: url(img/menu_pattern_1.png); position: absolute; margin-left: 192px; margin-top: -31px; width: 200px; opacity: 0; } .sidebar > ul > li:hover ul { opacity: 1; } .sidebar ul li:hover .hover { width: 200px; opacity: 1; } .sidebar > ul > li:hover a{ color: #fff; }
2、對於class為sub-menu的ul中的span,當我將滑鼠滑過li標籤時,li標籤會出現span的寬度由0到200的效果,但是class為sub-menu的ul中的span卻不會出現類似的效果,在測試時,如果將sub-menu的display屬性設定為block,那麼滑過相應的li時,sub-menu中的span會出現想要的效果,當時很是著急,想來想去,問題可能出現在display這個屬性上,雖然找不到具體的原因是什麼,只能找對應的解決辦法,有其他的屬性,可以讓一個元素從無變有嗎?有opcity屬性,於是將display的變化,改為了opcity的變化,想要的效果就出現了,用display,出現不了想要的效果,得原因是什麼?需要去查查。。。
PS:css未做字首的處理,所有的測試在最新版本的谷歌瀏覽器下進行
補充:
修改一下二級選單中的字型大小,
text-transform 屬性控制文字的大小寫,值none/capitalize/uppercase/lowercase/inherit