如何在没有(减号)滚动条的情况下获得屏幕宽度?

fre*_*ent 93 jquery cross-browser width

我有一个元素,需要它的宽度没有(!)垂直滚动条.

Firebug告诉我身体宽度是1280px.

这些都可以在Firefox中正常工作:

console.log($('.element').outerWidth() );
console.log($('.element').outerWidth(true) );

$detour = $('.child-of-element').offsetParent();
console.log( $detour.innerWidth() );
Run Code Online (Sandbox Code Playgroud)

他们都返回1263px,这是我正在寻找的价值.

但是所有其他浏览器都给我1280px.

是否有跨浏览器的方式来获得没有(!)垂直滚动条的全屏宽度?

Rok*_*jan 154

.prop("clientWidth").prop("scrollWidth")

var actualInnerWidth = $("body").prop("clientWidth"); // El. width minus scrollbar width
var actualInnerWidth = $("body").prop("scrollWidth"); // El. width minus scrollbar width
Run Code Online (Sandbox Code Playgroud)

JavaScript中:

var actualInnerWidth = document.body.clientWidth;     // El. width minus scrollbar width
var actualInnerWidth = document.body.scrollWidth;     // El. width minus scrollbar width
Run Code Online (Sandbox Code Playgroud)

PS:请注意,为了scrollWidth可靠地使用,您的元素不应水平溢出

jsBin演示


你也可以使用,.innerWidth()但这只适用于body元素

var innerWidth = $('body').innerWidth(); // Width PX minus scrollbar 
Run Code Online (Sandbox Code Playgroud)

  • 看来这不再适用于Chrome,报告的宽度实际上比窗口本身大20px,到目前为止我已经尝试过无数宽度测量. (4认同)
  • 难以置信...... $('body').innerWidth()有效:-)谢谢! (3认同)
  • 如果由于某种原因你改变了body元素的宽度,这将不起作用. (2认同)
  • @Sammaye导致您忘记(为什么?)设置margin:0;到BODY或使用通用的CSS重置代码。http://jsbin.com/homixuqi/2/edit。**因此,代码仍然可以正常工作**。 (2认同)
  • @NamanGoel作为网站设计师的工作是防止车身宽度混乱。这不是一项艰巨的任务。另外,关于高度,这取决于您的“身体”是否溢出。如果溢出而不是限制它。 (2认同)
  • @ RokoC.Buljan我在这里并不反对你.当然没有好的网页设计师/开发人员应该弄乱身体宽度和东西.我的观点是使用最可靠的API.一些JavaScript开发人员可能正在构建插件等,并且可能无法控制整个页面. (2认同)

Jos*_*ick 32

您只需编写以下内容即可使用vanilla javascript:

var width = el.clientWidth;
Run Code Online (Sandbox Code Playgroud)

您还可以使用它来获取文档的宽度,如下所示:

var docWidth = document.documentElement.clientWidth || document.body.clientWidth;
Run Code Online (Sandbox Code Playgroud)

资料来源:MDN

您还可以获得整个窗口的宽度,包括滚动条,如下所示:

var fullWidth = window.innerWidth;
Run Code Online (Sandbox Code Playgroud)

但是,并非所有浏览器都支持此功能,因此作为后备,您可能需要使用docWidth上述内容,并添加滚动条宽度.

资料来源:MDN

  • `document.documentElement.clientWidth`对我帮助最大,因为它也适用于高度(如果正文没有填充页面,`innerHeight`可以更小等)并获得没有滚动条的值. (5认同)

Kon*_*nev 12

以下是一些假设$elementjQuery元素的示例:

// Element width including overflow (scrollbar)
$element[0].offsetWidth; // 1280 in your case

// Element width excluding overflow (scrollbar)
$element[0].clientWidth; // 1280 - scrollbarWidth

// Scrollbar width
$element[0].offsetWidth - $element[0].clientWidth; // 0 if no scrollbar
Run Code Online (Sandbox Code Playgroud)


HQt*_*izy 8

试试这个 :

$('body, html').css('overflow', 'hidden');
var screenWidth1 = $(window).width();
$('body, html').css('overflow', 'visible');
var screenWidth2 = $(window).width();
alert(screenWidth1); // Gives the screenwith without scrollbar
alert(screenWidth2); // Gives the screenwith including scrollbar
Run Code Online (Sandbox Code Playgroud)

使用此代码,您可以使用和不使用滚动条获得屏幕宽度.在这里,我已经改变了溢出值,body并在有和没有滚动条的情况下获得宽度.


Nam*_*oel 6

在没有滚动条的情况下获得正确宽度和高度的最安全地方是来自HTML元素。尝试这个:

var width = document.documentElement.clientWidth
var height = document.documentElement.clientHeight
Run Code Online (Sandbox Code Playgroud)

浏览器支持相当不错,IE 9及更高版本对此提供了支持。对于OLD IE,请使用此处提到的众多后备版本之一。