为啥没有滚动条我无法获得容器宽度?

Posted

技术标签:

【中文标题】为啥没有滚动条我无法获得容器宽度?【英文标题】:Why can't I get the container width without the scrollbar?为什么没有滚动条我无法获得容器宽度? 【发布时间】:2018-10-15 05:24:47 【问题描述】:

我有一个包含一些图像的容器(砌体网格)。我有一个计算容器宽度的函数和一个计算每个图像宽度的函数。但是获取容器宽度的函数并没有按预期工作,因为宽度包含滚动条。因此图像宽度的计算也是不正确的。

//Function to calculate the width of the container
 getContainerWidth() 
    const postContainer = document.getElementsByClassName(
      'container'
    );
    if (postContainer.length > 0) 
      let containerWidth = postContainer[0].clientWidth;
      containerWidth = `$containerWidthpx`;

      this.setState(
        containerWidth: containerWidth,
      );
    
  

我已经尝试过各种功能(offsetWidth、clientWidth、scrollWidth...),但没有一个对我有用。我还尝试获取滚动条的宽度并将其从容器宽度中减去。这行得通,但我需要一个适用于不同浏览器的解决方案。

如果浏览器宽度例如为 1920 像素。那么container-width也是1920px,但应该是1905px(1920-滚动条)。

【问题讨论】:

在你的容器里面放一个容器,然后把图片放在里面的容器里面,那有什么作用呢?它是否也包括栏的宽度? 我外面已经有一个容器了。我有一个包含页眉、页脚和包含图像的容器的容器。外部容器和带有图像的容器都包括滚动条 如果隐藏滚动条是一个选项使用::-webkit-scrollbar width: 0px; 然后计算宽度 【参考方案1】:

获取ClientWidth

对于没有 CSS 或内联布局框的元素,Element.clientWidth 属性为零,否则它是元素的内部宽度(以像素为单位)。它包括填充,但不包括垂直滚动条(如果存在,如果呈现)、边框或边距。

例子

var width = element.clientWidth;

【讨论】:

你使用px而不是'100%之类的东西有什么原因吗?也许这是一种更简单的方法。 我需要以px为单位的容器,因为我用它来计算图像宽度。我减去项目之间的差值,然后将结果除以列数。如果我有例如 4 列和 1920 像素的容器宽度。然后我减去 3x20px(项目之间的差距)。然后我将结果(1860px)除以列数(4)。结果是每张图片的宽度(465px)。

以上是关于为啥没有滚动条我无法获得容器宽度?的主要内容,如果未能解决你的问题,请参考以下文章

滚动条挤占内容宽度,影响布局

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

与容器相比,如何使滚动条的宽度/长度更小

使用溢出属性更改特定容器的滚动条宽度、颜色和高度

如何让bootstrap表格自动出现水平滚动条

如何在音乐播放器应用程序 ios / 中实现字母滚动条