【问题标题】:White-space: nowrap did not work well, what did i do wrong?空白:nowrap 效果不佳,我做错了什么?
【发布时间】:2019-06-15 19:35:03
【问题描述】:

我制作了一个响应式网页,其中最大宽度为 768 像素(通过媒体查询),主容器内的 div 假设更改为 inline-block,以便当用户单击链接时页面将水平滚动到 div 的 id。该页面设置了溢出:隐藏,因此它仅使用 id/anchor 进行导航。

问题是,当我在移动设备中进行预览时,容器刚刚展开,我可以完全滑动页面。甚至假设在视口中心的菜单按钮也进入了容器的中心。并在其下方留下巨大的空白。但是在桌面浏览器中它做得很好。所以我认为它与 nowrap 函数有关。

它在移动版和桌面版的 Firefox 中都可以使用。它在IE桌面上工作。它不适用于 Chrome 移动设备,但似乎可以在桌面设备中使用。并且在 Safari 移动端失败,尚未在桌面端测试。

我试图删除 white-space: nowrap 函数只是为了发现 div 没有像它假设的那样堆叠 inline-block。我尝试了指定容器的宽度和最小宽度,但没有成功。我试过float:left,位置值和一堆我不记得的东西。没什么变化。

HTML

<div id="container">
  <div id="company" class="company">
    <iframe src="main.html">
    </iframe>
  </div>
  <div id="content" class="content">
    <iframe src="content.html">
    </iframe>
  </div>
  <div id="system" class="system">
    <iframe src="system.html">
    </iframe>
  </div>
</div>

css

body{
  overflow: hidden;
}
#container {
  height: 100vh !important;
  min-height: 100vh !important;
}
#container .company, #container .content, #container .system {
  display: block;
  height: 100vh !important;
  min-height: 100vh !important;
}
@media screen and (max-width:768px) {
  #container {
    display: block;
    white-space: nowrap;
  }
  #container .company, #container .content, #container .system {
  display: inline-block;
  }
}
iframe {
  width: 100vw !important;
  min-width: 100vw !important;
  height: 100vh !important;
  min-height: 100vh !important;
  border: none;
}

我所期望的(Chrome 桌面版) https://kamalmasrun.files.wordpress.com/2019/01/desktop.jpg

但只在移动设备上出现 https://kamalmasrun.files.wordpress.com/2019/01/screenshot_20190122-120510.png

非常感谢您的帮助,我首先感谢大家的帮助 =)。

