画面、現在のWebページ、ブラウザウィンドウのサイズを取得する


2017

私は得ることができますどのようにwindowWidthwindowHeightpageWidthpageHeightscreenWidthscreenHeightpageXpageYscreenXscreenYこれはすべての主要なブラウザで動作しますか?

必要な値を説明するスクリーンショット


9
pageHeight(on a pic)uで取得できるもの:document.body.scrollHeight
befzz



3
興味深い:ryanve.com/lab/dimensions
e2-e4

回答:


1387

jQueryを使用してウィンドウまたはドキュメントのサイズを取得できます。

// Size of browser viewport.
$(window).height();
$(window).width();

// Size of HTML document (same as pageHeight/pageWidth in screenshot).
$(document).height();
$(document).width();

画面サイズについては、screenオブジェクトを使用できます。

window.screen.height;
window.screen.width;

2
jQueryメソッドheight()はすべての要素で機能46するようで、css( 'height')("46px")のような文字列ではなく数値()を返します。
クリス

6
残念なことに、モバイルSafariを扱う場合、jQueryはこの質問に対する完全な解決策ではありません。github.com/jquery/jquery/blob/master/src/dimensions.jsの
Joshua

8
@웃웃웃웃웃回答で何を編集しましたか?改訂によると、あなたは何も編集しませんでした
ダニエルW. 14年

14
@Marco Kerwitz最悪なのは、「javascript get window width」と入力して、この回答の内容がGoogleにあったことです。私からの大きなマイナス1。
Maciej Krawczyk

2
OPはASK DID jqueryのがオプションであること。忍者が元の質問を編集してそれを除外した人は誰でも責任があります。世間で受け入れられているJavaScriptライブラリを使用して正当な回答をする人々ではありません。
IncredibleHat

963

これはあなたが知る必要があるすべてを持っています:ビューポート/ウィンドウサイズを取得する

要するに:

var win = window,
    doc = document,
    docElem = doc.documentElement,
    body = doc.getElementsByTagName('body')[0],
    x = win.innerWidth || docElem.clientWidth || body.clientWidth,
    y = win.innerHeight|| docElem.clientHeight|| body.clientHeight;
alert(x + ' × ' + y);

フィドル

この回答の編集を中止してください。現在、コード形式の設定に合わせて、さまざまな人が22回編集しています。最近のブラウザーのみを対象とする場合、これは必要ではないことも指摘されています。必要な場合は、次のものが必要です。

const width  = window.innerWidth || document.documentElement.clientWidth || 
document.body.clientWidth;
const height = window.innerHeight|| document.documentElement.clientHeight|| 
document.body.clientHeight;

console.log(width, height);

58
なんでg = document.body
有料オタク2014年

51
@apaidnerd:IE8のようなブラウザーを無視する標準はdocument.bodyをサポートしていません。ただし、IE9にはあります。
Michael Mikowski、2014年

46
@MichaelMikowskiそれは真実ではありません!IE5でもサポートしていますdocument.body
木の実

32
@nux修正済みで、IE8でのサポートを確認しました。ただし、最近対象とした少なくとも1つのブラウザーがdocument.bodyをサポートしていなかったため、getElementsByTagNameアプローチを使用するように変更する必要があったことはわかっています。しかし、私はブラウザを覚えていなかったと思います。ごめんなさい!
Michael Mikowski、2014

32
1文字の変数名は役に立たないということを、非常に静かに述べたいと思います。
wybe

480

以下は、純粋なJavaScriptSource)を使用したクロスブラウザソリューションです。

var width = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;

var height = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

9
ロードプロセスの早い段階でスクリプトを呼び出すことができる場合(多くの場合、アイデア)、domがまだロードされていないため、はのbody element値を返すため、これはより良い方法undefinedです。
dgo 2015

