\r\n\r\n\r\n================\r\n\r\n\r\nスマホだとダイアログが後ろに隠れてしまうので下記を記述して全面に表示させています。\r\n================\r\ndiv.ui-dialog {\r\n\tz-index: 99999;\r\n}\r\n================\r\n\r\nなぜ position: [300, 2700] が効かないのでしょうか…。\r\nお知恵を拝借させてください。","answerCount":3,"upvoteCount":0,"datePublished":"2015-06-04T03:37:30.366Z","dateModified":"2015-06-04T04:41:12.290Z","acceptedAnswer":{"@type":"Answer","text":"単純にCSSで書くのはどうでしょう?\r\n#dialog{\r\n position: fixed;\r\n top: 50%;\r\n left: 50%;\r\n margin-top: -00px; /* ダイアログのheightの半分 */\r\n margin-left: -00px; /* ダイアログのwidthの半分 */\r\n}","dateModified":"2015-06-04T05:16:35.416Z","datePublished":"2015-06-04T05:16:35.416Z","upvoteCount":0,"url":"https://teratail.com/questions/10729#reply-15544"},"suggestedAnswer":[{"@type":"Answer","text":"まず、画面の幅と高さをjQueryで取得出来るはず。\r\n\r\nなので、画面とボックスを割るイメージで「position: [300, 2700], 」の値を計算しよう。\r\nこれ最近のブラウザであればcssでも実装出来るからね。\r\n\r\n例えば幅900pxの場合で、ボックスが300pxの場合の計算をすると、\r\n900 / 2 - 300 / 2\r\n(高さ / 2 - ボックスの幅 / 2)\r\n\r\nこれで中央のに配置出来る。\r\n高さも同じ感じで計算すれば、丁度画面中央になります。\r\n\r\nCSSでやる場合、こんな感じ\r\n```lang-css\r\nleft: calc(100% / 2 - (100px / 2));\r\n```\r\n\r\ncalc()関数はpxと%を混ぜて使う事が出来るので100%は画面いっぱいの意味なので、それを2割るだけ\r\n[http://fukumi.9en.co/wp/archives/241](http://fukumi.9en.co/wp/archives/241)\r\n\r\n参考にどうぞ。","dateModified":"2015-06-04T05:18:48.850Z","datePublished":"2015-06-04T05:18:48.850Z","upvoteCount":0,"url":"https://teratail.com/questions/10729#reply-15545","comment":[{"@type":"Comment","text":"回答ありがとうございます。\r\nleft, topの正確な値を取得するJS関数は既に用意してあります。\r\nそれを使うと問題点が把握しづらくなりそうだったので仮の値を直接記述していました。\r\nCSSの方がシンプルに書けそうなのでこちらも試してみます。","datePublished":"2015-06-04T06:44:54.025Z","dateModified":"2015-06-04T06:44:54.025Z"}]},{"@type":"Answer","text":"以下のページによるとpositionの値にはObjectを入れるとなっています。\r\n[300, 2700] が効かないのはそれが原因ではないでしょうか?\r\n[http://api.jqueryui.com/dialog/#option-position](http://api.jqueryui.com/dialog/#option-position)\r\n\r\npositionはデフォルトの値が画面中央になっているようなので、\r\nposition: [300, 2700], を削除してみてはどうでしょうか?","dateModified":"2015-06-04T05:21:45.458Z","datePublished":"2015-06-04T05:16:19.918Z","upvoteCount":0,"url":"https://teratail.com/questions/10729#reply-15543","comment":[{"@type":"Comment","text":"回答ありがとうございます。\r\n\r\nデフォルトではうまくいきませんでした。(どのあたりに表示されたかは忘れてしまったのですが・・・)\r\n\r\nObjectを入れるpositionの使い方の他に、座標を指定する方法があるようなのです。\r\nどなたかのブログで拝見しました。できればそれを使いたかったのです。\r\n\r\nちなみにObjectを入れる方法ですと\r\n=====\r\n \tposition: {\r\n \t\tof : '#button_add_wishlist', // 基準とするセレクタ\r\n \t\tat: 'center top', // 基準セレクタのどの位置に対象を合わせるか\r\n \t\tmy: 'center bottom' // 表示したい対象のどの部分を基準セレクタに合わせるか\r\n \t},\r\n=====\r\nこのように近くのボタンを基準に位置を指示することで理想に近い形にはなりました。\r\nただ、スマホではずれてしまうようです(T_T)\r\n","datePublished":"2015-06-04T06:15:44.492Z","dateModified":"2015-06-04T06:15:44.492Z"},{"@type":"Comment","text":"画面中央に表示するなら、やはりデフォルトの値({ my: \"center\", at: \"center\", of: window })にするのが良いのではないかと思います。\r\n\r\n中央表示の機能自体はjQuery UIに用意されていて、本来できるはずなので、一度Ajaxを経由せずに実行してみたり、他のCSSを外してみるなどして、うまくいかない原因を探られるのがよいかと思います。\r\n\r\n参考にならないかもしれませんが、私が試したものを貼っておきます。\r\nhttp://codepen.io/anon/pen/zGZLKz?editors=101","datePublished":"2015-06-04T07:40:43.300Z","dateModified":"2015-06-04T07:40:43.300Z"},{"@type":"Comment","text":"inaさん、ありがとうございます。\r\n確かに、なにも指定しなくても綺麗に中央に表示されますね。\r\nそれから codepen というサイトを初めて知りました。\r\nとても便利そうですね!\r\n「解決済」ではありますがまだjQueryに未練があるのでこれを使って原因を探っていこうと思います。","datePublished":"2015-06-04T07:54:37.487Z","dateModified":"2015-06-04T07:54:37.487Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/jQuery%20UI","name":"jQuery UIに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/10729","name":"jquery ui ダイアログを中央に表示させたい"}}]}}}
初めて質問させていただきます。
現在ショッピングサイトでお気に入り機能を作成中です。
「お気に入り」ボタンをクリックした際にダイアログを表示させたいのですが、
PC、スマホともに画面中央に表示させることができなくて困っております。
今はなぜか画面の一番左下に表示されています。
概要は以下になります。
・ベースはPHP。
・「お気に入り」ボタンをクリックするとwishlist_ajax.jsへ飛ぶ。
・wishlist_ajax.js内で処理が成功した際に呼ばれる success:〜 にダイアログ表示のJSを記述している。
success:function(xml){
// ダイアログを作成
dialog_html = '<div id="dialog">◯◯は既にお気に入りに登録されています。</div>';
$(dialog_html).dialog({
position: [300, 2700], // 仮の数値です
show: {
effect: 'drop',
direction: 'down'
},
hide: {
effect: 'drop',
direction: 'up'
},
modal: true,
dialogClass: "no-close",
buttons: {
"close": function() {
$( this ).dialog( "close" );
}
}
});
}
================
ヘッダーでは以下を呼んでいます。
jQuery UI のバージョンは 1.11.1 です。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js"></script>
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smootheness/jquery-ui.css" rel="stylesheet" />
================
スマホだとダイアログが後ろに隠れてしまうので下記を記述して全面に表示させています。
div.ui-dialog {
z-index: 99999;
}
なぜ position: [300, 2700] が効かないのでしょうか…。
お知恵を拝借させてください。
まず、画面の幅と高さをjQueryで取得出来るはず。
なので、画面とボックスを割るイメージで「position: [300, 2700], 」の値を計算しよう。
これ最近のブラウザであればcssでも実装出来るからね。
例えば幅900pxの場合で、ボックスが300pxの場合の計算をすると、
900 / 2 - 300 / 2
(高さ / 2 - ボックスの幅 / 2)
これで中央のに配置出来る。
高さも同じ感じで計算すれば、丁度画面中央になります。
CSSでやる場合、こんな感じ
lang
1left: calc(100% / 2 - (100px / 2));
calc()関数はpxと%を混ぜて使う事が出来るので100%は画面いっぱいの意味なので、それを2割るだけ
http://fukumi.9en.co/wp/archives/241
参考にどうぞ。
ベストアンサー
単純にCSSで書くのはどうでしょう?
#dialog{
position: fixed;
top: 50%;
left: 50%;
margin-top: -00px; /* ダイアログのheightの半分 /
margin-left: -00px; / ダイアログのwidthの半分 */
}
15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる
質問する