【问题讨论】:

    标签: mobile browser whitespace nowrap


    【解决方案1】:

    基本上,这里有几个问题:

    1. 设置overflow: hidden 不会阻止移动浏览器滚动(在 Firefox 上可能会,但在 Chrome 或 iOS Safari 上不会)。老实说,在移动设备上阻止滚动是一件很难做到的事情,而且总是有点 hacky,所以我不会那样做。
    2. 要使用带有#content 等的链接实现滚动(或跳跃),必须展开主体,并且浏览器必须查看该元素的位置。扩展正文将导致用户能够向左/向右滚动,正如我之前提到的,这很难阻止。您必须滚动 #container 才能显示新元素。您可以使用 javascript 来做到这一点。

    另外,不要忘记将overflow: hidden 添加到#container(这将适用于移动设备)。

    如果仍有不清楚的地方,请随时在此答案下方的 cmets 中提问 :)

    实现目标的算法思路:

    1. 收听hashchange事件
    2. window.location读取当前哈希
    3. 使用document.querySelector 查找具有给定哈希的元素
    4. 读取元素在容器内的位置
    5. 将容器的scrollLeft属性设置为等于元素的位置

    一些有用的链接可以帮助您入门:

    并更新了 CSS:

    body {
      overflow: hidden;
      margin: 0;
    }
    
    #button {
      position: fixed;
      vertical-align: center;
    }
    
    #button .btn1,
    .btn2,
    .btn3 {
      padding: 10px;
      display: inline-block;
    }
    
    #container .company,
    .content,
    .system {
      display: block;
      height: 100vh;
      min-height: 100vh;
      width: 100vw;
    }
    
    @media screen and (max-width:768px) {
      #container {
        display: flex;
        flex-flow: row nowrap;
      }
      #container .company,
      .content,
      .system {
        display: block;
      }
    }
    
    
    iframe {
      border: none;
      height: 100vh;
      min-height: 100vh;
      width: 100vw;
    }
    

    【讨论】:

    • 嗨,Piotr,感谢您的精心回复,很抱歉回复晚了,最近一直在为我的健康问题而苦苦挣扎。我已经研究了你的建议,如果我知道如何执行它,我可能会从中得到一些想法=D。但是,我会尽力解决这个问题。你是最棒的。再次感谢您 =)。
    • 嗨,Piotr,很抱歉长时间的回复,一直在努力解决这些代码。我自己做不到(对我感到羞耻),所以我一直在上下搜索,直到找到这个if (window.location.href.indexOf(“#anchorname”) != -1) {window.onload = function (event) {window.location.hash = “#anchorname”;};}。它跳到所说的锚点,没有滚动(我此时非常绝望),好吧,它起作用了!但它取消了我在屏幕上的其他 java 功能。我必须删除它并处理其他功能。我发现overflow-x: auto 也很好用,但它似乎不适用于scroll-snap-type
    • 嘿,你能告诉我你的最新代码吗?也许我可以找到一种快速改进它的方法(即添加滚动而不是跳转和一些重构)
    • 嗨 Piotr,经过大量的研发,我成功使用了scroll-snap-type,它不如自动滚动,但现在就可以了。 Firefox mobile 和 Edge 中的问题很少,但我会尝试解决它,稍后将其作为一个小调整。但是,我会更深入地了解您的建议,因为我的主要计划是自动滑动到内容。对于我之前贴的java代码,我没有在css中做任何改动,只是简单的将代码粘贴到我的java sn-p中...
    • ...但这是我的网站的链接e-content,如果您希望看到并了解我在移动设备中所面临的情况。好吧,老实说,我已经崩溃了~。代码主要是 @media screen and (max-width:768px) 的 css 样式,仅此而已。 &lt;style&gt; 以外的所有东西都是 Muse 的。
    【解决方案2】:

    将最小/最大宽度设置为#container 可能会解决问题。

    #container {
        min-width: 100vw;
        max-width: 100vw;
    }
    

    另外,我建议在这里使用 flex,因为它很适合并且更现代。

    【讨论】:

    • 感谢您的快速答复。不幸的是,它也没有奏效。但我会按照你的建议尝试 flex,稍后我会发布更新。非常感谢您的帮助 =)。
    • 更新:flex 也不起作用。我用剪辑试试运气:矩形,结果相同(只是更奇怪)。使菜单居中到视口和元以禁用捏合和缩放功能的唯一原因是当我将溢出设置为隐藏在容器中时。缺点是,主播不工作。该页面不会滑到下一页。我很迷茫,没有动力='(。
    • 你能用这个例子创建一些 jsfiddle 吗?然后我就可以在那里尝试解决它
    • 嗨 Piotr,很抱歉回复晚了,一直在为 jsfiddle =D 苦苦挣扎。这是我能想到的最好的,因为我一直在用缪斯开发这个网站,所以输入代码对我来说是一场噩梦。但是,我很高兴能学到新的东西。这是链接link。然而,它并没有滑动到 div id 而是跳转,我可以看到 flex: nowrap 不包含 inline-block ......嗯......当我缩小浏览器时内联。我应该让你看看这个更可行,但我不知道我在做什么,我很抱歉。
    • 我已经深入研究了这个问题。我现在的答案太长,无法在此处作为评论发布,因此请查看我的新答案。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2013-05-11
    • 2012-05-06
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多