CSS - Создать отзывчивое верхнее меню навигации - PullRequest
0 голосов
/ 19 апреля 2020

Для моей веб-страницы ( Github Page ) я хочу, чтобы мое меню учитывало размер экрана, чтобы оно складывалось, когда оно слишком маленькое, а элементы не помещались. Я планирую добавить следующее решение: w3schools , используя значок "burguer", чтобы объединить все элементы, когда экраны маленькие.

Я могу создать меню с различными элементы, чтобы добавить значок "Бургер", а затем скрыть его по умолчанию, когда экран большой. Однако медиазапросы и функция js должны быть неправильными, потому что, когда я делаю мой экран маленьким, появляется значок "burguer", но другие элементы не исчезают, а щелчки по "burguer" ничего не делают. Я предполагаю, что где-то есть ошибки или путаница с именами id. Может ли это быть?

В примере из w3schools используется вкладка div, а я нет. Обязательно ли для примера работать?

/* Toggle between adding and removing the "responsive" class to topnav when the user clicks on the icon */
function myFunction() {
  var x = document.getElementById("nav");
  if (x.className === "header_nav") {
    x.className += " responsive";
  } else {
    x.className = "header_nav";
  }
}
/* Header_nav ----- DRAFT */

#page-wrapper {
  padding-top: 3.5em;
}

#header_nav {
  background: rgba(0, 0, 0, 0);
  box-shadow: 0 0 0.25em 0 rgba(0, 0, 0, 0);
  cursor: default;
  height: 3.5em;
  left: 0;
  line-height: 3.5em;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 100;
}

#header_nav .icon {
  display: none;
}

#header_nav h1 {
  height: inherit;
  left: 1.25em;
  line-height: inherit;
  margin: 0;
  position: absolute;
  top: 0;
}

#header_nav nav {
  position: absolute;
  right: 1em;
  top: 0;
}

#header_nav nav ul {
  margin: 0;
}

#header_nav nav ul li {
  display: inline-block;
  margin-left: 1em;
}

#header_nav nav ul li a,
#header_nav nav ul li span {
  border: 0;
  color: inherit;
  display: inline-block;
  height: inherit;
  line-height: inherit;
  outline: 0;
}

#header_nav nav ul li a.button,
#header_nav nav ul li span.button {
  height: 2em;
  line-height: 2em;
  padding: 0 1.25em;
}

#header_nav nav ul li a:not(.button):before,
#header_nav nav ul li span:not(.button):before {
  margin-right: 0.5em;
}

#header_nav nav ul li.active>a,
#header_nav nav ul li.active>span {
  color: #e44c65;
}

#header_nav nav ul li>ul {
  display: none;
}

body.landing #page-wrapper {
  padding-top: 0;
}

body.landing #header_nav {
  background: transparent;
  box-shadow: none;
  position: absolute;
}


/* When the screen is less than 600 pixels wide, hide all links, except for the first one ("Home"). Show the link that contains should open and close the topnav (.icon) */

@media screen and (max-width: 600px) {
  #header_nav a:not(:first-child) {
    display: none;
  }
  #header_nav a.icon {
    float: right;
    display: block;
  }
}


/* The "responsive" class is added to the topnav with JavaScript when the user clicks on the icon. This class makes the topnav look good on small screens (display the links vertically instead of horizontally) */

@media screen and (max-width: 600px) {
  #header_nav.responsive {
    position: relative;
  }
  #header_nav.responsive a.icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  #header_nav.responsive a {
    float: none;
    display: block;
    text-align: left;
  }
}
<html>

<head>
  <title>Eduardo Alvarado</title>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
  <link rel="stylesheet" href="assets/css/main.css" />
  <noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
  <!-- Load an icon library to show a hamburger menu (bars) on small screens -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

</head>

<body class="is-preload">

  <!-- Header Navigation Menu -->
  <section id="header_nav">
    <nav id="nav">
      <ul>
        <li>
          <a href="index">
            <p style="color:white">Home</p>
          </a>
        </li>
        <li>
          <a href="">
            <p style="color:white">Research</p>
          </a>
        </li>
        <li>
          <a href="">
            <p style="color:white">Game-dev</p>
          </a>
        </li>
        <li>
          <a href="photography">
            <p style="color:white">Photography</p>
          </a>
        </li>
        <li><a href="javascript:void(0);" class="icon" onclick="myFunction()"><i class="fa fa-bars"></i></a></li>
      </ul>
    </nav>
  </section>

Весь код можно найти в репо ( Github Repo ).

Можете ли вы увидеть может быть, ошибка, которую я не могу обнаружить? Почему пример из w3school не применим?

Буду очень признателен за вашу помощь здесь. Заранее большое спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

В ваших CSS и HTML я сделал некоторые изменения, так как ваше меню гамбургера было внутри того же, что вы пытались скрыть, что не очень хорошая идея, я также немного подкорректировал ваш CSS, как вы устанавливали положение относительно, но не устанавливали отображение для блокировки. Надеюсь, это поможет!

CSS (строка 2525 - 2547):

        @media screen and (max-width: 600px) {
              #nav {display: none;}
              #header_nav a.icon {
            float: right;
            display: block;
            }
            }

        /* The "responsive" class is added to the topnav with JavaScript when the user clicks on the icon. This class makes the topnav look good on small screens (display the links vertically instead of horizontally) */
        @media screen and (max-width: 600px) {
          #nav.responsive {position: relative;display: block;}
          #header_nav.responsive a.icon {
            position: absolute;
            right: 0;
            top: 0;
          }
          #nav.responsive a {
            float: none;
            display: block;
            text-align: left;
          }
        }

HTML:

<!-- Header Navigation Menu -->
            <section id="header_nav">
                <a class="icon" onclick="myFunction()"><i class="fa fa-bars"></i></a><nav id="nav" class="header_nav">
                    <ul>
                        <li><a href="index"><p style="color:white">Home</p></a></li>
                        <li><a href=""><p style="color:white">Research</p></a></li>
                        <li><a href=""><p style="color:white">Game-dev</p></a></li>
                        <li><a href="photography"><p style="color:white">Photography</p></a></li>

                    </ul>
                </nav>
            </section>

enter image description here

1 голос
/ 19 апреля 2020

Вот небольшое воспроизводимое решение, основанное на вашем коде: https://jsfiddle.net/hneromu4/5/

Я добавил класс, фиксированный для элементов ссылки, которые должны были остаться при изменении размера окна:

<section id="header_nav">
  <nav id="nav">
    <ul>
      <li class="fixed"><a href="">Home</a></li>
      <li><a href="">Research</a></li>
      <li><a href="">Game-dev</a></li>
      <li><a href="photography">Photography</a></li>
      <li class="fixed hamburguer"><a href="javascript:void(0);" class="icon" onclick="myFunction()"><i class="fa fa-bars"></i></a></li>
    </ul>
  </nav>
</section>

Я также подправил ваши css и js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...