CSS3のborder-radius, box-shadow, text-shadowを使って角丸+ドロップシャドー付きのドロップダウンメニューを作るテクニックをエントリーしてみます。

こちらにデモページを用意しましたので、まずはご覧になっていただければと思います。

ドロップダウンメニューの作り方

作り方はまず、ボディー内に以下のコードを書き込みます。

<ul id="nav" class="clearfix">
	<li class="current"><a href="#">HOME</a></li>
	<li><a href="#">メニュー 1</a>
        <ul>
            <li><a href="#">メニュー 1-1</a></li>
            <li><a href="#">メニュー 1-2</a></li>
            <li><a href="#">メニュー 1-3</a></li>
            <li><a href="#">メニュー 1-4</a></li>
            <li><a href="#">メニュー 1-5</a></li>
        </ul>
    </li>
	<li><a href="#">メニュー 2</a>
		<ul>
			<li><a href="#">メニュー 2-1 →</a>
				<ul>
                    <li><a href="#">メニュー 2-1-1</a></li>
                    <li><a href="#">メニュー 2-1-2</a></li>
                    <li><a href="#">メニュー 2-1-3</a></li>
                    <li><a href="#">メニュー 2-1-4</a></li>
				</ul>
			</li>
			<li><a href="#">メニュー 2-2</a></li>
			<li><a href="#">メニュー 2-3 →</a>
				<ul>
                    <li><a href="#">メニュー 2-3-1</a></li>
				</ul>
			</li>
	  </ul>
  </li>
	<li><a href="#">メニュー 3</a>
		<ul>
			<li><a href="#">メニュー 3-1 →</a>
				<ul>
					<li><a href="#">メニュー 3-1-1</a></li>
					<li><a href="#">メニュー 3-1-2 →</a>
						<ul>
							<li><a href="#">メニュー 3-1-2-1</a>
							<li><a href="#">メニュー 3-1-2-2</a>
							<li><a href="#">メニュー 3-1-2-3</a>
						</ul>
                    </li>
                    <li><a href="#">メニュー 3-1-3</a></li>
                    <li><a href="#">メニュー 3-1-4</a></li>
				</ul>
			</li>
			<li><a href="#">メニュー 3-2 →</a>
				<ul>
					<li><a href="#">メニュー 3-2-1</a></li>
                    <li><a href="#">メニュー 3-2-2</a></li>
                    <li><a href="#">メニュー 3-2-3</a></li>
				</ul>
			</li>
	  </ul>
  </li>
	<li><a href="#">メニュー 4</a></li>
	<li><a href="#">メニュー 5</a></li>
</ul>

次に、CSSをヘッダ内に書き込むか、外部ファイルにして読み込みます。
CSSは以下のようになっています。

body {
	font-size: 62.5%; /* Resets 1em to 10px */
	font-family: Verdana, Geneva, sans-serif;
	background: #EEE;
	width: 800px;
	margin: 0 auto;
	color: #666;
}
p {
	text-align: center;
}
a {
	color: #333;
}
#nav {
	margin: 120px 0;
	padding: 8px 5px 0;
	background: #808080;
	line-height: 100%;

	/* メニューの外枠の角丸 */
	border-radius: 2em;
	-webkit-border-radius: 2em;
	-moz-border-radius: 2em;

	/* メニューの外枠のドロップシャドウ */
	box-shadow: 0 3px 3px rgba(0,0,0,0.5);
	-webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.5);
	-moz-box-shadow: 0 3px 3px rgba(0,0,0,0.5);
}
#nav li {
	margin: 0 5px;
	padding: 0 0 8px;
	float: left;
	position: relative;
	list-style: none;
}

/* メニューのリンク設定 */
#nav a {
	font-weight: bold;
	color: #EEE;
	text-decoration: none;
	display: block;
	padding: 8px 20px;
	margin: 0;

	/* メニュー枠の角丸 */
	border-radius: 1.6em;
	-webkit-border-radius: 1.6em;
	-moz-border-radius: 1.6em;
	
	text-shadow: 0 1px 1px rgba(0,0,0,0.5);
}
#nav a:hover {
	background: #000;
	color: #fff;
}

