clientHeight/clientWidth returning different values on different browsers

前端 未结 9 1207
有刺的猬
有刺的猬 2020-11-27 19:14

Properties document.body.clientHeight and document.body.clientWidth return different values on IE7, IE8 and Firefox:

IE 8:



        
相关标签:
9条回答
  • 2020-11-27 19:34

    This has to do with the browser's box model. Use something like jQuery or another JavaScript abstraction library to normalize the DOM model.

    0 讨论(0)
  • 2020-11-27 19:34

    Some more info for Browser window : http://www.w3schools.com/js/js_window.asp?output=print

    0 讨论(0)
  • 2020-11-27 19:35

    Paul A is right about why the discrepancy exists but the solution offered by Ngm is wrong (in the sense of JQuery).

    The equivalent of clientHeight and clientWidth in jquery (1.3) is

    $(window).width(), $(window).height()
    
    0 讨论(0)
  • 2020-11-27 19:39

    Element.clientWidth & Element.clientHeight return the height/width of that element's content in addition any applicable padding.

    The jQuery implementation of these are: $(target).outerWidth() & $(target).outerHeight()

    .clientWidth & .clientHeight are included in the CSSOM View Module specification which is currently in the working draft stage. While modern browsers have a consistent implementation of this specification, to insure consistent performance across legacy platforms, the jQuery implementation should still be used.

    Additional information:

    • https://developer.mozilla[dot]org/en-US/docs/Web/API/Element.clientWidth
    • https://developer.mozilla[dot]org/en-US/docs/Web/API/Element.clientHeight
    0 讨论(0)
  • 2020-11-27 19:40

    The body element takes the available width, which is usually your browser viewport. As such, it will be different dimensions cross browser due to browser chrome borders, scrollbars, vertical space being take up by menus and whatnot...

    The fact that the heights also vary, also tells me you set the body/html height to 100% through css since the height is usually dependant on elements inside the body..

    Unless you set the width of the body element to a fixed value through css or it's style property, it's dimensions will as a rule, always vary cross browsers/versions and perhaps even depending on plugins you installed for the browser. Constant values in such a case is more an exception to the rule...

    When you invoke .clientWidth on other elements that do not take the automatic width of the browser viewport, it will always return the elements 'width' + 'padding'. So a div with width 200 and a padding of 20 will have clientWidth = 240 (20 padding left and right).

    The main reason however, why one would invoke clientWidth, is exactly due to possible expected discrepancies in results. If you know you will get a constant width and the value is known, then invoking clientWidth is redundant...

    0 讨论(0)
  • 2020-11-27 19:40

    The equivalent of offsetHeight and offsetWidth in jQuery is $(window).width(), $(window).height() It's not the clientHeight and clientWidth

    0 讨论(0)
提交回复
热议问题