16
ハ!古いスレッドですが、ありがとうございます。私は、マシンが発火するまでXPの使用をやめない驚くほど多くの古いホームユーザーの利益のために、少なくともIE8に可能な限り対応しようとする古い「ばか」の1人だと思います。「IE8のサポートをやめろ!!」だけで質問に答えるのではなく、投票することにうんざりしています。コメントとして。もう一度ありがとう!これにより、私が行った純粋なJavaScript写真ズームで問題が解決しました。IE8では少し遅いですが、少なくとも動作します!!! :-)
Randy

1
それは残りよりもはるかに優れています。
vinayak shahdeo

95

利用可能な画面サイズを取得する非jQueryの方法。window.screen.width/heightすでに立てられていますが、レスポンシブなウェブデザインと完全性のために、これらの属性に言及する価値があると思います:

alert(window.screen.availWidth);
alert(window.screen.availHeight);

http://www.quirksmode.org/dom/w3c_cssom.html#t10

availWidthおよびavailHeight-画面で使用可能な幅と高さ(OSタスクバーなどを除く)。


幅screen.heightと同じ-アンドロイドでは、クロムブラウザーはピクセル比で割って表示します:(
Darius.V

2
window.screen.availHeight全画面モードを想定しているため、通常の画面モードでは強制的にスクロールします(FirefoxおよびChromeでテスト済み)。
スザナ2015年

@Suzana_Kをwindow.screen.height代わりに使用します。
バレンティン

@vallentin window.screen.heightは機能しませんが、window.innerHeightは機能します
サム

67

しかし、レスポンシブ画面について話しているとき、そして何らかの理由でjQueryを使用してそれを処理したい場合は、

window.innerWidth, window.innerHeight

正しい測定値を与えます。それでもスクロールバーの余分なスペースが削除され、そのスペースを調整することを心配する必要はありません:)


2
これは、多数の賛成投票で受け入れられる答えになるはずです。現在受け入れられている回答よりもはるかに有用な回答であり、jQueryにも依存しません。
developerbmw

5
残念ながら、window.innerWidthそしてwindow.innerHeightスクロールバーのサイズを考慮に入れることができません。スクロールバーが存在する場合、これらのメソッドはほぼすべてのデスクトップブラウザーのウィンドウサイズに対して誤った結果を返します。stackoverflow.com/a/31655549/508355を
hashchange '

20

また、ブラウザのツールバーやその他のものを避けて、ウィンドウの幅と高さを取得できます。それは、ブラウザのウィンドウ内の実際の使用可能な領域

これを行うには、:window.innerWidthwindow.innerHeightプロパティを使用 し ます(w3schoolsのドキュメントを参照)。

ほとんどの場合、たとえば、完全に中央に配置されたフローティングモーダルダイアログを表示するのが最良の方法です。ブラウザを使用している解像度の向きやウィンドウサイズに関係なく、ウィンドウ上の位置を計算できます。


2
w3schoolsによると、これはie8とie7ではサポートされていません。また、w3schoolsにリンクするときは注意が必要です。meta.stackexchange.com/questions/87678/…を
thecarpy

20
function wndsize(){
  var w = 0;var h = 0;
  //IE
  if(!window.innerWidth){
    if(!(document.documentElement.clientWidth == 0)){
      //strict mode
      w = document.documentElement.clientWidth;h = document.documentElement.clientHeight;
    } else{
      //quirks mode
      w = document.body.clientWidth;h = document.body.clientHeight;
    }
  } else {
    //w3c
    w = window.innerWidth;h = window.innerHeight;
  }
  return {width:w,height:h};
}
function wndcent(){
  var hWnd = (arguments[0] != null) ? arguments[0] : {width:0,height:0};
  var _x = 0;var _y = 0;var offsetX = 0;var offsetY = 0;
  //IE
  if(!window.pageYOffset){
    //strict mode
    if(!(document.documentElement.scrollTop == 0)){offsetY = document.documentElement.scrollTop;offsetX = document.documentElement.scrollLeft;}
    //quirks mode
    else{offsetY = document.body.scrollTop;offsetX = document.body.scrollLeft;}}
    //w3c
    else{offsetX = window.pageXOffset;offsetY = window.pageYOffset;}_x = ((wndsize().width-hWnd.width)/2)+offsetX;_y = ((wndsize().height-hWnd.height)/2)+offsetY;
    return{x:_x,y:_y};
}
var center = wndcent({width:350,height:350});
document.write(center.x+';<br>');
document.write(center.y+';<br>');
document.write('<DIV align="center" id="rich_ad" style="Z-INDEX: 10; left:'+center.x+'px;WIDTH: 350px; POSITION: absolute; TOP: '+center.y+'px; HEIGHT: 350px"><!--К сожалению, у Вас не установлен flash плеер.--></div>');

