2017/03に公開
モーダルウィンドウについては商用利用も含め、無料で(わりと自由に)使用できるプラグインが結構ネットに落ちています。
しかも軽量で、いろいろな機能を備えているものもあります。
なので、自分でコードを書いてモーダルウィンドウをつくるという機会はあまりないかもしれません。
しかし、会社によってはプラグインの使用を制限しているところもありますし、組み込まれているシステムとの兼ね合いで、ネットで配布されている一般的なプラグインが使用できない場合があります。
イチから自分でコードを書いて、制作環境やwebシステムにあわせたものをつくれれば一番よいのでしょうが、そこまでの知識がなかったり、時間がなかったりするのが現実かと思います。
そこで、Google先生にきいてみると、モーダルウィンドウの実現の仕方を解説しているサイト・blogがそれなりにあったりします。
まずは、そういうコードをコピペして、自分でカスタマイズしてみるところから始めてみると良いかもしれません。
CSSだけでモーダルウィンドウを実現する方法を紹介しているところもありますが、ここではjQueryを使ったものをご紹介します。
CSSオンリーのモーダルウィンドウについては、ページ下の方に参考リンクを添付しました。
ここにコンテンツtest
閉じる
モーダルウィンドウを実装するのに必要なオブジェクトを用意します。
<span class="m_trigger">ここをクリック</span> <div>ここにコンテンツ</div>
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
ちなみに、上記のサンプルのソースは以下のようになっています。
<span class="m_trigger">ここをクリック</span> <div><div class="m_cont"><p>ここにコンテンツtest</p><span class="m_close">閉じる</span></div></div> <br> <span class="m_trigger">ここをクリック(画像表示)</span> <div><img src="画像パス" alt=""></div>
.m_trigger{cursor: pointer;}
#m_overlay{
background:rgba(0,0,0,0.5); /*背景色や透明度は任意*/
position: fixed;
top:0;
left: 0;
width:100%;
height:120%;
display: none; /*あらかじめ非表示にしておく*/
z-index: 9999; /*z-indexの値は状況に合わせて任意*/
cursor: pointer;
}
.m_base{
display: inline-block;
position: relative;
cursor: auto;
}
@media screen and (max-width: 1047px) {
.m_base{width:90%;}
.m_base img{width:100%;}
}
.m_close{cursor: pointer;}
.m_close.m_btn{position: absolute;}/*閉じるボタンの位置は任意*/
.m_cont{
background:#fff; /*モーダルで表示するコンテンツの背景色は任意*/
width:600px; /*モーダルで表示するコンテンツの幅や高さは任意。ただし画面サイズ等を考慮*/
}
@media screen and (max-width: 1047px) {
.m_cont{width:auto;}
}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
最後に、画面(ブラウザウィンドウ)幅に対して大きすぎるコンテンツの場合は工夫をと書きましたが、その場合はむしろモーダルウィンドウを使って表示させるべきかどうかもあわせて考察してください。
js(jquery)を組み立てる前に、何をしたいかあらかじめ思い描いておくと、コードの組み立てが楽になります。
この場合、モーダルウィンドウを表示させるきっかけとなるオブジェクト(class[m_trigger])をクリックしたら、オーバーレイを表示して、オーバーレイの中にコンテンツを表示して、閉じるボタンやオーバーレイをクリックしたら、モーダルウィンドウを閉じたいなーと漠然とでよいので、思い浮かべてみます。
そのあとで、オーバーレイはふわっとフェードインで表示させたいなーとか、画面の真ん中に表示させたいなーとか、細かいことを考えましょう。
$(function() {
$('.m_trigger').next().hide();
$('.m_trigger').on('click',function(){
$('body').append('<div id="m_overlay"><div class="m_base"><span class="m_close m_btn"></span></div></div>'); //オーバーレイをbodyの終タグ直前に挿入
$('.m_base').append($(this).next().html());
$('#m_overlay').fadeIn();//オーバーレイをフェードイン
posiM();
$(window).resize(posiM);/*リサイズ対応*/
});
function posiM(){
var wh = window.innerHeight;
var ww = window.innerWidth;
var ch = $('.m_base').outerHeight();
var cw = $('.m_base').outerWidth();
var cc = $('.m_close.m_btn').outerHeight();
if((ch + cc) > wh){ //スマートデバイス対策
$('.m_base').css('width',wh * 0.9);
cw = $('.m_base').outerWidth();
ch = $('.m_base').outerHeight();
}
$('.m_base').css({
'left' : ((ww - cw) / 2) + 'px',
'top' : ((wh - ch) / 2) + 'px',
});
}
//閉じる処理
$(document).on('click','#m_overlay', function(evt){
if( !$(evt.target).closest('.m_base').length ){//.m_baseを除く
$('#m_overlay').fadeOut(function(){ //オーバーレイをフェードアウト
$('#m_overlay').remove(); //オーバーレイを削除
});
}
});
$(document).on('click','.m_close',function(){
$('#m_overlay').click();
});
});
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。