ウェブ学のすすめ

Study of Web Design & Programing

MSN風縦型サブメニュー の作り方

Twitterのフォロワーの方に「MSNサブメニューバーの飛び出す表示の入力タグをご存知でしたら教えて下さい。」とご相談されたので実際に作ってみました。参考になれば幸いです。(MSN Japan

加筆:第3階層目を追加&グラデーションを試してみました(2012/06/05)

MSN風縦型サブメニュー - jsdo.it - share JavaScript, HTML5 and CSS

HTML

<div id="nav">
    <ul class="top-level">
        <li class="category1"><a href="#">ニュース</a>
            <ul class="sub-level">
                <li><a href="#">速報</a>
		    <ul class="sub-level">
                        <li><a href="#">サブメニュー1</a></li>
                        <li><a href="#">サブメニュー2</a></li>
                        <li><a href="#">サブメニュー3</a></li>
                    </ul>
		</li>
                <li><a href="#">事件</a></li>
            </ul>
        </li>
        <li class="category2"><a href="#">天気予報</a>
            <ul class="sub-level">
                <li><a href="#">天気画像</a>
		    <ul class="sub-level">
                        <li><a href="#">サブメニュー1</a></li>
                        <li><a href="#">サブメニュー2</a></li>
                        <li><a href="#">サブメニュー3</a></li>
                    </ul>
		</li>
                <li><a href="#">警報・注意報</a></li>
            </ul>
        </li>
        <li class="category3"><a href="#">マネー</a>
            <ul class="sub-level">
                <li><a href="#">株式</a></li>
                <li><a href="#">株価検索</a>
		    <ul class="sub-level">
                        <li><a href="#">サブメニュー1</a></li>
                        <li><a href="#">サブメニュー2</a></li>
                        <li><a href="#">サブメニュー3</a></li>
                    </ul>
		</li>
            </ul>
        </li>
    </ul>
</div>

CSS

#nav {
    font-size: 1em; 
    width: 150px;
}
#nav ul {
    margin: 0; 
    padding: 0;
    border-top: 1px solid #aaa;
    border-right: 1px solid #aaa;
}
#nav li {
    list-style-type: none;
}
#nav a {
    color: #000;
    display: block;
    height: 25px;
    line-height: 25px;
    padding-left: 10px;                  
    text-decoration: none;
    width: 100%;
}
#nav a:hover{
    text-decoration: none;
}
#nav li:hover {
    background: #cdeefc;
    position: relative;
}

/*第1階層*/ 
ul.top-level {
    background-color: #fff;
}
ul.top-level li {
    border-bottom: 1px solid #aaa;
}
ul.top-level li.category1 {
    border-left: 4px solid #f60; 
    background: -moz-linear-gradient(top, #eee, #fff 75%);
    background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fff), color-stop(75%, #fff));
}
ul.top-level li.category2 {
    border-left: 4px solid #366CD6;
    background: -moz-linear-gradient(top, #eee, #fff 75%);
    background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fff), color-stop(75%, #fff));
}
ul.top-level li.category3 {
    border-left: 4px solid #32CC60;
    background: -moz-linear-gradient(top, #eee, #fff 75%);
    background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fff), color-stop(75%, #fff));
}

/*第2・第3階層共通*/
ul.sub-level {
    display: none;
}
li:hover .sub-level {
    border: 1px solid #aaa;
    display: block;
    position: absolute;
    left: 120px;
    top: -3px;
}
ul.sub-level li {
    border: none;
    float: left;
    width: 150px;
}

/*第2階層*/
#nav .sub-level {
    background-color: #fff;
}

/*第3階層*/
#nav .sub-level .sub-level {
    background-color: #fff;
}
li:hover .sub-level .sub-level {
    display: none;
}
.sub-level li:hover .sub-level {
    display: block;
}