Меню гамбургера не отображается в адаптивной навигационной панели

Привет, я действительно новичок в этом веб-программировании, только что узнал несколько дней назад и пытаюсь сделать мою отзывчивую панель навигации. И я нашел учебник на w3school, я следовал ему и изменил кое-что в коде, но он не работал должным образом. Меню удается свернуть до нужной ширины, но меню гамбургера не отображается. Я думаю, что уже изменил и сопоставил это со своими классами, но я не знаю, что еще не так.

Вот что я пробовал до сих пор:

.navSection {
    width: 100%;
    display: inline-table;
    line-height: 30px;
    background: #1c948a;
    z-index: 3;
    box-shadow: 0px 3px 5px 1px rgba(0, 0, 0, .3);
}

.navMenu .icon{
    display: none;
}

@media screen and (max-width: 700px) {
  .navMenu ul li:not(:first-child) {display: none;}
  .navMenu ul li.icon {
    float: right;
    display: block;
  }
}

@media screen and (max-width: 700px) {
  .navMenu.responsive {position: relative;}
  .navMenu.responsive .icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  .navMenu.responsive ul li {
    float: none;
    display: block;
    text-align: left;
  }
}

.navSectionWrapper {
    width: 90%;
    margin: auto;
}

.homelink {
    text-decoration: none;
}

.navlogo {
    width: 30%;
    height: 70px;
    float: left;
}

.logo {
    display: inline-block;
    font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
    color: #2C3E50;
    position: absolute;
}

.logoimg {
    height: 70px;
    float: left;
}

.logotext {
    font-weight: 600;
    float: right;
    line-height: 70px;
}

.logotext>span {
    color: white;
    text-shadow: 2px 2px 2px #33425B;
}

.navMenu {
    float: right;
    text-align: center;
    overflow: hidden;
}

.navMenu>ul {
    list-style: none;
}

.navMenu>ul>li {
    display: inline-block;
    line-height: 70px;
}

.navMenu>ul>li>a>span {
    color: white;
    font-weight: 700;
    font-size: 17px
}

.navMenu>ul>li>a {
    text-decoration: none;
    color: #2C3E50;
    font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
    font-weight: 600;
    margin: 10px
}

.navMenu>ul>li>a:hover {
    color: snow;
}
<div class="navSection">
        <div class="navSectionWrapper">
            <div class="navlogo">
                <a href="#" class="homelink">
                    <div class="logo">
                        <img src="img/logo.png" class="logoimg">
                        <h2 class="logotext">Let's<span>Go</span></h2>
                    </div>
                </a>
            </div>
            <div class="navMenu" id="mynavMenu">
                <ul>
                    <li><a href="#">Home</a></li>
                    <li><a href="#">Features</a></li>
                    <li><a href="#">About</a></li>
                    <li><a href="#">+<span>Download</span></a></li>
                    <li><a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a></li>
                </ul>
            </div>
        </div>
    </div>
<script>
        function myFunction() {
            var x = document.getElementById("mynavMenu");
            if (x.className === "navMenu") {
                x.className += " responsive";
            } else {
                x.className = "navMenu";
            }
        }
</script>

Благодарю вас


person RadVolan    schedule 09.07.2017    source источник


Ответы (1)


В вашем HTML используется a.icon, но в CSS вы используете li.icon. Переместил class="icon" в li вместо a и немного изменил CSS для .icon. Вы скрывали :not(:first-child()) в адаптивном представлении и либо хотите использовать :not(:last-child), поскольку .icon — это :last-child, либо вместо этого просто используете :not(.icon).

.navSection {
    width: 100%;
    display: inline-table;
    line-height: 30px;
    background: #1c948a;
    z-index: 3;
    box-shadow: 0px 3px 5px 1px rgba(0, 0, 0, .3);
}

.navMenu .icon{
    display: none;
    float: right;
}

@media screen and (max-width: 700px) {
  .navMenu ul li:not(.icon) {display: none;}
  .navMenu ul li.icon {
    display: block;
  }
}

@media screen and (max-width: 700px) {
  .navMenu.responsive {position: relative;}
  .navMenu.responsive .icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  .navMenu.responsive ul li {
    float: none;
    display: block;
    text-align: left;
  }
}

.navSectionWrapper {
    width: 90%;
    margin: auto;
}

.homelink {
    text-decoration: none;
}

.navlogo {
    width: 30%;
    height: 70px;
    float: left;
}

.logo {
    display: inline-block;
    font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
    color: #2C3E50;
    position: absolute;
}

.logoimg {
    height: 70px;
    float: left;
}

.logotext {
    font-weight: 600;
    float: right;
    line-height: 70px;
}

.logotext>span {
    color: white;
    text-shadow: 2px 2px 2px #33425B;
}

.navMenu {
    float: right;
    text-align: center;
    overflow: hidden;
}

.navMenu>ul {
    list-style: none;
}

.navMenu>ul>li {
    display: inline-block;
    line-height: 70px;
}

.navMenu>ul>li>a>span {
    color: white;
    font-weight: 700;
    font-size: 17px
}

.navMenu>ul>li>a {
    text-decoration: none;
    color: #2C3E50;
    font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
    font-weight: 600;
    margin: 10px
}

.navMenu>ul>li>a:hover {
    color: snow;
}
<div class="navSection">
        <div class="navSectionWrapper">
            <div class="navlogo">
                <a href="#" class="homelink">
                    <div class="logo">
                        <img src="img/logo.png" class="logoimg">
                        <h2 class="logotext">Let's<span>Go</span></h2>
                    </div>
                </a>
            </div>
            <div class="navMenu" id="mynavMenu">
                <ul>
                    <li><a href="#">Home</a></li>
                    <li><a href="#">Features</a></li>
                    <li><a href="#">About</a></li>
                    <li><a href="#">+<span>Download</span></a></li>
                    <li class="icon"><a href="javascript:void(0);" onclick="myFunction()">&#9776;</a></li>
                </ul>
            </div>
        </div>
    </div>
<script>
        function myFunction() {
            var x = document.getElementById("mynavMenu");
            if (x.className === "navMenu") {
                x.className += " responsive";
            } else {
                x.className = "navMenu";
            }
        }
</script>

person Michael Coker    schedule 09.07.2017
comment
Спасибо! Я понял, но я немного не понимаю, какая часть вашего HTML использует a.icon, но вы ориентируетесь в CSS с помощью li.icon. Где это? И почему вы добавили float: прямо к .navMenu .icon CSS? Это необходимо? - person RadVolan; 09.07.2017
comment
@RadVolan всегда пожалуйста. <li><a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a></li> - класс .icon находится в a, но ваш селектор css - .navMenu ul li.icon - так что вы пытаетесь применить css к li.icon, а ваш html на самом деле a.icon - имеет смысл? - person Michael Coker; 09.07.2017
comment
Да, так что я могу заставить его работать с классом значков в a -> <li><a href="javascript:void(0);" class="icon" onclick="myFunction()">&#9776;</a></li> и использовать .navMenu a.icon ? Верно? - person RadVolan; 09.07.2017
comment
@RadVolan Нет, потому что вы скрываете все li в своем ответном медиа-запросе (.navMenu ul li:not(:first-child) {display: none;}), поэтому, если вы покажете a.icon, он не будет отображаться, потому что родительский li скрыт. - person Michael Coker; 09.07.2017
comment
О, я имел в виду с :not(.icon). Но да, нужно изменить некоторые ul li на ul li a, чтобы он работал с меню ветчины. Но все же немного странно, лол (потому что я нуб ._.). В любом случае, большое спасибо @Michael Coker! - person RadVolan; 09.07.2017