/* メニューのマウスオーバーの設定 */
#nav .current a,
#nav li:hover > a {
	background: #EEE;
	color: #444;

	/* メニュー枠のドロップシャドウ */
	box-shadow: 0 1px 1px rgba(0,0,0,0.5);
	-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.5);
	-moz-box-shadow: 0 1px 1px rgba(0,0,0,0.5);

	/* メニューテキストのドロップシャドウ */
	text-shadow: 0 1px 0 rgba(255,255,255, 1);
}

/* ドロップダウンメニューの設定 */
#nav li:hover > ul {
	display: block;
}

/* ドロップダウンメニューのマウスオーバーの設定 */
#nav ul li:hover a,
#nav li:hover li a {
	background: none;
	border: none;
	color: #666;

	/* ドロップダウンメニュー内ドロップシャドウ非表示 */
	box-shadow: none;
	-webkit-box-shadow: none;
	-moz-box-shadow: none;
}
#nav ul a:hover {
	background: #67F !important;
	color: #fff !important;

	/* ドロップダウンメニューマウスオーバー時の角丸非表示 */
	border-radius: 0;
	-webkit-border-radius: 0;
	-moz-border-radius: 0;

	/* ドロップダウンメニューマウスオーバー時のドロップシャドウ */
	text-shadow: 0 1px 1px rgba(0,0,0,0.5);
}

/* ドロップダウンメニュー第1リストの設定 */
#nav ul {
	display: none;

	margin: 0;
	padding: 0;
	width: 180px;
	position: absolute;
	top: 34px;
	left: 0;
	background: #F2F2F2;
	border: solid 1px #AAA;

	/* 第1リストの角丸 */
	border-radius: 10px;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;

	/* 第1リストのドロップシャドウ */
	box-shadow: 0 1px 3px rgba(0,0,0, .3);
	-webkit-box-shadow: 0 1px 3px rgba(0,0,0, .3);
	-moz-box-shadow: 0 1px 3px rgba(0,0,0, .3);
}
#nav ul li {
	float: none;
	margin: 0;
	padding: 0;
}

#nav ul a {
	font-weight: normal;
	text-shadow: 0 1px 0 #fff;
}

/* ドロップダウンメニュー第2リスト以降の設定 */
#nav ul ul {
	left: 179px;
	top: -1px;
}

/* ドロップダウンメニュー最上段リストの角丸 */
#nav ul li:first-child > a {
	border-top-left-radius: 9px;
	-webkit-border-top-left-radius: 9px;
	-moz-border-radius-topleft: 9px;

	border-top-right-radius: 9px;
	-webkit-border-top-right-radius: 9px;
	-moz-border-radius-topright: 9px;
}
/* ドロップダウンメニュー最下段リストの角丸 */
#nav ul li:last-child > a {
	border-bottom-left-radius: 9px;
	-webkit-border-bottom-left-radius: 9px;
	-moz-border-radius-bottomleft: 9px;

	border-bottom-right-radius: 9px;
	-webkit-border-bottom-right-radius: 9px;
	-moz-border-radius-bottomright: 9px;
}

/* clearfix */
.clearfix:after {
	content: ".";
	display: block;
	clear: both;
	visibility: hidden;
	line-height: 0;
	height: 0;
}
.clearfix {
	display: inline-table;
}
* html .clearfix {
	height: 1px;
}
.clearfix {
	display: block;
}

Firefox, Safari, Chromeでは角丸+ドロップシャドウ付きのドロップダウンメニューになると思います。

なお、Opera, IE8では角丸やドロップシャドウなどの効果は表現されないのですが、ドロップダウンメニューはなっています。
IE6ではドロップダウンメニューにすらならないですね…

Bookmark & Share

One Response to “CSS3を使ったドロップダウンメニュー”

  1. you2u より:

    CSS3を使った角丸+ドロップシャドー付きのドロップダウンメニュー。 http://bit.ly/cmtldd

Leave a Reply

  • Categories