#javascript #css #menu #responsive #sticky
#javascript #css #меню #отзывчивый #липкий
Вопрос:
Я застрял в конфликте для «липкого» и «отзывчивого» верхнего меню. Когда он не прокручивается, и я нажимаю кнопку BARS, чтобы открыть меню (в отзывчивом состоянии), все работает нормально. Если я прокручиваю вниз, а меню «ЛИПКОЕ», оно теряет «позицию: исправлено» и переходит на вершину (обратно в положение: относительное).
Вот мой codepen: codepen для конфликта скриптов верхней навигации
// Function that expand the top menu when collapsed (responsive)
function opennav() {
var x = document.getElementById("myTopnav");
if (x.className === "topnav")
{x.className = " responsive";}
else
{x.className = "topnav";}}
// This is the function that stick the menu when scrolling
window.onscroll = function() {myFunction()};
var navbar = document.getElementById("myTopnav");
var sticky = navbar.offsetTop;
function myFunction() {
if
(window.pageYOffset >= sticky)
{navbar.classList.add("sticky");}
else
{navbar.classList.remove("sticky");}
}
body { margin: 0; font-family: Arial, Helvetica, sans-serif;}
.topnav {
overflow: hidden;
background-color: #333;
}
.topnav a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.topnav a:hover {
background-color: #ddd;
color: black;
}
.topnav a.active {
background-color: #4CAF50;
color: white;
}
.topnav .icon {
display: none;
}
/* Responsive CSS for the top navigation menu */
@media screen and (max-width: 600px) {
.topnav a:not(:first-child) {
display: none;
}
.topnav a.icon {
float: right;
display: block;
}
.topnav.responsive {position: relative;}
.topnav.responsive .icon {
position: absolute;
right: 0;
top: 0;
}
.topnav.responsive a {
float: none;
display: block;
text-align: left;
}
}
/* Sticky CLASS that will be added when scrolling */
.sticky {
position: fixed;
top: 0;
width: 100%;
}
.sticky .content {
padding-top: 60px;
}
<body>
<div class="topnav" id="myTopnav">
<a href="#home" class="active">Home</a>
<a href="#news">News</a>
<a href="#contact">Contact</a>
<a href="#about">About</a>
<a href="javascript:void(0);" class="icon" onclick="opennav()">
<i class="fa fa-bars"></i>
</a>
</div>
<div style="padding-left:16px">
<!-- Put large text in this <p> to scroll -->
<p>LOREM IPSUM</p>
</div>
</body>
Ответ №1:
Во-первых, не используйте float . Мы не уходим в 1995 году. Используйте flexbox или grid.
Во-вторых, ваш код повсюду. Несколько тегов скрипта в разделе HTML, многократное использование одного и того же медиа-запроса… Трудно читать ваш код.
В-третьих, то, что вы хотите сделать, можно сделать просто с помощью CSS. Вам нужен JS только для открытия подменю. Для этого просто добавьте класс.
Я предлагаю вам посмотреть видео на Youtube об адаптивном меню.
Комментарии:
1. Плохой ответ, мой друг, вопрос не в том, в какую эпоху мы уходим или какая альтернатива, все дело в конфликте сценариев! Это код W3school, я всего лишь новичок, и я только что пересек их два разных кода, один для липкого, а второй для отзывчивого, поэтому у меня возникла эта проблема, и float не слишком устарел, как вы упомянули, просто flexbox намного лучше, но кто-то все еще можетнайдите float достаточно для чего-то, А также; неразумно отвечать кому-то, кто просит чему-то научиться на форуме вопросов и ответов, чтобы учиться на YouTube!!!!
2. Я знаю, что он не очень хорошо представлен, но он из W3SCHOOLS, я думаю, он предназначен для образовательных целей, и вы можете заметить, что я действительно новичок в CSS и веб-дизайне в целом, я программист-аналитик в настольных и мобильных приложениях под RAD Studio (Delphi). моя проблема в том, что я никогда не превращалдля веб-дизайна, скажем, за 1 или 2 месяца до этого, в любом случае, извините, я попытаюсь отредактировать его и прокомментировать раздел, в котором проблема
3. отредактированный код, я сделал все возможное, все еще с Float, я должен начать с них, чтобы перейти к flexbox
4. В W3SCHOOLS много кодов старой школы. Есть более простые, практичные и современные способы создания этих вещей. Вот почему я продолжаю говорить, что Youtube — лучшее место для начала. Мы можем помочь вам здесь, если вы сосредоточитесь на чем-то более конкретном, но ваша текущая проблема серьезнее.