20

「コンソール」を使用して、または「検査」をクリックした後、任意のWebサイトの現在ロードされているページの高さと幅を確認します。

ステップ1:マウスの右ボタンをクリックし、[検査]をクリックして、[コンソール]をクリックします

ステップ2:ブラウザの画面が「最大化」モードになっていないことを確認します。ブラウザ画面が「最大化」モードの場合は、最初に最大化ボタン(右上または左上隅にある)をクリックして、最大化を解除する必要があります。

ステップ3:次に、大なり記号( '>')の後に次のように記述します。

       > window.innerWidth
            output : your present window width in px (say 749)

       > window.innerHeight
            output : your present window height in px (say 359)

1
なぜこれが選択された答えではないのですか?
Iulian Onofrei 16年

1
@IulianOnofreiは、元の一連の質問に完全には回答しないためです。冗談は、それが私にとって正しい答えです。
2017年

innerWidthとinnerHeightは、ビューポートスケールが1の場合にのみ正確です。これはデフォルトですが、css変換を使用して誤って変更される可能性があります。
ビクターストッダード2018年

「screen.width」ではなく「window.innerWidth」がユーザーのブラウザのサイズを決定するのに役立ちました-ありがとうございます!
Kevin Pajak

10

ドキュメントの幅と高さについて真の防弾ソリューションが必要な場合( pageWidthpageHeight)には、私のプラグインであるjQuery.documentSizeの使用を検討してください

これには1つの目的しかありません。jQueryやその他のメソッドが失敗した場合でも、常に正しいドキュメントサイズを返すことです。その名前にもかかわらず、必ずしもjQueryを使用する必要はありません。それはバニラJavaScriptで記述されており、jQueryなしでも機能します。

使用法:

var w = $.documentWidth(),
    h = $.documentHeight();

グローバルのためにdocument。他のドキュメントの場合、たとえば、アクセスできる埋め込みiframeでは、ドキュメントをパラメーターとして渡します。

var w = $.documentWidth( myIframe.contentDocument ),
    h = $.documentHeight( myIframe.contentDocument );

更新:ウィンドウの寸法も変更

バージョン1.1.0以降、jQuery.documentSizeはウィンドウの寸法も処理します。

それが必要なのは

  • $( window ).height()iOSではバグあり、役に立たないほど
  • $( window ).width()モバイルズームの効果を処理しないため、モバイル$( window ).height()信頼できません。

jQuery.documentSizeは$.windowWidth()およびを提供し$.windowHeight()、これらの問題を解決します。詳しくは、ドキュメントをご覧ください。


VM2859:1キャッチされないDOMException:起源が「localhost:12999」のフレームがクロスオリジンフレームにアクセスするのをブロックしました。(…)これを克服する方法はありますか???
fizmhd 2016

1
別のドメインからiframeにアクセスすることはできません。同じ生成元のポリシーに違反しています。この答えをチェックしてください。
hashchange

