Добавить изображение баннера поверх фиксированной панели навигации
Я пытаюсь вставить баннер с изображением поверх страницы с помощью JS. Проблема, с которой я сталкиваюсь, связана с фиксированной панелью навигации. Моя цель - поместить панель навигации под баннером с изображением, но при прокрутке вниз под баннером с изображением баннер навигации должен быть снова зафиксирован в верхней части страницы.
Вот HTML-код (div .top-баннер также может быть размещен за пределами оболочки, если это проще / лучше)
<div class="wrapper">
<div class="top-banner">
<img src="https://b2b.bbanner.co.uk/Content/images/banner.jpg" />
</div>
<nav id="nav">
<h1>Navbar</h1>
</nav>
<h1>Content</h1>
</div>
CSS:
#nav {
background: #f9f9f9;
margin: 0 0 0 133px;
position: fixed;
top: 0;
background-color: black;
height: 51px;
display: table;
min-width: 762px;
}
.top-banner {
width: 100%;
position: relative;
}
JSFIELD: https://jsfiddle.net/3nu16e59/
Любая помощь, как решить эту проблему с CSS? благодарю вас
3 ответа
(function ($) {
$(document).ready(function(){
// hide .navbar first
$("#nav").hide();
// fade in .navbar
$(function () {
$(window).scroll(function () {
// set distance user needs to scroll before we fadeIn navbar
if ($(this).scrollTop() > 100) {
$('#nav').fadeIn();
} else {
$('#navr').fadeOut();
}
});
});
});
}(jQuery));
Добавьте этот jquery и попробуйте. Вы можете встроить это в тег скрипта
Решение Javascript заключается в использовании scrollTop
определить, как далеко пользователь прокрутил, и переключить класс, который применяется position: fixed
var banner = document.getElementById('banner'),
threshold = banner.offsetTop + banner.clientHeight,
nav = document.getElementById('nav');
window.addEventListener('scroll',function() {
var scrolled = document.body.scrollTop;
if (scrolled >= threshold) {
nav.classList.add('fixed');
} else {
nav.classList.remove('fixed');
}
})
#nav {
padding: 0;
background: #f9f9f9;
margin: 0 0 0 133px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
background-color: black;
height: 51px;
font-size: 0;
border-top: 0;
display: table;
min-width: 762px;
}
#nav.fixed {
position: fixed;
top: 0;
}
.top-banner img {
display: block;
}
<div class="top-banner" id="banner">
<img src="https://b2b.bbanner.co.uk/Content/images/banner.jpg" />
</div>
<div class="wrapper">
<nav id="nav">
<h1>Navbar</h1>
</nav>
<h1>Content</h1>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
</p>
</div>
Поскольку вы запрашиваете решение css, тогда просто измените свойство позиции навигации с фиксированного на липкое:
#nav {
padding: 0;
background: #f9f9f9;
margin: 0 0 0 133px;
position: sticky;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
top: 0;
background-color: black;
height: 51px;
font-size: 0;
border-top: 0;
display: table;
min-width: 762px;
}
.top-banner {
width: 100%;
position: relative;
}
<div class="top-banner">
<img src="https://b2b.bbanner.co.uk/Content/images/banner.jpg" />
</div>
<div class="wrapper">
<nav id="nav">
<h1>Navbar</h1>
</nav>
<h1>Content</h1>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
<p>Scrolling</p>
</div>
Обратите внимание, что в настоящее время (февраль 2017 г.) позиция закрепления не поддерживается Edge или браузером Android, см. Таблицу совместимости здесь.