ご質問・お見積り等お気軽にご相談ください
お問い合わせ

HTML, CSS, JavaScript/jQueryで、やや手の込んだメニューを3つ作ってみた。

HTML, CSS, JavaScript/jQueryで、やや手の込んだメニューを3つ作ってみた。

この度は、株式会社ウェブネーションをご訪問頂き、誠にありがとうございます。

今回は、HTML, CSS, JavaScript/jQueryを使って、やや手の込んだメニューを3つ作ってみましたので、実際に動かした時の動画とそのコードと共に紹介いたします。

最後までお読みいただけますと幸いです。

手の込んだメニューの制作について

執筆者の視点として、コンテンツ制作において、手の込んだ表現を使うことは、多くのコンテンツの利用者から注目が浴びやすくなる点で、多少ながら効果的な方法であると考えています。

例えば、美術館や博物館などの展示施設では、観客としてさまざまな作品を鑑賞すると思います。

その時、面白みのある作品や印象的な作品などが一度目に入ると、たとえそれらの施設を去った後でも、時々記憶として蘇ることはありませんでしょうか?

一度そのような作品に目を向ければ、忘れる確率は低くなると考えます。

今回は、この視覚的なメカニズムを、手の込んだ表現を含むWebサイト制作にも応用すれば、Webサイトの利用者から、多少注目が浴びるのではと思い、作ってみました。

実際のメニューの動作

実際に動かしたときの動画とそのコード(HTML, CSS, JavaScript/jQuery)は、下の通りになります。

実際に動かした時の動画

パターン1

画像

HTML / JavaScript(jQuery)

<div id="content">
	<div class="open-menu-button button001">
		<span>Click Here!</span>
	</div>
	<div class="menu-panel">
		<div class="menu001">
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>A</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>B</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>C</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>D</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>E</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>F</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>G</span>
				</div>
			</div>
			<div class="panel-button-container panel001">
				<div class="panel-button button101">
					<span>H</span>
				</div>
			</div>
			<div class="panel-button-container panel001 close-button">
				<div class="panel-button button101">
					<span>CLOSE</span>
				</div>
			</div>
		</div>
		<div class="mask"></div>
	</div>
	<script>
		$(function(){
			$('body').on('click', '.button001', function(){
				$('.mask').css({'display':'block'});
				$('.menu-panel').fadeIn(200);
				$('.menu001').addClass('show');
				$('.panel001').addClass('show');
				$('.menu-panel').addClass('show');
			});
			$(document).on('click', function(e){
				if($(e.target).closest('.mask').length > 0 || $(e.target).closest('.close-button').length > 0){
					$('.panel001').removeClass('show');
					$('.menu001').removeClass('show');
					$('.menu-panel').removeClass('show');
					$('.menu-panel').fadeOut(200);
				}
			});
		});
	</script>
	<script src="commonPjax.js"></script>
</div>
<div class="links">
	<a class="link-button link001" href="./blog20231021_001.html"></a>
	<a class="link-button link002" href="./blog20231021_002.html"></a>
	<a class="link-button link003" href="./blog20231021_003.html"></a>
</div>

CSS

