23

I have a question about navbar-fixed-top. Well, I have a simple problem with it. My fixed navbar covers content, for example in "About us" page, it covers row with "About us" title.

I have no idea how can I fix it, because when I resize website (mobile devices size) the header is visible.

Of course I have this kind of problem with headers in other pages (Full Width and 404).

Also, in Index page, it covers some of carousel slider.

Information:

Let me know, how can I fix it on all resolutions.

KyleMit
  • 30,350
  • 66
  • 462
  • 664
testerius
  • 391
  • 4
  • 6
  • 16
  • 3
    there are several copies of this issue http://stackoverflow.com/questions/11124777/twitter-bootstrap-navbar-fixed-top-overlapping-site says add this css: body { padding-top: 40px; } @media screen and (max-width: 768px) { body { padding-top: 0px; } } ____________________________________________________________________ http://stackoverflow.com/questions/10336194/twitter-bootstrap-top-nav-bar-blocking-top-content-of-the-page this worked for me: For bootstrap 3, navbar-static-top instead of fixed prevents this issue, unless you need the navbar to always be visible – TW Scannell Nov 18 '13 at 18:23

8 Answers8

22

the response is in the page:

Twitter Bootstrap - top nav bar blocking top content of the page

Add to your CSS:

body { 
    padding-top: 65px; 
}

or a more complex solution but responsive, if your navbar change the height( ex in tablets appears in more to 60px; or is different ) use a mixed solution with css and javascript

CSS:

    #godown{
   height: 60px;
}

HTML (resumen)

<body>
<nav class="navbar navbar-fixed-top " role="navigation" id="navMenu">
...

</nav>

<!-- This div make the magic :) -->

<div class="godown-60" id="godown"></div>

<!-- the rest of your site -->
...

JAVASCRIPT:

<script>
//insert this in your jquery
//control the resizing of menu and go down the content in the correct position

    $("#navMenu").resize(function () {
        $('#godown').height($("#navMenu").height() + 10);
    });

    if ($("#navMenu").height() > $('#godown').height()) $('#godown').height($("#navMenu").height() + 10);

</script>
Community
  • 1
  • 1
chefjuanpi
  • 1,570
  • 15
  • 27
11

Try class="navbar-static-top". It still allows navigation bar to be stay on the top but doesn't block content.

Antonio Jha
  • 1,301
  • 13
  • 13
8

position: sticky instead of position: static did the trick for me.

Zoe
  • 27,060
  • 21
  • 118
  • 148
yay
  • 91
  • 1
  • 1
1
var navHeight = $("#menu").height();
$("body").css({paddingTop: (navHeight+12)+'px'});

Try this easy way.

Peter Csala
  • 17,736
  • 16
  • 35
  • 75
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 26 '22 at 08:16
0

I would do this:

// add appropriate media query if required to target mobile nav only
.nav { overflow-y: hidden !important }

This should make sure the nav block doesn't stretch downpage and covers the page content.

developer10
  • 1,450
  • 2
  • 15
  • 31
0

Just add an id or class to the content, and then give it a margin top enough to make the content show without the static navbar hindering it and add the "!important" attribute to make it work.....

0

It's possible setting a variable for the paddingTop of the body to the height of the navbar could also work and is subsequently a bit more responsive than a fixed 60/65px value.

let padding = $("nav").height() + "px";

A practical example is the Bootstrap .navbar-toogler button and adding a click event to it and setTimeout function which allows the height to change then apply the new value as paddingTop to the body.

jQuery:

$(".navbar-toggler").click(function(){
            setTimeout(function(){
                let padding = $("nav").height() + "px";
                $("body").css("paddingTop", padding)
            }, 500)
        })

vanillaJS:

document.querySelector(".navbar-toggler").onclick = function(){
            setTimeout(function(){
                let padding = document.querySelector("nav").offsetHeight + "px";
                document.body.style.paddingTop=padding;
            }, 500)
        };
0

Try it out. It will retain the fixed property of navbar

.navbar{
  top:0;
  position:fixed;
}