制作导航栏棒

Posted

技术标签:

【中文标题】制作导航栏棒【英文标题】:Make a nav bar stick 【发布时间】:2015-02-11 10:42:14 【问题描述】:

制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒 制作导航条棒

/* 标题 */

<div class="headercss">

        <div class="headerlogo">

        </div>

    </div>



    /* BODY */

    body 
        margin: 0px;
        height: 2000px;
    



    .headercss 
        width: auto;
        height: 320px;
        position: relative;
    

    .headerlogo 
        width: auto;
        height: 250px;
        position: relative;
    

    .nav 
        width: auto;
        height: 70px;
        position: relative;
        overflow: hidden;
    

    ul 
        list-style-type: none;
        margin: 0;
        padding: 0;
        float:left;
        width:100%;
        overflow: hidden;
    


    li 
        float: left;
        width:25%;
        min-width: 243px;
        overflow: hidden;
    

    a:link, a:visited 
        display: block;
        height: 68px;
        min-width: 243px;
        overflow: hidden;
    

    a:hover, a:active 
    

【问题讨论】:

参考这里:***.com/questions/6980821/… 【参考方案1】:

$(document).ready(function() 
  
  $(window).scroll(function () 
      //if you hard code, then use console
      //.log to determine when you want the 
      //nav bar to stick.  
      console.log($(window).scrollTop())
    if ($(window).scrollTop() > 280) 
      $('#nav_bar').addClass('navbar-fixed');
    
    if ($(window).scrollTop() < 281) 
      $('#nav_bar').removeClass('navbar-fixed');
    
  );
);
html, body 
	height: 4000px;


.navbar-fixed 
    top: 0;
    z-index: 100;
  position: fixed;
    width: 100%;


#body_div 
	top: 0;
	position: relative;
    height: 200px;
    background-color: green;


#banner 
	width: 100%;
	height: 273px;
    background-color: gray;
	overflow: hidden;


#nav_bar 
	border: 0;
	background-color: #202020;
	border-radius: 0px;
	margin-bottom: 0;
    height: 30px;


.nav_links 
    margin: 0;


.nav_links li 
	display: inline-block;
    margin-top: 4px;

.nav_links li a 
	padding: 0 15.5px;
	color: #3498db;
	text-decoration: none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="banner">
     <h2>put what you want here</h2>
     <p>just adjust javascript size to match this window</p>
  </div>

  <nav id='nav_bar'>
    <ul class='nav_links'>
      <li><a href="url">Nav Bar</a></li>
      <li><a href="url">Sign In</a></li>
      <li><a href="url">Blog</a></li>
      <li><a href="url">About</a></li>
    </ul>
  </nav>
<div id='body_div'>
    <p style='margin: 0; padding-top: 50px;'>and more stuff to continue scrolling here</p>
</div>

【讨论】:

不错,但除了静态高度,您还可以计算横幅的高度,例如。 $('#banner').height()Improved Code 感谢您的解决方案! 导航接近顶部时滚动到底部时闪烁怎么办?我只是在这种“边缘情况”中苦苦挣扎,发现您需要在滚动顶部时向导航添加固定类,但在滚动 px i 小于(从顶部到导航 MINUS 横幅高度的 px 值)时删除。横幅高度可能因内容而异... 这很好用(尤其是使用@VipulBhatt 的自动高度调整),除了页面主体在转换时会按导航栏的高度向上跳跃。所以你还得同时调整#body_div的padding或者margin,来替换#nav_bar变为fixed时丢失的高度。 查找#banner 高度可能并不理想,因为这可能会改变。相反,您可以使用 $("#site-navigation").offset().top; 获取导航元素与顶部的距离【参考方案2】:

添加到您的 .nav css 块

position: fixed

它会起作用的

【讨论】:

【参考方案3】:

我希望这可以帮助某人。通过js确定nav偏移,然后将sticky position css应用到nav:

但首先,我们将在样式表中定义样式,如下所示。

.sticky 
    position: fixed;
    width: 100%;
    left: 0;
    top: 0;
    z-index: 100;
    border-top: 0;

然后,我们将使用 jQuery 有条件地将该类应用于导航。

$(document).ready(function() 
  var stickyNavTop = $('.nav').offset().top;

  var stickyNav = function()
    var scrollTop = $(window).scrollTop();

    if (scrollTop > stickyNavTop)  
      $('.nav').addClass('sticky');
     else 
      $('.nav').removeClass('sticky'); 
    
  ;

  stickyNav();

  $(window).scroll(function() 
    stickyNav();
  );
);

【讨论】:

终于!让我永远找到一个正确处理可变高度导航的示例。做得好,谢谢!【参考方案4】:

只需使用最喜欢的答案中描述的z-index CSS 属性,导航栏就会粘在顶部。

示例

<div class="navigation">
 <nav>
   <ul>
    <li>Home</li>
    <li>Contact</li>
   </ul>
 </nav>

