【问题标题】:I neeHelp at making a responsive menu我需要帮助制作响应式菜单
【发布时间】:2021-06-26 18:44:39
【问题描述】:

所以我想做这个响应式菜单。在桌面上看起来像这样:

在移动设备上,它应该看起来堆叠在它下面的所有东西上,而不是把它往下推。所以不是这样的:

(在按下按钮之前)

(按下按钮后)

你可以看到下面的幻灯片被按下了,一般按钮上的菜单明显错位。

请帮我解决这个问题,我是一个糟糕的后端开发人员。 这是我的代码:

function myFunction() {
    var x = document.getElementById("menu");
    if (x.className === "menu") {
        x.className += " responsive";
    } else {
        x.className = "menu";
    }
}
.menu .icon {
    display: none;
}

@media screen and (max-width: 965px) {
    .menu a {display: none;}
    .menu a.icon {
      float: right;
      display: block;
    }
  }
  
  /* The "responsive" class is added to the menu with JavaScript when the user clicks on the icon */
@media screen and (max-width: 965px) {
    .menu.responsive {
        background-color: white;
        position: relative;
    }
    .menu.responsive a.icon {
        position: absolute;
        right: 0;
        top: 0;
        }
    .menu.responsive a {
        float: none;
        display: block;
        text-align: left
    }
}
<div class="mainheader">
                    <div class="logo">
                        <img src="../bilder/Logo_Koeln_Fliesen_Esch.jpg">
                    </div>
                    <div id="menu" class="menu">
                        <a href="start.html">Unternehmen</a>
                        <a href="start.html">Leistungen</a>
                        <a href="referenzen.html">Referenzen</a>
                        <a href="start.html">Kontakt</a>
                        <a href="javascript:void(0);" class="icon" onclick="myFunction()">
                            <img class="bigicon"  src="../bilder/menu.png">
                        </a>    
                    </div>
                </div>

【问题讨论】:

  • 尝试将 div 栏(白色栏)的位置设置为绝对位置。这样,杠铃就不会伸展。另外,将打开的汉堡菜单的 z-index 设置得更高,这样它就会出现在三行之前。
  • 将菜单位置设置为绝对将解决拉伸问题,但不能解决按钮重叠问题。 z-index 不是一个选项,因为该按钮应该是可访问的。 *我确实设置了绝对和正确 0

标签: javascript html css responsive-design


【解决方案1】:

function myFunction() {
    var x = document.getElementById("menu");
    if (x.className === "menu") {
        x.className += " responsive";
    } else {
        x.className = "menu";
    }
}
.menu .icon {
    display: none;
}

@media screen and (max-width: 965px) {
    .menu a {display: none;}
    .menu a.icon {
      float: right;
      display: block;
    }
  }
  
  /* The "responsive" class is added to the menu with JavaScript when the user clicks on the icon */
@media screen and (max-width: 965px) {
    .menu.responsive {
        background-color: white;
        position: relative;
    }
 
    .menu.responsive a {
        float: none;
        display: block;
        text-align: right
    }
}
                       <img src="../bilder/Logo_Koeln_Fliesen_Esch.jpg">
                    </div>
                    <div id="menu" class="menu">
                                            <a href="javascript:void(0);" class="icon" onclick="myFunction()">  <img class="bigicon"  src="../bilder/menu.png"> </a>
                                            <span>
                        <a href="start.html">Unternehmen</a>
                        <a href="start.html">Leistungen</a>
                        <a href="referenzen.html">Referenzen</a>
                        <a href="start.html">Kontakt</a>
</span>
                          
                          
                    </div>
                </div>

无需查看整个页面代码,这是您需要做的事情,或者我在继续之前总是会检查的事情。

  1. 为了让 css 正常工作,在 head &lt;meta name="viewport" content="minimal-ui, height=device-height, width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"&gt; 中添加这个元标记
  2. 其次,菜单应该在交互和显示层上堆叠得更高,这样它就不会与页面上的其他元素混淆。这样做的一种方法是将标签放在页面最后的所有内容的底部(记住在菜单 div 上使用 css 绝对定位)或像 +10000 那样放大它。
  3. 请尽量不要在用户点击后添加响应性,因为计算值与初始值发生冲突会在未来产生大量问题。尽可能把事情留给css。 w3school 的代码很好,请按照说明进行操作。
  4. 针对定位问题计算图片的高度;
  5. 实际上是您的图标被定位,其他所有东西都相对于它应该在的位置。因此,将您的图标作为第一项移动,然后将其下方的所有其他锚标记移动。这应该可以解决您的定位问题。

【讨论】:

  • 当您过多地使用定位时,会产生意想不到的结果。正如我所说,我所做的只是将您的图标链接移至顶部并将其他所有内容封装在另一个跨度结果中。 PS 我花了数周时间试图完善你想要推进的 w3Schools 示例。
  • css 正常工作,在这个例子中添加了元标记。它与定位和东西有关。 “absolut”至少解决了其中一个问题。明天我会尝试其他一些建议。感谢您的回答
【解决方案2】:

因此,解决问题的方法是将响应式菜单类设置为绝对,您还必须使用 right: 0; 使其保持原位。 之后我发现我可以将菜单链接向下移动,因为它们现在也是绝对的,以防止它们与按钮重叠。

感谢大家的努力;)

【讨论】:

    【解决方案3】:

    将z-index 属性添加到 .menu.responsive 类。

    【讨论】:

    • 不会解决基本问题。通过仅添加 z-index,导航栏仍将显示在菜单按钮上方,因此菜单将无法关闭。因为你无法再按到按钮了。
    • tacoshy 在这个问题上是正确的,但仍然感谢答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2021-03-30
    • 2018-11-05
    • 2020-06-10
    相关资源
    最近更新 更多