[解決済み】$(window).width()がメディアクエリとは違う
質問
あるプロジェクトでTwitter Bootstrapを使用しています。 デフォルトのBootstrapスタイルだけでなく、独自のスタイルも追加しています。
//My styles
@media (max-width: 767px)
{
//CSS here
}
また、ビューポートの幅が767px未満の場合、ページ上の特定の要素の順序を変更するためにjQueryを使用しています。
$(document).load($(window).bind("resize", checkPosition));
function checkPosition()
{
if($(window).width() < 767)
{
$("#body-container .main-content").remove().insertBefore($("#body-container .left-sidebar"));
} else {
$("#body-container .main-content").remove().insertAfter($("#body-container .left-sidebar"));
}
}
で計算される幅が小さいという問題があります。
$(window).width()
とCSSで計算される幅が同じにならないようです。 というとき
$(window).width()
は767を返し、CSSはビューポートの幅を751と計算するので、16pxの差があるようです。
何が原因で、どうすればこの問題を解決できるのか、どなたかご存知ですか?スクロールバーの幅が考慮されていないと指摘されました。
$(window).innerWidth() < 751
が良いと思います。 しかし、理想的には、スクロールバーの幅を計算し、メディアクエリ(例えば、両方の条件が値767に対してチェックされている)と一貫性のある解決策を見つけたいのです。 すべてのブラウザでスクロールバーの幅が16pxであるとは限らないからです。
解決方法は?
IE9 に対応する必要がない場合は、単に
window.matchMedia()
(
MDNドキュメント
).
function checkPosition() {
if (window.matchMedia('(max-width: 767px)').matches) {
//...
} else {
//...
}
}
window.matchMedia
は、CSS メディアクエリと完全に整合しており、ブラウザのサポートもかなり良好です。
http://caniuse.com/#feat=matchmedia
UPDATE
もし、より多くのブラウザに対応する必要がある場合は Modernizrのmqメソッド CSSのメディアクエリを理解するすべてのブラウザをサポートしています。
if (Modernizr.mq('(max-width: 767px)')) {
//...
} else {
//...
}
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み] 同じ要素にbackground-imageとCSS3グラデーションを組み合わせるにはどうすればよいですか?
-
[解決済み] jQuery データ属性の値に基づいて要素を検索する方法は?
-
[解決済み] Bootstrapの列をすべて同じ高さにするにはどうしたらいいですか?
-
[解決済み] jQuery.ajaxでmultipart/formdataを送信する。
-
[解決済み] CSS メディアクエリ: max-width OR max-height
-
[解決済み] JSONPとは何か、素人目にもわかるように説明してくれる人はいませんか?[重複)。
-
[解決済み] セレクトボックスの選択項目を設定する
-
[解決済み】iPad版SafariでjQueryを使ってタッチイベントを認識させる方法は?可能でしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] セレクトした要素の外側のHTMLを取得する
-
[解決済み] jQueryのSELECT要素で特定のオプションを選択するにはどうすればよいですか?
-
[解決済み] jQueryでオブジェクトに登録されたイベントハンドラを検索する
-
[解決済み] 変更イベントでradioを使用するには?
-
[解決済み] jQueryでtextareaの値を設定する
-
[解決済み] Bootstrapのモーダルを閉じる
-
[解決済み] jQueryを使用して配列から特定の値を削除する方法
-
[解決済み] val()を使ってselectの値を設定しても、jqueryのchangeイベントが発生しないのはなぜですか?
-
[解決済み] jQuery / JavaScriptでJSONデータをパースする方法は?
-
[解決済み】jQuery:keyPress Backspaceが発射されない?