.navigation 
   /* fixed keyword is fine too */
   position: sticky;
   top: 0;
   z-index: 100;
   /* z-index works pretty much like a layer:
   the higher the z-index value, the greater
   it will allow the navigation tag to stay on top
   of other tags */

【讨论】:

这适用于我的模板。谢谢 !!但是粘性和固定关键字会产生很大的不同。【参考方案5】:

CSS:

.headercss 
    width: 100%;
    height: 320px;
    background-color: #000000;
    position: fixed;

属性position: fixed 将保持卡住,而其他内容将是可滚动的。不要忘记设置width:100% 使其完全向右填充。

Example

【讨论】:

@Pierre 然后将position: fixed 应用到.nav @Pierre 如果您希望它位于最顶部,请添加top:0; 对不起,也许我没有尝试正确大声笑,我希望导航栏随着页面滚动,但如果它到达顶部,我希望它坚持到顶部。如果用户向上滚动,导航栏会在需要时移回其位置。谢谢 @Pierre 这很简单,但您需要检测有多少用户会滚动并需要 JavaScript。这很简单,你可以在这里阅读:***.com/questions/14496240/… 这个问题已经被问到了。在发布您的问题之前尝试搜索现有问题。【参考方案6】:

固定 headercss 位置。

.headercss 
    width: 100%;
    height: 320px;
    background-color: #000000;
    position: fixed;
    top:0

然后给内容容器一个 320px 的 padding-top,这样它就不会在标题后面。

【讨论】:

【参考方案7】:

您只能通过两次创建菜单来使用 CSS。这并不理想,但它让您有机会对菜单进行不同的设计,一旦它位于顶部,您将只有 CSS,没有 jquery。 这是 DIV 的示例(如果您愿意,当然可以将其更改为 NAV):

<div id="hiddenmenu">
 THIS IS MY HIDDEN MENU
</div>
<div id="header">
 Here is my header with a lot of text and my main menu
</div>
<div id="body">
 MY BODY
</div>

然后有以下CSS:

#hiddenmenu 
position: fixed;
top: 0;
z-index:1;
 
#header 
top: 0;
position:absolute;
z-index:2;
 
#body 
padding-top: 80px;
position:absolute;
z-index: auto;
 

这里有一个小提琴供你看:https://jsfiddle.net/brghtk4z/1/

【讨论】:

太臭了。为了互联网,请不要这样编码【参考方案8】:
/* Add css in your style */


.sticky-header 
    position: fixed;
    width: 100%;
    left: 0;
    top: 0;
    z-index: 100;
    border-top: 0;
    transition: 0.3s;



/* and use this javascript code: */

$(document).ready(function() 

  $(window).scroll(function () 
    if ($(window).scrollTop() > ) 
      $('.headercss').addClass('sticky-header');
     else
      $('.headercss').removeClass('sticky-header');
    
  );
);

【讨论】:

【参考方案9】:

我建议使用 Bootstrap。 http://getbootstrap.com/。这种方法非常简单且重量轻。

<div class="navbar navbar-inverse navbar-fixed-top">
   <div class="container">
      <div class="navbar-collapse collapse">
         <ul class="nav navbar-nav navbar-fixed-top">
            <li><a href="#home"> <br>BLINK</a></li>
                <li><a href="#news"><br>ADVERTISING WITH BLINK</a></li>
                <li><a href="#contact"><br>EDUCATING WITH BLINK</a></li>
                <li><a href="#about"><br>ABOUT US</a></li>
            </ul>
        </div>
    </div>
</div>

您需要将 Bootstrap 包含到您的项目中,其中将包含必要的脚本和样式。然后只需调用类'navbar-fixed-top'。这会成功的。见上例

【讨论】:

请不要发帖duplicate answers - 2。相反,如果您认为是重复问题,请将其标记为重复问题。 谢谢 Rob,以后会做的【参考方案10】:

只需调用此代码并将其调用到您的导航栏以获取粘性导航栏

  .sticky 
        /*css for  stickey navbar*/
        position: sticky;
        top: 0; 
        z-index: 100;
    

【讨论】:

【参考方案11】:

要使标题具有粘性,首先您必须给出 position: fixed;用于css中的标题。然后您可以调整宽度和高度等。我强烈建议您阅读这篇文章。 How to create a sticky website header

这里还有代码可以解决标题以使其具有粘性。

header  
   position: fixed; 
   right: 0; 
   left: 0; 
   z-index: 999;

上面的代码将进入你的 styles.css 文件中。

【讨论】:

以上是关于制作导航栏棒的主要内容,如果未能解决你的问题,请参考以下文章

如何在导航栏上方制作标题?

如何使用 vue js 制作固定导航栏?

PHP全栈开发:CSS Ⅹ 导航栏制作

如何制作可扩展的导航栏

如何制作两行导航栏?

如何制作像 Instagram 一样的导航栏