閉じる
CSS
  • 2011.08.17 (Wed)

CSS3だけで実装できるドロップスライドメニュー


動的なドロップダウンメニューを実装する為にはJavaScriptやjQueryなどが用いられますが、CSS3だけで実装できてしまう実装方法もいくつかあります。

そんな中でも上下にアニメーションスライドするやり方に『おぉっ!!』となったので紹介します。

特に、カテゴリーや膨大なページを持つサイトに有効なメニューです。

注意としてはCSS3仕様の為、FF,IE9,Chrome,Safari,Opera10の最新ブラウザのみの動作で古いブラウザではサポートされていません。

下記は最終的な完成画面です。

デモはコチラ

ソース元、サンプルパッケージのダウンロードはコチラ

Creating CSS3 Drop sliding list Menu #6

実装方法

Step 1. HTML

エンコード、lang属性など仕様に合わせて変更してください

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <link rel="stylesheet" href="css/style.css" type="text/css" media="all">
    <title>CSS3 Drop sliding list menu #6</title>
</head>
<body>
<div>
	<ul>
        <!-- defining top elements -->
		<li><a href="#">Home</a></li>
		<li id="has-sub1"><a href="#">Tutorials</a></li>
		<li id="has-sub2"><a href="#">Resources</a></li>
		<li id="has-sub3"><a href="#">Menus #4</a></li>
		<li id="has-sub4"><a href="#">Menus #5</a></li>
		<li><a href="#">About</a></li>
		<li><a href="#">Back</a></li>

        <!-- defining sub elements -->
        <li id="sub1">
            <table><tr>
                <td>
    				<dl>
    					<dt>Links #1</dt>
                        <dd><a href="#">HTML / CSS</a></dd>
                        <dd><a href="#">JS / jQuery</a></dd>
                        <dd><a href="#">PHP</a></dd>
                        <dd><a href="#">MySQL</a></dd>
    					<dt>Links #2</dt>
                        <dd><a href="#">XSLT</a></dd>
                        <dd><a href="#">Ajax</a></dd>
                        <dd><a href="#">HTML / CSS</a></dd>
    				</dl>
                </td>
                <td>
    				<dl>
    					<dt>Links #3</dt>
    					<dd><a href="#">link 31</a></dd>
    					<dd><a href="#">link 32</a></dd>
    					<dd><a href="#">link 33</a></dd>
    					<dd><a href="#">link 34</a></dd>
    					<dd><a href="#">link 35</a></dd>
    					<dd><a href="#">link 36</a></dd>
    					<dd><a href="#">link 37</a></dd>
    					<dd><a href="#">link 38</a></dd>
    				</dl>
                </td>
                <td>
    				<dl>
    					<!-- repeated sublinks -->
    				</dl>
                </td>
            </tr></table>
        </li>

        <!-- and other repeated subs with similar structure -->
	</ul>

    <div style="clear:both"></div>
</div>
</body>
</html>

Step 2. CSS

/* demo page styles */
body {
    background:#eee;
    margin:0;
    padding:0;
}
.example {
    position:relative;
    background:#fff url(../images/background.jpg);
    width:765px;
    height:560px;
    border:1px #000 solid;
    margin:20px auto;
    padding:20px;
    border-radius:3px;
    -moz-border-radius:3px;
    -webkit-border-radius:3px;
}

/* main menu styles */
.menu {
    font-family:Verdana, sans-serif;
    list-style:none;
    margin:0;
    min-height:35px;
    padding:0;
    position:relative;
    width:100%
}
.menu li.main {
    float:left;
    padding-right:1px
}
.menu li.main a {
    background-color:#000;
    color:#fff;
    display:block;
    font-size:13px;
    font-weight:700;
    height:35px;
    line-height:35px;
    padding:0 25px;
    text-decoration:none
}
.menu li.sub {
    background-color:#444;
    border:0;
    clear:both;
    float:left;
    height:0;
    overflow:hidden;
    position:relative;
    width:100%;

    -moz-transform-origin: left top;
    -ms-transform-origin: left top;
    -o-transform-origin: left top;
    -webkit-transform-origin: left top;
    transform-origin: left top;

    -moz-transition: height 0.5s ease-in-out;
    -ms-transition: height 0.5s ease-in-out;
    -o-transition: height 0.5s ease-in-out;
    -webkit-transition: height 0.5s ease-in-out;
    transition: height 0.5s ease-in-out;

    -moz-border-radius: 0 0 10px 10px;
    border-radius: 0 0 10px 10px;
}
.menu li.sub table {
    width:100%
}
.menu li.sub dl {
    background-color:#fff;
    height:195px;
    margin:5px 5px 0 0;
    padding:10px;

    -moz-border-radius:8px;
    border-radius:8px
}
.menu li.sub dt {
    border:1px solid #000;
    color:#000;
    font-size:14px;
    font-weight:700;
    line-height:18px;
    margin:1px 0;
    padding:0 10px;

    border-radius:5px;
    -moz-border-radius:5px
}
.menu li.sub dt:hover {
    background-color:#ccc
}
.menu li.sub dd {
    margin:0;
    padding:0
}
.menu li.sub dd a {
    color:#666;
    display:block;
    font-size:12px;
    line-height:20px;
    padding-left:30px;
    text-decoration:none;

    -moz-border-radius:5px;
    border-radius:5px
}
.menu li.sub dd a:hover {
    background-color:#ccc;
    color:#444
}
.menu li#has-sub1:hover ~ li#sub1,
.menu li#has-sub2:hover ~ li#sub2,
.menu li#has-sub3:hover ~ li#sub3,
.menu li#has-sub4:hover ~ li#sub4 {
    height:240px;

    -moz-transition: height 0.5s ease-in-out 0.2s
    -ms-transition: height 0.5s ease-in-out 0.2s
    -o-transition: height 0.5s ease-in-out 0.2s
    -webkit-transition: height 0.5s ease-in-out 0.2s
    transition: height 0.5s ease-in-out 0.2s
}
li#sub1:hover,
li#sub2:hover,
li#sub3:hover,
li#sub4:hover {
    height:240px;

    -moz-transition: height 0.5s ease-in-out 0.2s
    -ms-transition: height 0.5s ease-in-out 0.2s
    -o-transition: height 0.5s ease-in-out 0.25
    -webkit-transition: height 0.5s ease-in-out 0.2s
    transition: height 0.5s ease-in-out 0.2s
}

Step 3. Images

exampleのセレクターへ背景画像を指定をしてあげます