有多种方法可以做到这一点:
- 框架
- 单独的页面,每个页面都包含一个公共导航段
- 包含多个虚拟页面的单个页面
选项 1 和 2 是不言自明的。2 比 1 的优势在于书签和浏览器历史记录既美观又简单。现在很多人都在转向3。
这是一个简单的 JSFiddle,我作为选项 3 的示例放在一起。它很丑,是的,我没有费心设计任何东西。
http://jsfiddle.net/sJ6Bj/4/
这是HTML:
<html>
<head>
<title>Two-pane navigation</title>
</head>
<body>
<div id="content">
<div id="navigation">
<h1>Navigation</h1>
<ul>
<li><a href="#page1" class="page-link">Page 1</a></li>
<li><a href="#page2" class="page-link">Page 2</a></li>
</ul>
</div>
<div id="pages">
<div id="page1" class="page">
<h1>Page 1</h1>
<p>This is all the lovely content on page 1.</p>
<p>Let's add a bunch of stuff to make it scroll.</p>
<p style="font-size: 72px">.<br/>.<br/>.<br/>.<br/>.<br/>.</p>
<p>This is at the bottom of the page.</p>
</div>
<div id="page2" class="page">
<h1>Page 2</h1>
<p>This is all the lovely content on page 2.</p>
</div>
</div>
</div>
</body>
</html>
JavaScript(假设已加载 JQuery):
$(document).ready(function() {
$(".page-link").on("click", function(e) {
$(".page").fadeOut(250);
setTimeout(function() { $($(e.currentTarget).attr("href")).fadeIn(250); }, 250);
});
});
CSS:
#navigation {
position: fixed;
width: 250px;
height: 100%;
border-right: 1px solid black;
}
#pages {
margin-left: 270px; /* 250px + 20px of actual margin */
}
.page {
position: relative;
display: none;
overflow: scroll;
}
正如@RobG 上面所说,浏览器目前认为这一切都是一页。但是,使用JQuery BBQ之类的东西,可以毫不费力地重新添加(例如,请参见此处)。
为什么要选择 div 而不是框架?有各种原因。
- 框架不能加书签(见上面的警告)。
- 帧的过渡和动画支持非常有限,并且对于单独的完整页面,它是不存在的。我在上面的小提琴中做了一个简单的淡入/淡出来演示 div 的可能性。
- 当用户更改“页面”时,不需要重新加载任何内容(尽管相反,可能需要预先加载更多内容)。