HTML5で追加されたdialogタグ。
<dialog>: ダイアログ要素 – HTML: HyperText Markup Language | MDN
https://developer.mozilla.org/ja/docs/Web/HTML/Element/dialog
とても便利なタグではあるが、主要ブラウザのedgeやsafariで、まだ動作しないのが難点である。
chromeなどの対応ブラウザのみで開発していた場合、気付かずにリリースしてしまうと対応で慌てることに。
その時にすぐに修正できるよう、dialogタグでの実装構造そのままの代替策をメモしておく。
dialogタグ代替策
変更前
HTML
<dialog>
<p>ダイアログ表示部分です。</p>
<button class="close_dialog">ダイアログを閉じる</button>
</dialog>
<button class="open_dialog">ダイアログを開く</button>
CSS
.open_dialog,
.close_dialog {
cursor: pointer;
}
Javascript(jQuery)
/* オープン処理 */
$(document).on("click", ".open_dialog", function(){
var dialog = $(this).prev();
dialog.showModal();
});
/* クローズ処理 */
$(document).on("click", ".close_dialog", function(){
var dialog = $(this).parent();
dialog.close();
});
変更後
赤字が変更箇所。
HTML
<div class="dialog">
<p>ダイアログ表示部分です。</p>
<button class="close_dialog">ダイアログを閉じる</button>
</div>
<button class="open_dialog">ダイアログを開く</button>
CSS
.dialog {
display: none;
position: fixed;
top: 50%;
height: auto;
overflow: hidden;
z-index: 9999;
}
.open_dialog,
.close_dialog {
cursor: pointer;
}
Javascript(jQuery)
/* オープン処理 */
$(document).on("click", ".open_dialog", function(){
var dialog = $(this).prev();
var leftPos = (($(window).width() - dialog.outerWidth(true)) / 2);
var topPos = (($(window).height() - dialog.outerHeight(true)) / 2);
dialog.css({"left": leftPos + "px"});
dialog.css({"top": topPos + "px"});
dialog.show();
});
/* クローズ処理 */
$(document).on("click", ".close_dialog", function(){
var dialog = $(this).parent();
dialog.hide();
});