我一直试图让这个导航栏在移动设备上可用,我try 了多种方法,使用@media或汉堡包方法观看YouTube,但似乎没有一个有效,除非我重写html以匹配他们使用它的方式.

这是我的原始代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Waverly Farm: Home</title>
        <link href="style.css" rel="stylesheet"/>
    </head>
    <body>
        <header class = "header">
            <div class = "logo">Waverely Farm</div>
            <nav class = "navbar">
                <a href ="index.html">Home</a>
                <a href ="about_us.html">About Us</a>
                <a href ="services.html">Services</a>
                <a href ="shop.html">Shop</a>
                <a href ="contactus.html">Contact Us</a>
            </nav>
        </header>
    </body>
</html>

我已try 添加@media,但我不确定如何将其用于此类型的导航栏


* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "Poppins", sans-serif;
}

.header{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    padding: 20px 100px;
    background-color: aquamarine;
    display:flex;
    justify-content: space-between;
    align-items: center;
    z-index: 100;
}
.logo{
    font-size: 32px;
    color: #fff;
    text-decoration: none;
    font-weight: 700;
}
.navbar a{
    position: relative;
    font-size: 18px;
    color: #fff;
    font-weight: 400;
    text-decoration: none;
    margin-left: 40px;
}

.navbar a::before{
    content:'';
    position: absolute;
    top: 100%;
    left: 0;
    width: 0;
    height: 2px;
    background: #fff;
    transition: .3s;
}

.navbar a:hover::before{
    width: 100%;
}```

推荐答案

如果您想要创建一个包含切换按钮的可访问移动菜单,则需要使用JavaScript.这样做其实很简单,下面是我喜欢使用的一种方法:

超文本标记语言

首先,您需要添加一个按钮元素,用于在<nav>元素中切换菜单.将菜单链接包装在列表元素中以按语义对它们进行分组也是一个好主意.

<header class="header">
  <div class="logo">Waverely Farm</div>
  <nav class="navbar" aria-label="main">
    <button
      class="menu-toggle"
      aria-expanded="false"
      aria-controls="menu"
    >Menu</button>

    <ul id="menu" class="menu" role="list">
      <li>
        <a href="index.html">Home</a>
      </li>
      <li>
        <a href="about_us.html">About Us</a>
      </li>
      <li>
        <a href="services.html">Services</a>
      </li>
      <li>
        <a href="shop.html">Shop</a>
      </li>
      <li>
        <a href="contactus.html">Contact Us</a>
      </li>
    </ul>
  </nav>
</header>

button元素的ARIA属性(从aria-开始)帮助屏幕阅读器用户更好地理解和使用菜单.在这种情况下,aria-expanded表示菜单的状态(打开/关闭).

CSS

我们现在可以使用aria-expanded状态来有条件地在CSS中添加样式.

:where(ul, ol)[role="list"] {
  list-style: none;
}

.menu {
  display: flex;
  flex-wrap: wrap;
}

.menu-toggle {
  display: none;
}

@media screen and (max-width: 600px) {
  .menu-toggle {
    display: initial;
  }
  button[aria-expanded="false"] + ul {
  display: none;
  }
  .menu {
    flex-direction: column;
    flex-wrap: nowrap;
    position: absolute;
    inset: 130px 0 0;
    text-align: center;
  }
  .menu a {
    color: inherit;
  }
}

.menu中的样式只是一个示例,自定义它们以使其看起来像您想要的方式.

JavaScript

最后,为菜单按钮添加EventListener,以将aria-expanded的状态切换到truefalse:

const menuButton = document.querySelector(".menu-toggle");

menuButton.addEventListener("click", () => {
  const state = menuButton.getAttribute("aria-expanded") === "false";
  menuButton.setAttribute("aria-expanded", state);
});

我希望这能帮到你.如果有什么不清楚的地方,尽管问.

Html相关问答推荐

CSS属性不适用于IOS设备

弹性项在主轴方向溢出

css网格区域的布局不展开,也不显示滚动条

如何才能只给没有孟加拉语Kar符号的字母上色?

浏览器是在调整大小还是在全屏上交换视频源?

为什么我的网页底部是蓝色背景而不是渐变色?

Div中的图像问题-(TailWind CSS中的网格)

如何突破安莉得分

类型';联系人组件';上不存在属性';name FormControl';

创建特定的CSS网格布局

carousel 的垂直滚动按钮居中

Chrome浏览器错误:上的主题验证判断https://pagead2.googlesyndication.com/失败

页面文件夹内的 HTML 页面未加载主目录的 style.css

如何在 Flex 对齐内容框下显示隐藏按钮和文本

在带有换行文本的工具提示中显示溢出文本

如何动态调整彼此重叠的两个 div 的大小,使它们在增长时保持相同的高度

使用 Selenium for Python 在网站上查找类名称中包含换行符的元素

使用 CSS 样式化进度条

样式不适用于来自 tailwindcss 的网络

如何使文本显示在页眉/页脚之外?