0

我在 Chrome 中遇到了这个奇怪的媒体查询问题,这个问题相当模糊,但真的让我很烦,所以我希望在这里找到解决方案,或者至少确认我不会发疯......

基本上,似乎当媒体查询启动时,页面将从内容滚动离开屏幕的状态(因此您有 y 轴滚动条)变为内容现在适合屏幕的状态(因此不应出现 y 轴滚动条)似乎有一小段时间页面布局呈现为好像滚动条在那里,即使它不存在(因此会出现试图填满整个屏幕的东西这段时间不要)

我已经建立了一个简单的页面来展示这个问题。它包含两个浮动 div,当媒体查询以小于 500px 的宽度启动时,它们被设置为不再浮动并具有更大的宽度——此时标题栏也会从蓝色变为红色(为了清楚起见)。

http://appasylum.net/test/mediaQueryChromeScrollBarIssue/

  <!DOCTYPE html>
  <html>
  <head>

      <title>Media Query Chrome Scrollbar issue</title> 
      <style type="text/css">

      html,
      body 
      {
         margin:0;
         padding:0;
      }

      .header
      {
        background-color: blue;
        padding: 10px;
        color: white;
        font-family: Helvetica, Arial, sans-serif;
      }

      .content
      {                
        background-color: #f5f5f5;
        border: 1px solid #e3e3e3;              
        float: left;
        width: 40%; 
        margin: 20px; 
      }

      @media (max-width: 500px) {

        .header
        {
          background-color: red;
        }

          .content
          {
            float:none;
            width: 90%;
          }
      }
      </style>

  </head>

  <body>

  <div class="header">
    Header
  </div>

  <div class="content"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec purus ut quam vestibulum porta sed ultrices velit. Suspendisse dapibus justo id ligula iaculis cursus. Fusce non diam ut ante porta lacinia id vel nisl. Mauris laoreet orci vel nulla imperdiet ac rhoncus diam accumsan. Quisque sed mauris mi, sollicitudin commodo ligula. Etiam arcu arcu, vehicula ut porttitor id, viverra non augue. Mauris laoreet fringilla tempus. Praesent elit elit, molestie eget bibendum vitae, fringilla nec turpis. Suspendisse eget ipsum sed sem egestas ultricies. Cras eleifend imperdiet magna nec elementum. Etiam arcu arcu, vehicula ut porttitor id, viverra non augue. Mauris laoreet fringilla tempus. Praesent elit elit, molestie eget bibendum vitae, fringilla nec turpis. Suspendisse eget ipsum sed sem egestas ultricies. Cras eleifend imperdiet magna nec elementum.Etiam arcu arcu, vehicula ut porttitor id, viverra non augue. Mauris laoreet fringilla tempus. Praesent elit elit, molestie eget bibendum vitae, fringilla nec turpis. Suspendisse eget ipsum sed sem egestas ultricies. Cras eleifend imperdiet magna nec elementum.
  </div>

  <div class="content"> Aliquam in mauris quis arcu aliquam aliquam eu ut mauris. Quisque ut tortor eu massa scelerisque vehicula. Morbi velit diam, egestas at placerat vel, tincidunt a nulla. Vivamus arcu augue, vulputate at elementum sit amet, adipiscing quis odio. Etiam arcu arcu, vehicula ut porttitor id, viverra non augue. Mauris laoreet fringilla tempus. Praesent elit elit, molestie eget bibendum vitae, fringilla nec turpis. Suspendisse eget ipsum sed sem egestas ultricies. Cras eleifend imperdiet magna nec elementum
  </div>

  </body>
  </html>

要复制在大于 500 像素宽(蓝色标题)的窗口中打开上面的链接,并且高度只能让内容滚动离开页面 - 然后慢慢减小窗口的宽度直到它变成红色(即小于500 像素宽)。假设您的窗口高度导致非浮动 div 不再需要滚动条(反之亦然) - 在红色和蓝色标题之间的过渡点(即媒体查询变为活动状态)您应该注意到很短的时间红色标题没有填满整个视口宽度的时间段。

4

1 回答 1

0

我认为 Chrome 在这里进入了无限循环。在您稍微低于 500 像素后,他删除了垂直滚动条,但在他删除滚动条后,窗口宽度又回到了 500 像素以上,他将 CSS 应用于该宽度,这反过来又需要垂直滚动条,我们又回到了我们开始的地方......所以无限循环。基本上,Chrome 只是通过留下垂直滚动条使用的空间来保护自己免受无限循环。

据我所见,您可以完全删除滚动条,即溢出:隐藏在主体上(但我想这对 99% 的网站没有太大帮助),或者始终使用溢出-y:滚动将其留在主体上。

编辑:也许您可以尝试删除 body 标记上的滚动条,但使用 overflow-y:scroll 将所有内容封装在一个 div 中。尽管 div 和 body 一样宽,但它似乎以这种方式工作,在我的测试中没有故障。这需要将此 div 设置为屏幕的 100% 高度,尽管如此。

于 2013-01-21T22:47:57.487 回答