I am really confused by the different properties that exist in JavaScript for getting the dimensions of a document and how to get those numbers. Can someone recommend a good place to start to understand how I would get the size of the document and position stuff correctly?
Confused by document dimensions in JavaScript
3.8k Views Asked by user1019031 At
1
There are 1 best solutions below
Related Questions in JAVASCRIPT
- ASP.MVC Castle Nlog Count does not reset
- Castle Windsor registering components that match the same services
- Resolving Interface with generic type constraint with Castle Windsor
- Passing Additional Parameters in Windsor castle
- Use a registered component in the Castle container to supply a dependency for another component
- Which Namespace holds Component.For in Castle Windsor?
- Castle Windsor & Command Pattern
- Resolving generics with Castle Windsor in WCF
- Using same parameter value in a dependency with Windsor
- Abstracting away any configuration using IConfigurationStore and IWindsorInstaller
Related Questions in DOCUMENT
- ASP.MVC Castle Nlog Count does not reset
- Castle Windsor registering components that match the same services
- Resolving Interface with generic type constraint with Castle Windsor
- Passing Additional Parameters in Windsor castle
- Use a registered component in the Castle container to supply a dependency for another component
- Which Namespace holds Component.For in Castle Windsor?
- Castle Windsor & Command Pattern
- Resolving generics with Castle Windsor in WCF
- Using same parameter value in a dependency with Windsor
- Abstracting away any configuration using IConfigurationStore and IWindsorInstaller
Related Questions in DIMENSIONS
- ASP.MVC Castle Nlog Count does not reset
- Castle Windsor registering components that match the same services
- Resolving Interface with generic type constraint with Castle Windsor
- Passing Additional Parameters in Windsor castle
- Use a registered component in the Castle container to supply a dependency for another component
- Which Namespace holds Component.For in Castle Windsor?
- Castle Windsor & Command Pattern
- Resolving generics with Castle Windsor in WCF
- Using same parameter value in a dependency with Windsor
- Abstracting away any configuration using IConfigurationStore and IWindsorInstaller
Related Questions in SCROLLBARS
- ASP.MVC Castle Nlog Count does not reset
- Castle Windsor registering components that match the same services
- Resolving Interface with generic type constraint with Castle Windsor
- Passing Additional Parameters in Windsor castle
- Use a registered component in the Castle container to supply a dependency for another component
- Which Namespace holds Component.For in Castle Windsor?
- Castle Windsor & Command Pattern
- Resolving generics with Castle Windsor in WCF
- Using same parameter value in a dependency with Windsor
- Abstracting away any configuration using IConfigurationStore and IWindsorInstaller
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I'll try to answer as simply as I can.
The Document and Viewport
In terms of geometry, there are two sets of dimensions to be aware of; the document dimensions, which reflect the entire size of the loaded page, including the content beyond the bottom of the window and the viewport dimensions, which reflect the size of the visible part of the document that is immediately displayed in the window.
When you scroll down, the viewport moves down over the document by a certain number of pixels. In other words, the viewport is the actual browser window "border" (the toolbars, menus, tabs, and so on).
The confusion comes from the fact that depending on the browser and mode, different properties are used to get the dimensions of a document and viewport, and they return different results depending on scrollbars. But we'll come back to this.
Dimensions Overview
There are a number of properties available to you from the get-go in javascript which give you different dimensions.
Screen resolution:
window.screen.width -Height
Available screen space (same as monitor resolution) minus docks, toolbars and other UI elements:
window.screen.availWidth -Height
.Document dimensions:
document.documentElement.offsetWidth -Height
Note: These numbers do not include the scrollbars.Viewport dimensions:
window.innerWidth -Height
These numbers include the scrollbars.
This is not available in IE 8- and IE9, so if IE, test for the
document.compatMode === "CSS1Compat"
and if true, usedocument.documentElement.clientWidth -Height
, and for quirks mode usedocument.body.clientWidth -Height
.A note about document dimensions
As per above,
document.documentElement.offsetWidth/Height
provides you with the actual size of the document. One caveat to this is that scrollbars work differently between browsers. For example, IE9 will always display a vertical scrollbar even if the document height is less than the viewport height. Safari/Chrome doesn't have scrollbars on OS X Lion. Chrome on PC will not display vertical scrollbars unless it needs to.So you may bump into inconsistencies and the Scrollbar shifts content problem. Imagine you have an absolutely positioned and centred element. Because CSS calculates the "centre" relative to the document dimensions and not the viewport dimensions, when say, Google adds the scrollbars, your content may "jump" a bit to the left as the "document centre" changes. So you may need to write JS to compensate for this effect if it bothers you, or maybe someone here can write a quick JS function to calculate document dimensions with scrollbars included.
Scrollbar Position and Dimensions
While some methods in JavaScript work with document coordinates, others work with viewport coordinates, and often this is not what you want. For example, if you have an element's top edge at 20px in document coordinates, and you scroll the page down by 20px, the top edge of that element will be at 0px relative to the top viewport coordinate. So to convert between the two systems, you first need to know by how many pixels a user has scrolled the document, and then add that number to the viewport to compensate (look at example below).
I also found these helpful:
http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
http://www.quirksmode.org/mobile/viewports.html
And here's a quick cross-browser module I mucked up to help you:
You can for example do
console.log(dimensions.viewportWidth())
to get the viewport width.Hope this helps you :)