javascript - 如何使子菜单始终在标题下?

标签 javascript jquery css fixed submenu

我需要制作一个始终与主菜单(标题)相邻的子菜单。所有子页面的标题始终相同,但每个子页面的子菜单不同。我想当窗口向下滚动时,标题填充发生变化并且子菜单仍然与标题相邻 - 这有效但如果标题快速到达顶部,子菜单隐藏在标题下方。

代码笔:https://codepen.io/anon/pen/PVgNER

$(window).on('scroll', function (event) {
    event.preventDefault();

    var headerHeight = $('.header').outerHeight();
    $('.submenu').css('margin-top', headerHeight);

    if (window.scrollY >=  100) {
      $('.header').addClass('no-padd');
    } else {
      $('.header').removeClass('no-padd');
    };
});



var headerHeight = $('.header').outerHeight();
  $('.submenu').css('margin-top', headerHeight);

if ($('.submenu').length) {
  var hei = ($('.header').outerHeight() + $('.submenu').outerHeight());
  $('.page-content').css('margin-top', hei);
} else {
  var hei = $('.header').outerHeight();
  $('.page-content').css('margin-top', hei);
}

$(window).on('resize', function() {
  if ($('.submenu').length) {
  var hei = ($('.header').outerHeight() + $('.submenu').outerHeight());
  $('.page-content').css('margin-top', hei);
} 
  var headerHeight = $('.header').outerHeight();
  $('.submenu').css('margin-top', headerHeight);
});
.bg-black {
  background-color: gray;
}

.header {
    padding-top: 25px;
    padding-bottom: 25px;
    position: fixed;
    top: 0;
    z-index: 9999;
    transition: all .1s; 
}

.no-padd {
    padding-top: 0;
    padding-bottom: 0;
}

.header a {
    color: #000;
    font-size: 15px;
    font-weight: 300;
    text-decoration: none;
    transition: all .1s;
}

.header a:hover {
    color: #cba168;
}

nav ul {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 0;
    margin: 0;
    list-style-type: none;
}

nav ul li {
    padding-left:   15px;
    padding-right: 15px;
}

nav ul li a{
    display: block;
    text-transform: uppercase;
    text-align: center;
    color: #ffffff;
    padding-bottom: 15px;
    padding-top: 15px;
    transition: all .3s ;
}


.header-phone,
.header-socials {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
}

.header-phone a:after,
.header-socials a:after {
    content: '';
    display: block;
    position: absolute;
    border-right: 1px solid #cba168;
    height: 100%;
    top: 0;
    right:0;
}

.header-phone i {
    margin-right: 5px;
}

.header-socials a {
    margin-right: 10px;
}

.bg-brown {
    background-color: #252525;
}

.submenu {
    position: fixed;
    top: 0%;
    z-index: 99;
    transition: all .1s;
}

.submenu ul {
    display: flex;
    align-items: center;
    list-style-type: none;
    justify-content: flex-start;
    padding-left: 25%;
    margin: 0;
}

.submenu ul li a {
    color: #fff;
    font-size: 15px;
    text-decoration: none;
    display: block;
    padding: 15px 35px; 
    transition: all .3s;
}