body {
	background-color: #DFDFDF;
}
.open-menu-button {
	cursor: pointer;
	color: #ffffff;
	padding: 10px;
	margin: auto;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	display: flex;
	text-align: center;
	position: absolute;
	height: fit-content;
	align-items: center;
	width: fit-content;
	user-select: none;
	border-radius: 10px;
	z-index: -2;
}
.button001 {
	background-color: #8e5091;
}
.menu-panel {
	display: none;
}
.menu-panel.show {
	display: flex;
}
.menu001, .panel001 {
	transform: scale(0);
	transition: all 0.5s;
}
.menu001.show, .panel001.show {
	transform: scale(1);
}
.panel001.show:nth-child(1) {transition-delay: 0.5s;}
.panel001.show:nth-child(2) {transition-delay: 0.5625s;}
.panel001.show:nth-child(3) {transition-delay: 0.625s;}
.panel001.show:nth-child(4) {transition-delay: 0.6875s;}
.panel001.show:nth-child(5) {transition-delay: 0.75s;}
.panel001.show:nth-child(6) {transition-delay: 0.8125s;}
.panel001.show:nth-child(7) {transition-delay: 0.875s;}
.panel001.show:nth-child(8) {transition-delay: 1.0s;}
.panel001.show:nth-child(9) {transition-delay: 1.0625s;}
.menu001 {
	width: 40%;
	height: fit-content;
	margin: auto;
	display: flex;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	padding:20px;
	text-align: center;
	position: absolute;
	justify-content: space-between;
	border-radius: 30px;
	flex-wrap: wrap;
}
.menu001 {
	background-color: #ab7bad;
}
.panel-button {
	color: #ffffff;
	width: 100px;
	height: 100px;
	border-radius: 100%;
	margin: 10px;
	display: grid;
	text-align: center;
	align-items: center;
	cursor: pointer;
	transition: 0.2s;
}
.button101 {
	background-color: #844483;
}
.panel001.close-button {
	height: fit-content;
	background-color: none;
	width: 100%;
	border-radius: 20px;
	padding: 0 10px;
}
.panel001.close-button > .button101 {
	width: 100%;
	height: 50px;
	border-radius: 20px;
	margin: 0;
	background-color: #a04579;
}
.panel001.close-button > .button101:hover {
	transform: scale(1.05);
}
.panel-button:not(.close-button):hover {
	transform: scale(1.2);
	transition: all 0.2s ease-in;
}
.close-button {
	width: 200px;
	height: 200px;
	font-size: 20px;
}
.mask {
	background-color: #000000;
	opacity: 0.5;
	display: none;
	width: 100%;
	position: fixed;
	left: 0;
	right: 0;
	top: 0;
	bottom: 0;
	z-index: -1;
}
.link-button {
	padding: 20px 15px;
	line-height: 0;
	border-radius: 100%;
	width: 10px;
	display: block;
	position: fixed;
	bottom: 10px;
	margin: 0 auto;
	z-index: -2;
}
.link001 { left: 0; right: 100px; background-color: #8e5091; }
.link002 { left: 0; right: 0; background-color: #505891;}
.link003 { left: 100px; right: 0; background-color: #508491;}

パターン2

画像

HTML / JavaScript(jQuery)

<div id="content">
	<div class="open-menu-button button002">
		<span>Click Here!</span>
	</div>
	<div class="menu-panel">
		<div class="menu002">
			<div class="panel-button panel002 button201 close-button">
				<span>CLOSE</span>
			</div>
			<div class="panel-button-container panel002-2">
				<div class="panel-button button202">
					<span>I</span>
				</div>
			</div>
			<div class="panel-button-container panel002-2">
				<div class="panel-button button202">
					<span>J</span>
				</div>
			</div>
			<div class="panel-button-container panel002-2">
				<div class="panel-button button202">
					<span>K</span>
				</div>
			</div>
			<div class="panel-button-container panel002-2">
				<div class="panel-button button202">
					<span>L</span>
				</div>
			</div>
		</div>
		<div class="mask"></div>
	</div>
	<script>
		$(function(){
			$('body').on('click', '.button002', function(){
				$('.mask').css({'display':'block'});
				$('.menu-panel').fadeIn(200);
				$('.menu002').addClass('show');
				$('.panel002').addClass('show');
				$('.panel002-2').addClass('show');
				$('.menu-panel').addClass('show');
			});
			$(document).on('click', function(e){
				if($(e.target).closest('.mask').length > 0 || $(e.target).closest('.close-button').length > 0){
					$('.panel002').removeClass('show');
					$('.panel002-2').removeClass('show');
					$('.menu002').removeClass('show');
					$('.menu-panel').removeClass('show');
					$('.menu-panel').fadeOut(200);
				}
			});
		});
	</script>
	<script src="commonPjax.js"></script>
</div>
<div class="links">
	<a class="link-button link001" href="./blog20231021_001.html"></a>
	<a class="link-button link002" href="./blog20231021_002.html"></a>
	<a class="link-button link003" href="./blog20231021_003.html"></a>
</div>

CSS

body {
	background-color: #DFDFDF;
}
.open-menu-button {
	cursor: pointer;
	color: #ffffff;
	padding: 10px;
	margin: auto;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	display: flex;
	text-align: center;
	position: absolute;
	height: fit-content;
	align-items: center;
	width: fit-content;
	user-select: none;
	border-radius: 10px;
	z-index: -2;
}
.button002 {
	background-color: #505891;
}
.menu-panel {
	display: none;
}
.menu-panel.show {
	display: flex;
}
.menu002, .panel002 {
	transform: scale(0);
	transition: all 0.5s;
}
.menu002.show, .panel002.show {
	transform: scale(1);
}
.menu002 {
	width: 40%;
	height: fit-content;
	margin: auto;
	display: flex;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	padding:20px;
	text-align: center;
	position: absolute;
	justify-content: space-between;
	border-radius: 30px;
	flex-wrap: wrap;
}
.menu002 {
	width: fit-content;
	border-radius: 100%;
	background: none;
}
.panel-button {
	color: #ffffff;
	width: 100px;
	height: 100px;
	border-radius: 100%;
	margin: 10px;
	display: grid;
	text-align: center;
	align-items: center;
	cursor: pointer;
	transition: 0.2s;
}
.panel-button:not(.close-button):hover {
	transform: scale(1.2);
	transition: all 0.2s ease-in;
}
.panel-button.button202:hover {
	transform: scale(1.2) rotate(-90deg);
}
.button201.close-button {
	background-color: #464484;
}
.close-button {
	width: 200px;
	height: 200px;
	font-size: 20px;
}
.panel-button-container.panel002-2 {
	margin: auto;
	position: absolute;
	left: 0;
	right: 0;
	top: 0;
	bottom: 0;
	z-index: -1;
	display: table;
	transition: all 0.5s;
	transform: rotate(-90deg);
}
.button202 {
	background-color: #3a379e;
	transform: rotate(-90deg);
}
.panel002-2.show:nth-child(2) {transition-delay: 0.5s; transform: rotate(90deg) translate(0px, 200px);}
.panel002-2.show:nth-child(3) {transition-delay: 0.5s; transform: rotate(90deg) translate(200px, 0px);}
.panel002-2.show:nth-child(4) {transition-delay: 0.5s; transform: rotate(90deg) translate(0px, -200px);}
.panel002-2.show:nth-child(5) {transition-delay: 0.5s; transform: rotate(90deg) translate(-200px, 0px);}
.mask {
	background-color: #000000;
	opacity: 0.5;
	display: none;
	width: 100%;
	position: fixed;
	left: 0;
	right: 0;
	top: 0;
	bottom: 0;
	z-index: -1;
}
.link-button {
	padding: 20px 15px;
	line-height: 0;
	border-radius: 100%;
	width: 10px;
	display: block;
	position: fixed;
	bottom: 10px;
	margin: 0 auto;
	z-index: -2;
}
.link001 { left: 0; right: 100px; background-color: #8e5091; }
.link002 { left: 0; right: 0; background-color: #505891;}
.link003 { left: 100px; right: 0; background-color: #508491;}

パターン3

画像

HTML / JavaScript(jQuery)

<div id="content">
	<div class="open-menu-button button003">
		<span>Click Here!</span>
	</div>
	<div class="menu-panel">
		<div class="menu003">
			<div class="panel003 head003">
				<span>MENU</span>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>M</span>
				</div>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>N</span>
				</div>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>O</span>
				</div>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>P</span>
				</div>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>Q</span>
				</div>
			</div>
			<div class="panel-button-container panel003">
				<div class="panel-button button301">
					<span>R</span>
				</div>
			</div>
			<div class="panel-button-container panel003 close-button">
				<div class="panel-button button301">
					<span>CLOSE</span>
				</div>
			</div>
		</div>
		<div class="mask"></div>
	</div>
	<script>
		$(function(){
			$('body').on('click', '.button003', function(){
				$('.mask').css({'display':'block'});
				$('.menu-panel').fadeIn(200);
				$('.menu003').addClass('show');
				$('.panel003').addClass('show');
				$('.menu-panel').addClass('show');
			});
			$(document).on('click', function(e){
				if($(e.target).closest('.mask').length > 0 || $(e.target).closest('.close-button').length > 0){
					$('.panel003').removeClass('show');
					$('.menu003').removeClass('show');
					$('.menu-panel').removeClass('show');
					$('.menu-panel').fadeOut(200);
				}
			});
		});
	</script>
	<script src="commonPjax.js"></script>
</div>
<div class="links">
	<a class="link-button link001" href="./blog20231021_001.html"></a>
	<a class="link-button link002" href="./blog20231021_002.html"></a>
	<a class="link-button link003" href="./blog20231021_003.html"></a>
</div>

CSS

body {
	background-color: #DFDFDF;
}
.open-menu-button {
	cursor: pointer;
	color: #ffffff;
	padding: 10px;
	margin: auto;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	display: flex;
	text-align: center;
	position: absolute;
	height: fit-content;
	align-items: center;
	width: fit-content;
	user-select: none;
	border-radius: 10px;
	z-index: -2;
}
.button003 {
	background-color: #508491;
}
.menu-panel {
	display: none;
}
.menu-panel.show {
	display: flex;
}
.menu003, .panel003 {
	transform: scale(0);
	transition: all 0.5s;
}
.menu003.show, .panel003.show {
	transform: scale(1);
}
.menu003 {
	width: 40%;
	height: fit-content;
	margin: auto;
	display: flex;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	padding:20px;
	text-align: center;
	position: absolute;
	justify-content: space-between;
	border-radius: 30px;
	flex-wrap: wrap;
}
.menu003 {
	background-color: #7bad9a;
}
.panel-button {
	color: #ffffff;
	width: 100px;
	height: 100px;
	border-radius: 100%;
	margin: 10px;
	display: grid;
	text-align: center;
	align-items: center;
	cursor: pointer;
	transition: 0.2s;
}
.close-button {
	width: 200px;
	height: 200px;
	font-size: 20px;
}
.panel003 {
	width: 100%;
	height: fit-content;
}
.panel003.head003 {
	margin: 10px 0;
	color: #ffffff;
}
.panel-button-container.panel003, .panel003.close-button {
	max-height: 0;
	transition: max-height 0.5s ease-out, visibility 0.5s ease-out;
	visibility: hidden;
}
.panel003.show:not(:first-child) {transition-delay: 0.5s; max-height: 100px; visibility: visible;}
.button301 {
	width: 100%;
	height: 100%;
	border-radius: 20px;
	margin: 10px 0;
	padding: 10px 0;
	background-color: #317159;
}
.panel-button.button301:hover {
	transform: scale(1.05);
}
.panel003.close-button.show > .button301 {
	padding: 10px 0;
}
.panel003.close-button > .button301 {
	padding: 0;
	background-color: #4b9a47;
}
.mask {
	background-color: #000000;
	opacity: 0.5;
	display: none;
	width: 100%;
	position: fixed;
	left: 0;
	right: 0;
	top: 0;
	bottom: 0;
	z-index: -1;
}
.link-button {
	padding: 20px 15px;
	line-height: 0;
	border-radius: 100%;
	width: 10px;
	display: block;
	position: fixed;
	bottom: 10px;
	margin: 0 auto;
	z-index: -2;
}
.link001 { left: 0; right: 100px; background-color: #8e5091; }
.link002 { left: 0; right: 0; background-color: #505891;}
.link003 { left: 100px; right: 0; background-color: #508491;}

補足

コードの中に、commonPjax.jsというファイル名がありますが、このファイルの詳細については、一度こちらのブログをご覧ください。

最後に

いかがでしたでしょうか?

Webサイト制作において、やや手の込んだメニューを表現するのは、Webサイトの利用者に注目されるようになりますし、記憶に残るという点でも期待できるかもしれませんね。

今回はここまでとさせていただきます。

最後までお読みいただき、誠にありがとうございます。

この記事を書いた人
通りすがりのエンジニアB
通りすがりのエンジニアB(匿名)です。