仅使用HTML / CSS修复了导航栏

时间:2016-02-02 13:32:07

标签: javascript jquery html css flexbox

正如我所说的标题,我想制作一个固定导航栏的网页。 (我知道如何将它放在文档的顶部)。 所以我尝试了2-3个布局(Flexbox和Columns)。 但是他们两个都不能让它完美地运作。 这是我的测试代码,虽然你可以看到它 的jsfiddle 
 
 $(窗口).scroll(函数(){
 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&#34 ;;
 $(" NAV&#34)。CSS("顶部"" 0");
 }
 否则
 navs.style.position =" relative&#34 ;;
 });
 * {
 box-sizing:border-box;
 }
 html,body {
 font-size:35px;
 填充:0;
 保证金:0;
 display:block;
 }
 .row :: after {
 内容:"";
 明确:两者;
 display:block;
 }
 页眉,页脚{
 text-align:left;
 填充:30px;
 保证金:0;
 
 }
 
 标题h1 {
 保证金:0;
 填充:0;
 }
 导航{
 background-color:#ff00ff;
 位置:相对;
 overflow-y:scroll;
 身高:100%;
 顶部:0;
 }
 ul {
 / *溢出:滚动; * /
 }
 部分{
 background-color:#ff0000;
 填充: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>
 <报头GT;< H1> HELL<!H1>< /报头>
 < div class =" row">
 < nav class =" col-3">
 < UL>
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>第三< /立GT;
 <李>首先< /立GT;
 <李>第二个< /立GT;
 <李>端< /立GT;
 < / UL>
 < / NAV>
 < section class =" col-9">
 < p> Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque sed ex turpis。 Cras luctus nibh lectus,在ullamcorper ex tempor eleifend。 Nulla bibendum,eros an consequat vestibulum,orci massa fermentum quam,sed commodo nunc ex vitae nisl。 Aliquam ullamcorper interdum est nec tincidunt。
 Lorem ipsum dolor坐下来,精致的adipistur elit。 Quisque sed ex turpis。 Cras luctus nibh lectus,在ullamcorper ex tempor eleifend。 Nulla bibendum,eros an consequat vestibulum,orci massa fermentum quam,sed commodo nunc ex vitae nisl。 Aliquam ullamcorper interdum est nec tincidunt。
 Lorem ipsum dolor坐下来,精致的adipistur elit。 Quisque sed ex turpis。 Cras luctus nibh lectus,在ullamcorper ex tempor eleifend。 Nulla bibendum,eros an consequat vestibulum,orci massa fermentum quam,sed commodo nunc ex vitae nisl。 Aliquam ullamcorper interdum est nec tincidunt。
 Lorem ipsum dolor坐下来,精致的adipistur elit。 Quisque sed ex turpis。 Cras luctus nibh lectus,在ullamcorper ex tempor eleifend。 Nulla bibendum,eros an consequat vestibulum,orci massa fermentum quam,sed commodo nunc ex vitae nisl。 Aliquam ullamcorper interdum est nec tincidunt。
 < / P>< /节>
 < / DIV>
 <页脚>< H3> HELL<!H3>< /页脚>
 
 
 首先:我想知道有没有办法在没有js和CSS的情况下做到这一点? (或至少其中一些。) 第二:做这些事情的最佳方法是什么? 第三:我想如何用一个小元素填充文档的高度? (我实际上杀了我自己,但无法找到!) 第四:如果你能给我一个样品,我很感激。 提前致谢。 PS:我知道我是否使用 .col-9 {float:right;} 它让它变得更好,但它不是一个选择!

1 个答案:

答案 0 :(得分:1)

当导航为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>
&#13;
&#13;
&#13;