.submenu ul li:hover a {
    color: #cba168;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">


<header>
    <div class="container-fluid themewidth bg-black header" id='header'>
        <div class="row">
            <div class="col-6 col-lg-2 d-flex align-items-center justify-content-center logo">
               <a href="/"><img src="https://www.w3.org/html/logo/downloads/HTML5_Logo_256.png" width=50; alt=""></a> 
            </div>

            <div class="col-lg-6 pl-4 main-menu d-flex justify-content-center align-items-center">
                <nav><ul><li><a href=''>header 1</a></li><li><a href=''>header 2</a></li><li><a href=''>header 3</a></li></ul></nav>
            </div>

            <div class="col-6 col-lg-4 pr-0 pl-0 d-flex justify-content-center align-items-center">
                <div class='header-phone pr-4 pl-4'>
                    <a href='tel:+121212'>
                        <i class="fas fa-phone fa-rotate-90"></i><span>+12 12 12 12</span>
                    </a>
                </div>
                <div class='header-socials pr-4 pl-4'>
                    <a href="https://www.facebook.com/"><i class="fab fa-facebook"></i></a>
                    <a href="https://www.instagram.com/"><i class="fab fa-instagram"></i></a>
                    <a href="https://pinterest.com/"><i class="fab fa-pinterest"></i></a>
                    <a href="https://pl.linkedin.com/"><i class="fab fa-linkedin-in"></i></a>                    
                </div>

            </div>
        </div>
    </div>
</header>

        <div class="container-fluid bg-brown submenu">
            <div class="row">
                <div class="col-12">
                    <nav>
                        <ul>
                            <li><a href="#">submenu 1</a></li>
                            <li><a href="#">submenu 2</a></li>
                            <li><a href="#">submenu 3</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>
        
        
        <main class='page-content pt-5'>
        <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tristique at dui at commodo. Sed mollis vehicula nibh, quis ultrices diam laoreet eget. Duis vitae dignissim lectus, ut porta tortor. Aenean pulvinar aliquet elit, at tempus ante auctor nec. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nibh at augue placerat placerat. Nam ornare, risus eget auctor condimentum, leo justo porttitor magna, ac ornare neque felis eu nulla. Etiam erat orci, accumsan at volutpat in, tempus ut velit. Morbi velit tortor, porttitor a velit eu, dictum pellentesque dui. Duis dignissim nisl ac odio tempus, ac fermentum sapien eleifend. Nunc in leo eu tellus aliquam ultrices ac eu nibh. Maecenas iaculis condimentum nisl, nec lobortis lectus sodales non. Aliquam nisi massa, tempus sit amet orci at, vulputate ultricies nisl.

Fusce hendrerit felis nibh, sed mattis nibh mollis eget. Praesent pretium velit erat. Phasellus pellentesque nunc sit amet efficitur bibendum. Fusce vitae metus laoreet, tincidunt est a, accumsan lorem. Fusce augue lorem, luctus vitae vehicula ut, aliquet id leo. Nunc massa turpis, interdum ut erat id, congue vulputate tellus. Integer nec tincidunt arcu. Etiam suscipit pharetra dapibus. Donec eu velit ultricies, cursus ligula at, vulputate arcu. Fusce tristique efficitur ultrices. Vivamus volutpat erat vel feugiat tincidunt. Aenean dictum nec diam non consectetur. Fusce elementum eros vitae nisl euismod gravida. Nullam scelerisque, leo ac varius lacinia, arcu ante ultricies elit, vel tempus risus ante ac augue. Quisque id dui ac ex bibendum gravida. Integer auctor, felis non porta mollis, turpis lorem egestas libero, in iaculis libero turpis varius mi.

Donec in sem in neque pulvinar egestas sit amet et eros. Integer sit amet purus tortor. Nam venenatis aliquet tellus, quis faucibus lacus ornare ut. Nulla dictum feugiat ante id aliquam. Cras interdum ligula id orci euismod, ut accumsan felis pharetra. Pellentesque ut eros a nisi porta viverra. Suspendisse et aliquam dui.
        </p>
        
         <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tristique at dui at commodo. Sed mollis vehicula nibh, quis ultrices diam laoreet eget. Duis vitae dignissim lectus, ut porta tortor. Aenean pulvinar aliquet elit, at tempus ante auctor nec. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nibh at augue placerat placerat. Nam ornare, risus eget auctor condimentum, leo justo porttitor magna, ac ornare neque felis eu nulla. Etiam erat orci, accumsan at volutpat in, tempus ut velit. Morbi velit tortor, porttitor a velit eu, dictum pellentesque dui. Duis dignissim nisl ac odio tempus, ac fermentum sapien eleifend. Nunc in leo eu tellus aliquam ultrices ac eu nibh. Maecenas iaculis condimentum nisl, nec lobortis lectus sodales non. Aliquam nisi massa, tempus sit amet orci at, vulputate ultricies nisl.

Fusce hendrerit felis nibh, sed mattis nibh mollis eget. Praesent pretium velit erat. Phasellus pellentesque nunc sit amet efficitur bibendum. Fusce vitae metus laoreet, tincidunt est a, accumsan lorem. Fusce augue lorem, luctus vitae vehicula ut, aliquet id leo. Nunc massa turpis, interdum ut erat id, congue vulputate tellus. Integer nec tincidunt arcu. Etiam suscipit pharetra dapibus. Donec eu velit ultricies, cursus ligula at, vulputate arcu. Fusce tristique efficitur ultrices. Vivamus volutpat erat vel feugiat tincidunt. Aenean dictum nec diam non consectetur. Fusce elementum eros vitae nisl euismod gravida. Nullam scelerisque, leo ac varius lacinia, arcu ante ultricies elit, vel tempus risus ante ac augue. Quisque id dui ac ex bibendum gravida. Integer auctor, felis non porta mollis, turpis lorem egestas libero, in iaculis libero turpis varius mi.

Donec in sem in neque pulvinar egestas sit amet et eros. Integer sit amet purus tortor. Nam venenatis aliquet tellus, quis faucibus lacus ornare ut. Nulla dictum feugiat ante id aliquam. Cras interdum ligula id orci euismod, ut accumsan felis pharetra. Pellentesque ut eros a nisi porta viverra. Suspendisse et aliquam dui.
        </p>
        
         <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tristique at dui at commodo. Sed mollis vehicula nibh, quis ultrices diam laoreet eget. Duis vitae dignissim lectus, ut porta tortor. Aenean pulvinar aliquet elit, at tempus ante auctor nec. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nibh at augue placerat placerat. Nam ornare, risus eget auctor condimentum, leo justo porttitor magna, ac ornare neque felis eu nulla. Etiam erat orci, accumsan at volutpat in, tempus ut velit. Morbi velit tortor, porttitor a velit eu, dictum pellentesque dui. Duis dignissim nisl ac odio tempus, ac fermentum sapien eleifend. Nunc in leo eu tellus aliquam ultrices ac eu nibh. Maecenas iaculis condimentum nisl, nec lobortis lectus sodales non. Aliquam nisi massa, tempus sit amet orci at, vulputate ultricies nisl.

Fusce hendrerit felis nibh, sed mattis nibh mollis eget. Praesent pretium velit erat. Phasellus pellentesque nunc sit amet efficitur bibendum. Fusce vitae metus laoreet, tincidunt est a, accumsan lorem. Fusce augue lorem, luctus vitae vehicula ut, aliquet id leo. Nunc massa turpis, interdum ut erat id, congue vulputate tellus. Integer nec tincidunt arcu. Etiam suscipit pharetra dapibus. Donec eu velit ultricies, cursus ligula at, vulputate arcu. Fusce tristique efficitur ultrices. Vivamus volutpat erat vel feugiat tincidunt. Aenean dictum nec diam non consectetur. Fusce elementum eros vitae nisl euismod gravida. Nullam scelerisque, leo ac varius lacinia, arcu ante ultricies elit, vel tempus risus ante ac augue. Quisque id dui ac ex bibendum gravida. Integer auctor, felis non porta mollis, turpis lorem egestas libero, in iaculis libero turpis varius mi.

Donec in sem in neque pulvinar egestas sit amet et eros. Integer sit amet purus tortor. Nam venenatis aliquet tellus, quis faucibus lacus ornare ut. Nulla dictum feugiat ante id aliquam. Cras interdum ligula id orci euismod, ut accumsan felis pharetra. Pellentesque ut eros a nisi porta viverra. Suspendisse et aliquam dui.
        </p>
        
         <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tristique at dui at commodo. Sed mollis vehicula nibh, quis ultrices diam laoreet eget. Duis vitae dignissim lectus, ut porta tortor. Aenean pulvinar aliquet elit, at tempus ante auctor nec. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nibh at augue placerat placerat. Nam ornare, risus eget auctor condimentum, leo justo porttitor magna, ac ornare neque felis eu nulla. Etiam erat orci, accumsan at volutpat in, tempus ut velit. Morbi velit tortor, porttitor a velit eu, dictum pellentesque dui. Duis dignissim nisl ac odio tempus, ac fermentum sapien eleifend. Nunc in leo eu tellus aliquam ultrices ac eu nibh. Maecenas iaculis condimentum nisl, nec lobortis lectus sodales non. Aliquam nisi massa, tempus sit amet orci at, vulputate ultricies nisl.

Fusce hendrerit felis nibh, sed mattis nibh mollis eget. Praesent pretium velit erat. Phasellus pellentesque nunc sit amet efficitur bibendum. Fusce vitae metus laoreet, tincidunt est a, accumsan lorem. Fusce augue lorem, luctus vitae vehicula ut, aliquet id leo. Nunc massa turpis, interdum ut erat id, congue vulputate tellus. Integer nec tincidunt arcu. Etiam suscipit pharetra dapibus. Donec eu velit ultricies, cursus ligula at, vulputate arcu. Fusce tristique efficitur ultrices. Vivamus volutpat erat vel feugiat tincidunt. Aenean dictum nec diam non consectetur. Fusce elementum eros vitae nisl euismod gravida. Nullam scelerisque, leo ac varius lacinia, arcu ante ultricies elit, vel tempus risus ante ac augue. Quisque id dui ac ex bibendum gravida. Integer auctor, felis non porta mollis, turpis lorem egestas libero, in iaculis libero turpis varius mi.

Donec in sem in neque pulvinar egestas sit amet et eros. Integer sit amet purus tortor. Nam venenatis aliquet tellus, quis faucibus lacus ornare ut. Nulla dictum feugiat ante id aliquam. Cras interdum ligula id orci euismod, ut accumsan felis pharetra. Pellentesque ut eros a nisi porta viverra. Suspendisse et aliquam dui.
        </p>
        
         <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tristique at dui at commodo. Sed mollis vehicula nibh, quis ultrices diam laoreet eget. Duis vitae dignissim lectus, ut porta tortor. Aenean pulvinar aliquet elit, at tempus ante auctor nec. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nibh at augue placerat placerat. Nam ornare, risus eget auctor condimentum, leo justo porttitor magna, ac ornare neque felis eu nulla. Etiam erat orci, accumsan at volutpat in, tempus ut velit. Morbi velit tortor, porttitor a velit eu, dictum pellentesque dui. Duis dignissim nisl ac odio tempus, ac fermentum sapien eleifend. Nunc in leo eu tellus aliquam ultrices ac eu nibh. Maecenas iaculis condimentum nisl, nec lobortis lectus sodales non. Aliquam nisi massa, tempus sit amet orci at, vulputate ultricies nisl.

Fusce hendrerit felis nibh, sed mattis nibh mollis eget. Praesent pretium velit erat. Phasellus pellentesque nunc sit amet efficitur bibendum. Fusce vitae metus laoreet, tincidunt est a, accumsan lorem. Fusce augue lorem, luctus vitae vehicula ut, aliquet id leo. Nunc massa turpis, interdum ut erat id, congue vulputate tellus. Integer nec tincidunt arcu. Etiam suscipit pharetra dapibus. Donec eu velit ultricies, cursus ligula at, vulputate arcu. Fusce tristique efficitur ultrices. Vivamus volutpat erat vel feugiat tincidunt. Aenean dictum nec diam non consectetur. Fusce elementum eros vitae nisl euismod gravida. Nullam scelerisque, leo ac varius lacinia, arcu ante ultricies elit, vel tempus risus ante ac augue. Quisque id dui ac ex bibendum gravida. Integer auctor, felis non porta mollis, turpis lorem egestas libero, in iaculis libero turpis varius mi.

Donec in sem in neque pulvinar egestas sit amet et eros. Integer sit amet purus tortor. Nam venenatis aliquet tellus, quis faucibus lacus ornare ut. Nulla dictum feugiat ante id aliquam. Cras interdum ligula id orci euismod, ut accumsan felis pharetra. Pellentesque ut eros a nisi porta viverra. Suspendisse et aliquam dui.
        </p>
        </main>

最佳答案

您已经走了很长一段路。 您可以使用 CSS 轻松做到这一点。

在 Javascript 中删除滚动功能并使用下面的代码

.submenu ul{
  position: -webkit-sticky;
  position: sticky;
  top: 0;
}

您可以引用下面的链接。

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_sticky_element

谢谢

关于javascript - 如何使子菜单始终在标题下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783702/

相关文章:

html - 即使有动态父级也保持 div 固定

php - 用于获取推文的服务器端或客户端?

javascript - 无法附加 html 元素 jquery

jquery - 如何在 Typescript Angular Controller 中使用 document ready

javascript - asp .net jquery 在确认对话框后更改表行颜色

jquery - CSS 根据 URL 模式突出显示目录中的事件链接

javascript - 是否有可用于 “Share on Slack” 按钮的 URL?

javascript - 使用canvas.js在单个页面中导出多个图表

javascript - 用HTML代码破解javascript的Grails字符串(cordova)

jQuery - 根据父元素类向子元素添加 CSS