Header 拒绝在移动视图中显示

Header refuses to show up on mobile view

我花了一个星期的时间试图解决这个问题。我正在构建一个 django 网站,当我在移动设备视图上查看该网站时,我有一个导航菜单始终隐藏在某些元素后面。在 Chrome Dev Tools 上,它看起来非常好,但在我的 phone 上,它完全消失了。

Chrome 开发工具与 Phone 的示例:

我解决这个问题的第一步是查看 z-index。 None 我试过的索引有效,而且我确保搜索 z-index 也不能在 Internet 上工作的解决方案,例如具有必要的先决条件。由于我的导航菜单在我的 base.html 模板文件中,我什至将 header 移到了 body 元素的最底部(它有一个固定的位置),这样 {%block content%} 始终高于 header。那也没用。

所以我尝试在导航栏打开时将 所有 元素移动到左侧。事情是这样的。

如果我尝试在 chrome 开发工具上通过右键单击 应该 为空 space 的空白 space 进行检查,我得到以下内容:

...意味着唯一存在的是 HTML 文件本身。我完全不知所措。我的 HTML 元素也没有背景。

我感觉这是一个与 Django 相关的问题,可能与我的导航位于我的 base.html 模板中这一事实有关,该模板在我几乎所有其他页面中都有扩展。我已经为我建立的其他网站使用了完全相同的导航格式,它们都运行良好,所以我怀疑问题出在导航 css 上。我还有其他一些针对特定页面的导航菜单,它们都可以正常工作,我假设这是因为它们的导航菜单位于 not base.html 的模板中,即它没有扩展。我很绝望——有没有人知道为什么会这样?非常感谢。

编辑: 打开“查看源代码”选项卡,一切似乎都正常。我浏览了整个文档,但这里只是导航部分的概述 html 以防相关:

<header>
   <a href="/home/"><img></a>
   <nav class="nav">
       <ul class="styled-list">
           <li><a href="/home/"><img>Home</a></li>
           <li><a href="/browse/"><img>Browse</a></li>
           <li><a href="/messages"><img>Inbox </a></li>
           <li><a href="/activity"><img>Activity</a></li>
           <li class="dropdown">
              <button class="dropbtn">
                  <a href="/users/profile/4/"><img>e</a>
                  <i class="fa fa-caret-down"></i>
              </button>
              <div class="dropdown-content">
                  <a href="/users/profile/4/">Profile</a>
                  <a href="/users/logout/">Log Out</a>
              </div>
           </li>
        </ul>
      </nav>
      <div class="nav-toggle">
          <div class="hamburger"></div>
      </div>
</header>

编辑 2:我尝试将 HTML 从 base.html 中取出并直接放在其中一个页面中,因此它没有被扩展,即使 base.html 没有扩展,问题仍然存在。所以这可能不是 Django 的问题,但我仍然对可能阻碍视图的东西感到困惑。

编辑 3:如果有帮助,我实际上可以在移动设备上访问导航元素,就像我可以单击链接并转到那些页面一样。它只是拒绝出现,仅此而已。这意味着我认为导航已经高于一切,但无论出于何种原因,它的背景和文本看起来都是透明的,这没有任何意义。

编辑 4:刚刚意识到移动视图在三星上运行良好,但在苹果上出现故障。现在我只是绝望地迷路了。

编辑 5:在 jsfiddle 上制作了一个最小的可重现示例,https://jsfiddle.net/aqxr9duy/2/。它在笔记本电脑上运行良好,但如果您在 iPhone 上查看它(jsfiddle 并未针对移动视图进行完全优化,但它仍然可以在一定程度上查看),导航不会像在笔记本电脑上那样正确显示查看。

问题是 header 的 css 您设置了 position: fixed; height: 4em; overflow: hidden;。您的 nav 也有位置 fixed(如果屏幕宽度 < 950px):

<header>
   <nav>
     Content that's higher than 4em
   </nav>
</header>

header {
  position: fixed;
  top: 0;
  left: 0;
  height: 4em;
  overflow: hidden;
}

nav {
  position: fixed;
  z-index: 1000;
}

所以 Safari 将 nav 保留在 header 中,因为它们 都有固定的位置。这意味着它尊重 overflow: hidden 指令。

将您的 header css 更改为 position: absolute。这样 nav 在固定位置时移动到 header 之外。

header {
  position: absolute;
  ...
}

虽然这确实消除了导航栏的粘性,但它会影响您网站的行为。让导航栏在小屏幕上滚动并不是一件坏事,所以你可以只在小屏幕上改变它。

或者,只需删除 overflow: hidden。我看不出它有什么用:

header {
    position: fixed;
    ...
    # overflow: hidden; (remove this)
}

显然,fixed in fixed 被 chromium 和 webkit 解释不同。看起来 Chromium 正在做正确的事情并将两个盒子解耦,尽管官方规范似乎在这里留下了一些解释空间。