仕事でモーダルを自作することがたまにあるので、ある程度カスタマイズすることを想定して、簡単なモーダルを作成してみました。
モーダルの中身はHTMLに埋め込んでおく想定です。
サンプルコード
.modalがモーダルを立ち上げるリンク、#modal01~modal03がモーダルの中身になります。
.modalのhrefと一致するモーダルの中身が表示されます。
HTML
<div id="contents"> <a href="#modal01" class="modal">モーダル1</a> <a href="#modal02" class="modal">モーダル2</a> <a href="#modal03" class="modal">モーダル3</a> </div> <div id="modal01"> <h2>モーダル1の中身です。</h2> <div class="image"><img src="http://placehold.it/400x300/E74C3C/000000" width="400" height="300" alt="" /></div> <a href="#modal02" class="modal-next modal-change">次へ</a> <a href="" class="modal-close">閉じる</a> <div class="modal-nav"> <span>モーダル1へ</span> <a href="#modal02" class="modal-change">モーダル2へ</a> <a href="#modal03" class="modal-change">モーダル3へ</a> </div> </div> <div id="modal02"> <h2>モーダル2の中身です。</h2> <div class="image"><img src="http://placehold.it/400x600/3498DB/000000" width="400" height="600" alt="" /></div> <a href="#modal01" class="modal-prev modal-change">前へ</a> <a href="#modal03" class="modal-next modal-change">次へ</a> <a href="" class="modal-close">閉じる</a> <div class="modal-nav"> <a href="#modal01" class="modal-change">モーダル1へ</a> <span>モーダル2へ</span> <a href="#modal03" class="modal-change">モーダル3へ</a> </div> </div> <div id="modal03"> <h2>モーダル3の中身です。</h2> <div class="image"><img src="http://placehold.it/400x300/2ECC71/000000" width="400" height="300" alt="" /></div> <a href="#modal02" class="modal-prev modal-change">前へ</a> <a href="" class="modal-close">閉じる</a> <div class="modal-nav"> <a href="#modal01" class="modal-change">モーダル1へ</a> <a href="#modal02" class="modal-change">モーダル2へ</a> <span>モーダル3へ</span> </div> </div>
CSS
モーダルに必要な部分のみ抜粋しています。
#modal-bg {
	display: none;
	position: fixed;
	top: 0;
	left: 0;
	z-index: 9999;
	width: 100%;
	height: 100%;
	min-height: 100%;
	background: #000000;
	opacity: 0.8;
	cursor: pointer;
}
#modal {
	position: absolute;
	z-index: 9999;
	left: 50%;
}
#modal01,
#modal02,
#modal03 {
	display: none;
	position: relative;
	width: 600px; /* モーダルの幅を指定 */
}
JavaScript
// モーダルの立ち上げ
function modalOpen(target) {
	// モーダルに必要な要素の挿入
	$('body').css('position', 'relative').append('<div id="modal-bg"></div><div id="modal"></div>');
	$(target).appendTo('#modal').show();
	$('#modal-bg').show();
	// モーダル高さが画面高さより狭いとき
	if ($('#modal').height() <= $(window).height() ) {
		// モーダルの位置指定(上下中央に配置)
		$('#modal').css({
			top: $(window).scrollTop() + ($(window).height() / 2) - ($('#modal').height() / 2),
			marginLeft: - $('#modal').width() / 2
		});
	// モーダル高さが画面高さより広いとき
	} else {
		// モーダルの位置指定(画面の上から10pxに配置)
		$('#modal').css({
			top: $(window).scrollTop() + 10,
			marginLeft: - $('#modal').width() / 2
		});
	}
}
// モーダルの中身切り替え
function modalChange(target) {
	// モーダルの中身を元に戻す
	$('#modal').children().clone().appendTo('body').hide();
	// モーダルの中身を削除
	$('#modal').html('');
	// 次のモーダルの中身を挿入
	$(target).appendTo('#modal').show();
}
// モーダルを閉じる
function modalClose() {
	// モーダルの中身を元に戻す
	$('#modal').children().clone().appendTo('body').hide();
	// モーダルと背景を削除
	$('#modal-bg').remove();
	$('#modal').html('').remove();
}
$(function() {
	// モーダルを開くとき
	$(document).on('click', 'a.modal', function() {
		var target = $(this).attr('href');
		modalOpen(target);
		return false;
	});
	// モーダルの中身を切り替えるとき
	$(document).on('click', 'a.modal-change', function() {
		var target = $(this).attr('href');
		modalChange(target);
		return false;
	});
	// モーダルを閉じるとき
	$(document).on('click', '#modal-bg, a.modal-close', function() {
		modalClose();
		return false;
	});
});
JavaScriptはコメントで書いてある通りですが、モーダルを開く関数、モーダルの中身を切り替える関数、モーダルを閉じる関数を用意しています。
a.modalをクリックしたときにモーダル立ち上げ、モーダル内でa.modal-changeをクリックしたときにモーダル内の切り替え、#modal-bgかa.modal-closeをクリックしたときにモーダルを閉じるように設定しています。

コメントが承認されるまで時間がかかります。