これは、iframeを埋め込み、ビューポートの高さを取得しようとしている場合は機能しません。window.innerHeightは、バグのあるドキュメントの高さに等しい。フレームにアクセスできません。別のドメインからそれは実行可能なソリューションではありません。
M.Abulsoud

@ M.Abulsoud iframeにアクセスできる場合(CORS違反はありません)、機能し、テストスイートでカバーされます。この構文を使用します。互いに入れ子になった複数のiframeでも機能します。Codepenのこの例を参照してください。セットアップが一般的には機能するが、特定の1つのブラウザーで失敗する場合、それは私が認識していないバグである可能性があります。その場合、おそらく問題を開くことができますか?ありがとう。
hashchange、

8

サイズの表示に使用できる小さなJavaScriptブックマークレットを書きました。簡単にブラウザに追加でき、クリックするたびにブラウザウィンドウの右隅にサイズが表示されます。

ここには、ブックマークレットの使用方法に関する情報があります 。https://en.wikipedia.org/wiki/Bookmarklet

ブックマークレット

javascript:(function(){!function(){var i,n,e;return n=function(){var n,e,t;return t="background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;",n=i('<div style="'+t+'"></div>'),e=function(){return'<p style="margin:0;">width: '+i(window).width()+" height: "+i(window).height()+"</p>"},n.html(e()),i("body").prepend(n),i(window).resize(function(){n.html(e())})},(i=window.jQuery)?(i=window.jQuery,n()):(e=document.createElement("script"),e.src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js",e.onload=n,document.body.appendChild(e))}()}).call(this);

元のコード

元のコードはコーヒーにあります:

(->
  addWindowSize = ()->
    style = 'background-color:azure; padding:1rem; position:fixed; right: 0; z-index:9999; font-size: 1.2rem;'
    $windowSize = $('<div style="' + style + '"></div>')

    getWindowSize = ->
      '<p style="margin:0;">width: ' + $(window).width() + ' height: ' + $(window).height() + '</p>'

    $windowSize.html getWindowSize()
    $('body').prepend $windowSize
    $(window).resize ->
      $windowSize.html getWindowSize()
      return

  if !($ = window.jQuery)
    # typeof jQuery=='undefined' works too
    script = document.createElement('script')
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'
    script.onload = addWindowSize
    document.body.appendChild script
  else
    $ = window.jQuery
    addWindowSize()
)()

基本的にコードは、ウィンドウのサイズを変更すると更新される小さなdivを先頭に追加します。


5

レスポンシブレイアウトに関連するいくつかのケース$(document).height()では、ビューポートの高さのみを表示する誤ったデータを返すことがあります。たとえば、div#wrapperの高さが100%の場合、その#wrapperはその中のブロックによって引き伸ばすことができます。しかし、それでも高さはビューポートの高さのようになります。このような状況では、使用する可能性があります

$('#wrapper').get(0).scrollHeight

これはラッパーの実際のサイズを表します。


非常に多くの回答が何百もの賛成投票で返されましたが、これだけが役に立ちました。
ナキロン2018

5

画面サイズに関する完全なガイド

JavaScript

高さ:

document.body.clientHeight  // Inner height of the HTML document body, including padding 
                            // but not the horizontal scrollbar height, border, or margin

screen.height               // Device screen height (i.e. all physically visible stuff)
screen.availHeight          // Device screen height minus the operating system taskbar (if present)
window.innerHeight          // The current document's viewport height, minus taskbars, etc.
window.outerHeight          // Height the current window visibly takes up on screen 
                            // (including taskbars, menus, etc.)

注:ウィンドウが最大化されている場合、これはscreen.availHeightと等しくなります。

幅について:

document.body.clientWidth   // Full width of the HTML page as coded, minus the vertical scroll bar
screen.width                // Device screen width (i.e. all physically visible stuff)
screen.availWidth           // Device screen width, minus the operating system taskbar (if present)
window.innerWidth           // The browser viewport width (including vertical scroll bar, includes padding but not border or margin)
window.outerWidth           // The outer window width (including vertical scroll bar,
                            // toolbars, etc., includes padding and border but not margin)

jquery

高さ:

$(document).height()    // Full height of the HTML page, including content you have to 
                        // scroll to see

$(window).height()      // The current document's viewport height, minus taskbars, etc.
$(window).innerHeight() // The current document's viewport height, minus taskbars, etc.
$(window).outerHeight() // The current document's viewport height, minus taskbars, etc.                         

幅について:

$(document).width()     // The browser viewport width, minus the vertical scroll bar
$(window).width()       // The browser viewport width (minus the vertical scroll bar)
$(window).innerWidth()  // The browser viewport width (minus the vertical scroll bar)
$(window).outerWidth()  // The browser viewport width (minus the vertical scroll bar)

リファレンス:https : //help.optimizely.com/Build_Campaigns_and_Experiments/Use_screen_measurements_to_design_for_sensitive_breakpoints


4

デスクトップとモバイルブラウザーの実際のビューポートサイズを知るためのライブラリを開発しました。ビューポートサイズはデバイス間で一貫性がなく、その投稿のすべての回答に依存できないためです(これについて行ったすべての調査によると):https:// github .com / pyrsmk / W


3

ウィンドウと内部コンテンツのサイズを変更するときに、幅/高さの変化を確認する必要がある場合があります。

そのために、すべてのサイズ変更とほぼ即座に更新を動的に監視するログボックスを追加する小さなスクリプトを作成しました。

固定位置と高Zインデックスを持つ有効なHTMLを追加しますが、十分に小さいため、次のことができます

  • 実際のサイトで使用
  • モバイル/レスポンシブ ビューのテストに使用します


テスト済み:Chrome 40、IE11、ただし他の/古いブラウザーでも動作する可能性が高い... :)

  function gebID(id){ return document.getElementById(id); }
  function gebTN(tagName, parentEl){ 
     if( typeof parentEl == "undefined" ) var parentEl = document;
     return parentEl.getElementsByTagName(tagName);
  }
  function setStyleToTags(parentEl, tagName, styleString){
    var tags = gebTN(tagName, parentEl);
    for( var i = 0; i<tags.length; i++ ) tags[i].setAttribute('style', styleString);
  }
  function testSizes(){
    gebID( 'screen.Width' ).innerHTML = screen.width;
    gebID( 'screen.Height' ).innerHTML = screen.height;

    gebID( 'window.Width' ).innerHTML = window.innerWidth;
    gebID( 'window.Height' ).innerHTML = window.innerHeight;

    gebID( 'documentElement.Width' ).innerHTML = document.documentElement.clientWidth;
    gebID( 'documentElement.Height' ).innerHTML = document.documentElement.clientHeight;

    gebID( 'body.Width' ).innerHTML = gebTN("body")[0].clientWidth;
    gebID( 'body.Height' ).innerHTML = gebTN("body")[0].clientHeight;  
  }

  var table = document.createElement('table');
  table.innerHTML = 
       "<tr><th>SOURCE</th><th>WIDTH</th><th>x</th><th>HEIGHT</th></tr>"
      +"<tr><td>screen</td><td id='screen.Width' /><td>x</td><td id='screen.Height' /></tr>"
      +"<tr><td>window</td><td id='window.Width' /><td>x</td><td id='window.Height' /></tr>"
      +"<tr><td>document<br>.documentElement</td><td id='documentElement.Width' /><td>x</td><td id='documentElement.Height' /></tr>"
      +"<tr><td>document.body</td><td id='body.Width' /><td>x</td><td id='body.Height' /></tr>"
  ;

  gebTN("body")[0].appendChild( table );

  table.setAttribute(
     'style',
     "border: 2px solid black !important; position: fixed !important;"
     +"left: 50% !important; top: 0px !important; padding:10px !important;"
     +"width: 150px !important; font-size:18px; !important"
     +"white-space: pre !important; font-family: monospace !important;"
     +"z-index: 9999 !important;background: white !important;"
  );
  setStyleToTags(table, "td", "color: black !important; border: none !important; padding: 5px !important; text-align:center !important;");
  setStyleToTags(table, "th", "color: black !important; border: none !important; padding: 5px !important; text-align:center !important;");

  table.style.setProperty( 'margin-left', '-'+( table.clientWidth / 2 )+'px' );

  setInterval( testSizes, 200 );

編集:スタイルはすべてのテーブルではなくロガーテーブル要素にのみ適用されるようになりました-これはjQueryを使わないソリューションです:)


3

ES2020の導入によりglobalThis次のようなプロパティを使用できます。

画面サイズの場合:

globalThis.screen.availWidth 
globalThis.screen.availHeight

ウィンドウサイズについて

globalThis.outerWidth
globalThis.outerHeight

オフセットの場合:

globalThis.pageXOffset
globalThis.pageYOffset

...&など。

alert("Screen Width: "+ globalThis.screen.availWidth +"\nScreen Height: "+ globalThis.screen.availHeight)


2

画面を使用できますこれを取得オブジェクトを。

以下は、返されるものの例です。

Screen {
    availWidth: 1920,
    availHeight: 1040,
    width: 1920,
    height: 1080,
    colorDepth: 24,
    pixelDepth: 24,
    top: 414,
    left: 1920,
    availTop: 414,
    availLeft: 1920
}

screenWidth変数を取得するにはscreen.width、と同じように使用し、と同じscreenHeightように使用しますscreen.height

ウィンドウの幅と高さを取得するにはscreen.availWidthscreen.availHeightそれぞれまたはになります。

以下のためにpageXpageY、変数、使用window.screenX or Y。これは非常に左/上から左/上からの画面です。したがって、幅のある2つの画面がある場合1920、右側の画面の左側から500pxのウィンドウのX値は2420(1920 + 500)になります。screen.width/heightただし、現在の画面の幅または高さを表示します。

ページの幅と高さを取得するには、jQuery $(window).height()または$(window).width()

再びjQueryを使用$("html").offset().top$("html").offset().leftて、pageXandとのpageY値を使用します。


screenX / Yは、一番左の画面/一番上の画面ではなく、主画面を基準にしています。そのため、現在メイン画面の左側の画面にいる場合、値は負になります。
トム

0

これが私の解決策です!

// innerWidth
const screen_viewport_inner = () => {
    let w = window,
        i = `inner`;
    if (!(`innerWidth` in window)) {
        i = `client`;
        w = document.documentElement || document.body;
    }
    return {
        width: w[`${i}Width`],
        height: w[`${i}Height`]
    }
};


// outerWidth
const screen_viewport_outer = () => {
    let w = window,
        o = `outer`;
    if (!(`outerWidth` in window)) {
        o = `client`;
        w = document.documentElement || document.body;
    }
    return {
        width: w[`${o}Width`],
        height: w[`${o}Height`]
    }
};

// style
const console_color = `
    color: rgba(0,255,0,0.7);
    font-size: 1.5rem;
    border: 1px solid red;
`;



// testing
const test = () => {
    let i_obj = screen_viewport_inner();
    console.log(`%c screen_viewport_inner = \n`, console_color, JSON.stringify(i_obj, null, 4));
    let o_obj = screen_viewport_outer();
    console.log(`%c screen_viewport_outer = \n`, console_color, JSON.stringify(o_obj, null, 4));
};

// IIFE
(() => {
    test();
})();



0

これは、React JS Projectで画面幅を取得する方法です。

幅が1680の場合は570を返し、それ以外の場合は200を返します

var screenWidth = window.screen.availWidth;

<Label style={{ width: screenWidth == "1680" ? 570 : 200, color: "transparent" }}>a  </Label>

Screen.availWidth

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.