プラグインやライブラリを使用せずに jQuery + CSS でモーダルウィンドウを実装する(リサイズ対応)

  • facebook
  • このエントリーをはてなブックマークに追加
  • Twitter

モーダルウィンドウを実装するプラグインやライブラリ、探せば結構あります。remodal.js とか、すごく便利ですね。
ただ、今回はプラグインやライブラリを使用せずにモーダルウィンドウを実装する方法をご紹介します。
時と場合に応じて使い分けてください。

モーダルウィンドウ

  1. html
  2. CSS
  3. jQuery

html

※省略しておりますが、「head」内でjQueryを読み込んでくださいね。

<p><a data-target="modal" class="modal_open">モーダルを表示</a></p>
<div id="modal" class="modal_box">
<p><a class="modal_close"></a></p>
<p>ここにモーダルウィンドウ内で表示したいコンテンツ内容を記述します。</p>
<p>モーダルウィンドウを閉じる場合は、右上の×をクリックするか、背景の黒い部分をクリックしてください。</p>
</div>

CSS

.modal_bg {
	display: none;
	position: fixed;
	top: 0;
	left: 0;
	z-index: 1;
	background: rgba(0,0,0,0.7);
	width: 100%;
	height: 100%;
}
.modal_box {
	display: none;
	position: fixed;
	z-index: 2;
	background: #fff;
	width: 80%;
	padding: 50px;
	box-sizing: border-box;
}
.modal_close {
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	width: 35px;
	height: 35px;
}
.modal_close:before {
	content: "\00d7";
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	width: 35px;
	text-align: center;
	line-height: 35px;
	font-family: Arial, "Helvetica CY", "Nimbus Sans L", sans-serif !important;
	font-size: 35px;
	color: #999;
	cursor: pointer;
}

jQuery

$(function() {
	$('.modal_open').click(function(){
		$('body').append('<div class="modal_bg"></div>');
		$('.modal_bg').fadeIn();
		var modal = '#' + $(this).attr('data-target');
		function modalResize(){
			var w = $(window).width();
			var h = $(window).height();
			var x = (w - $(modal).outerWidth(true)) / 2;
			var y = (h - $(modal).outerHeight(true)) / 2;
			$(modal).css({'left': x + 'px','top': y + 'px'});
		}
		modalResize();
		$(modal).fadeIn();
		$('.modal_bg, .modal_close').off().click(function(){
			$('.modal_box').fadeOut();
			$('.modal_bg').fadeOut(200,function(){
				$('.modal_bg').remove();
			});
		});
		$(window).on('resize', function(){ modalResize(); });
	});
})

難しそうな所解説

3行目
body に グレイアウトする背景用の div.modal_bg を追加します。

6〜12行目
モーダル要素の上下中央寄せを function 化しております。

21行目
ウィンドウがリサイズされた時に上下中央寄せ function が発動するようにしています。

前の記事

折りたたみできるミニベロ BRIDGESTONE(シルヴァ)CYLVA F8F(F6F)がやってきた

次の記事

全世帯無料配布の布マスク、通称「アベノマスク」を子ども用に活用する