Android 默认浏览器为响应式设计创建水平滚动条

Posted

技术标签:

【中文标题】Android 默认浏览器为响应式设计创建水平滚动条【英文标题】:Android Default Browser creates Horizontal Scroll Bar for Responsive Design 【发布时间】:2017-08-08 18:01:29 【问题描述】:

Android 的默认浏览器,更宽地显示我的站点并创建水平滚动条。

这里是问题的截图:(Chrome vs 默认浏览器)

我的视口是:

<meta name="viewport" content="width=device-width, initial-scale=1">

我该怎么办?

【问题讨论】:

您的网站是用 html5 和 css3 构建的,还是在 js 中使用 es6 来改变或创建您的设计?你能分享你的HTML代码吗 @AnkitArora 该网站是 wordpress 4.7.4,我所做的一切都是更新当前的 css 和 php 文件。由于html是用核心wordpress的php文件创建的,我不认为我可以共享html代码,但我相信可以从页面源代码中检查css问题,使用开发人员工具。我很困惑为什么你需要 html 代码。 抱歉,一开始没有看到问题中的 URL,HTML5 和 CSS3 中的一些元素尚未被 android 默认浏览器支持,所以我想检查一下您是否使用过其中一个这些元素与否。您可以使用caniuse.com/# 来验证是否支持您在网站上使用的元素 【参考方案1】:

我没有 Andriod 浏览器来测试这个,但你可以尝试为搜索 div 设置一个最大宽度,例如

#search-bar-mobile 
    max-width: 70%;

这很容易做到,如果它有助于您调整尺寸。

【讨论】:

【参考方案2】:

您要做的第一件事是在 Chrome 中设置移动调试并连接您的 Android 设备。谷歌在这里提供了详细的说明: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

连接设备后,打开您的开发工具到“元素”选项卡。滚动到演示文稿标记所在的“正文”标签区域。现在只需右键单击 devtools DOM 中的元素并删除它们,直到滚动条消失。最好从“header-area”或“main-content-area”等主要元素开始。当滚动条消失时,您知道您删除的元素或该元素的子元素破坏了您的布局。

刷新页面并删除导致滚动条的元素。如果删除所有子元素后栏没有消失,您就知道问题出在父元素上。

一旦您知道哪些元素(或哪些元素)破坏了布局,您就可以在您的开发工具中调整 CSS,然后相应地更改您的源代码。

【讨论】:

您好,该网站在谷歌浏览器上运行良好,如上图所示。我将如何使用这种方法测试“android 默认浏览器”问题?是不是有什么误会? 设置远程调试后,您可以在 Chrome 浏览器中实时检查 Android 设备上的内容。这使您可以访问通常用于调试网站的所有开发人员工具,但您可以将它们用于您的 Android 设备视口,以跟踪问题元素并进行调整。这是另一个有类似问题的帖子。我刚刚发现另一个可能更清楚的帖子:***.com/questions/2314886/…【参考方案3】:

不幸的是,Lollipop 之前的设备上的 Android 默认浏览器不支持 CSS3 的 calc() 功能。假设您的搜索输入具有 .search-box 类并考虑屏幕截图,您的 CSS 可能包含类似于以下内容:

.search-box 
  ...
  width: calc(100% - 100px);
  ...

...100px 是搜索按钮的宽度。

为了解决这个问题,您需要在上面的声明前面加上一个 Android 浏览器可以理解并可以应用的前缀:

.search-box 
  ...
  width: 75%;
  width: calc(100% - 100px);
  ...

现在,Android 浏览器会将width: 75% 应用到.search-box 并跳过它不支持的calc(),按钮将显示在剩余的25% 中。当然,您可以将其设置为任何其他方便的值,而不是75%。请记住,Lollipop 之前的设备上最广泛的屏幕宽度是 320px

注意:您的错误calc() 实际上可能适用于min-width,而不是width。由于您没有提供任何代码,因此这是我能提供的尽可能多的帮助。但我觉得这已经足够了。 calc()问题在支持pre-Lollipop默认浏览器时很常见。


从你在cmets中链接的视频来看,你的问题似乎与上述无关,而是.content_product_title_and_price_section的内容溢出造成的。

为了修复它,你可以添加

@media(max-width: 379px)
  .content_product_title_and_price_section h3 
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
  

...但这会隐藏较长产品标题的多余文本。如果您不希望这种情况发生,窄手机的另一种布局是将flex-wrap:wrap 添加到.content_product_title_and_price_section,也在379px 下。为此,您可能需要稍微调整图像标题的布局。这可能有效:

@media(max-width: 379px)
  .content_product_title_and_price_section 
     flex-direction: column;
     align-items: center;
     text-align: center;
  
  .content_product_title_and_price_section h3 
     margin-bottom: -2rem;
  

我添加了margin-bottom,因此您不必从标记中手动删除&amp;nbsp;,但我必须指出,它们本来就不应该存在。您可以轻松地在价格 &lt;span&gt;s 中添加一个简单的 padding-left。

【讨论】:

您好 Andrei,感谢您的详细回答,但即使我从网站上删除了搜索栏,同样的行为仍在继续。我认为这与搜索栏和 calc() 函数无关。 @HOY 您所描述的问题无法在您链接的网站上重现。有什么办法可以检查吗?我相信我可以提供帮助。 嗨,Andrei,我使用的是三星 Galaxy s7,我的浏览器是默认浏览器。您可以查看我几分钟前录制的这段视频。 drive.google.com/file/d/0BwHDkPOX-lRtWUtZNmVleGZYbE0/… @HOY,我已经更新了我的答案。看来您的问题与菜单无关。 :) 第一个不起作用,我不知道为什么。第二个有效,但不完全是我需要的。我正在尝试产生类似于以下网站的影响:www.redbubble.com。【参考方案4】:

您在.content_product_title_and_price_section 上的display: flex; 属性有问题。如果禁用除display: -webkit-box; 之外的所有display 设置,则可以在firefox 中重现确切的行为。我会删除这个旧的-webkit-box 并只使用-webkit-flex,或者尝试在h3 和跨度上使用display: inline-block 达到相同的效果,并将width: 75% 添加到h3 和vertical-align: top 到两者。

【讨论】:

以上是关于Android 默认浏览器为响应式设计创建水平滚动条的主要内容,如果未能解决你的问题,请参考以下文章

使用 flickity 和 bootstrap 4 进行水平卡片滚动(响应式)

Android 浏览器忽略响应式网页设计

响应式设计不适用于 wordpress

《响应式Web设计实践》学习笔记

Wordpress 响应式设计(高度问题)

Bootstrap 中的水平和垂直可滚动表格