简体   繁体   English

固定导航栏仅适用于HTML / CSS

[英]Fixed navbar only with HTML/CSS

As i said i the title, i wanna make a web page with fixed navbar in aside . 就像我说的标题一样,我要制作一个网页, 旁边有固定的导航栏。

(I know how to make it in the top of document) . (我知道如何在文档的顶部)

So i tried 2-3 layout ( Flexbox and Columns ) . 所以我尝试了2-3版式FlexboxColumns

But with neither of them i couldn't make it work perfectly. 但是没有它们我都无法使其完美运行。

This is my test code, although you can see it in jsFiddle 这是我的测试代码,尽管您可以在jsFiddle中看到它

 $(window).scroll(function(){ var navs = document.getElementsByTagName("nav")[0]; var heigh = $("header:first").outerHeight(); var wid = $("nav:first").width(); if (wid != $(window).width() && document.body.scrollTop >= heigh) { navs.style.position = "fixed"; $("nav").css("top","0"); } else navs.style.position = "relative"; }); 
 * { box-sizing: border-box; } html, body { font-size: 35px; padding: 0; margin: 0; display: block; } .row::after { content: ""; clear: both; display: block; } header, footer { text-align: left; padding: 30px; margin: 0; } header h1 { margin: 0; padding: 0; } nav { background-color: #ff00ff; position: relative; overflow-y: scroll; height: 100%; top: 0; } ul { /*overflow: scroll;*/ } section{ background-color: #ff0000; padding: 0 80px; } .col-3 {width: 25%;float: left;} .col-9 {width: 75%;float: left;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <header><h1>HELL!<h1></header> <div class="row"> <nav class="col-3"> <ul> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>end</li> </ul> </nav> <section class="col-9"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. </p></section> </div> <footer><h3>HELL!<h3></footer> 

So First : I want to know is there any way to do that without js and just with CSS ? 所以首先 :我想知道没有js并且仅使用CSS有没有办法做到这一点?

(or at least some of it.) (或至少其中一些)。

Second : What's the best way to doing such things? 第二 :做这种事情的最好方法是什么?

Third : How i suppose to fill height of document with a little element? 第三 :我应该如何用一点元素填充文档的高度?

(I actually killed my self, but couldn't find out!) (我实际上杀死了我自己,但找不到!)

Fourth : If you could give me a sample, i appreciate it. 第四 :如果您能给我样品,我将不胜感激。

Thanks in advance. 提前致谢。

PS: I know if i use PS:我知道我是否使用

.col-9 {float: right;}

It makes it better, but it's not an option! 它使它变得更好,但这不是一个选择!

Apply some left margin to the container on the right when the nav is fixed since it gets removed from the flow. fixed导航后,将其左边的边距应用于右侧的容器,因为它已从流中删除。

 $(window).scroll(function() { var navs = document.getElementsByTagName("nav")[0]; var heigh = $("header:first").outerHeight(); var wid = $("nav:first").width(); if (wid != $(window).width() && document.body.scrollTop >= heigh) { navs.style.position = "fixed"; $("nav").css("top", "0"); // Here is the fix $('.col-9').css('margin-left', wid); } else { navs.style.position = "relative"; $('.col-9').css('margin-left', 0); } }); 
 * { box-sizing: border-box; } html, body { font-size: 35px; padding: 0; margin: 0; display: block; } .row::after { content: ""; clear: both; display: block; } header, footer { text-align: left; padding: 30px; margin: 0; } header h1 { margin: 0; padding: 0; } nav { background-color: #ff00ff; position: relative; overflow-y: scroll; height: 100%; top: 0; } ul { /*overflow: scroll;*/ } section { background-color: #ff0000; padding: 0 80px; } .col-3 { width: 25%; float: left; } .col-9 { width: 75%; float: left; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <header> <h1>HELL!<h1></header> <div class="row"> <nav class="col-3"> <ul> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>third</li> <li>first</li> <li>second</li> <li>end</li> </ul> </nav> <section class="col-9"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed ex turpis. Cras luctus nibh lectus, in ullamcorper ex tempor eleifend. Nulla bibendum, eros a consequat vestibulum, orci massa fermentum quam, sed commodo nunc ex vitae nisl. Aliquam ullamcorper interdum est nec tincidunt. </p></section> </div> <footer><h3>HELL!<h3></footer> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM