1. 程式人生 > >CSS3實現二級選單

CSS3實現二級選單

今天看了一個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部分

* {
            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;
        }
1、在li標籤中有兩個元素,a標籤和span標籤,對於span標籤,我使用了絕對定位,當然這個絕對定位和平常使用的絕對定位元素是不一樣的,因為在li標籤上沒有相對定位這個屬性,這個小技巧是來源於一個部落格。而a標籤中的class為fa-angle-right使用了絕對定位,與span標籤是一種想法,a標籤上我也不想給它加上相對定位這個包袱。可是,問題出現了,無論我怎樣調整a標籤和span標籤的z-index,span標籤都會把a標籤給蓋住,去網上搜了一下解決辦法,於是給a加上了絕對定位這個屬性,於是可以達到我想要的效果了,所以我就把fa-angle-right的屬性改為了平常使用的絕對定位。。。真是不甘心呀。。

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