<header> と <footer> に position:fixed を指定しているため。
このページをスクロールしても、<header> と <footer> は固定されています。
このページのHTML抜粋
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Position fixed Demo:ほんっとにはじめてのHTML5とCSS3</title>
<!--中略-->
</head>
<body>
<header>
<h1><a href="#">Position fixed Demo</a></h1>
<nav>
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">MENU1</a></li>
<li><a href="#">MENU2</a></li>
<li><a href="#">MENU3</a></li>
<li><a href="#">MENU4</a></li>
</ul>
</nav>
</header>
<div id="container">
<!--中略-->
</div>
<footer>
<small>Copyright © ほんっとにはじめてのHTML5とCSS3 All Rights Reserved.</small>
</footer>
</body>
</html>
このページのCSS抜粋
header, footer {
width:100%;
position:fixed;
background:rgba(0,0,0,.5);
color:#fff;
z-index:1}
header {
top:0;
padding:10px}
footer {
bottom:0;
padding:3px}
ここで、最初のセクションにページ内リンクをしてみます→「最初のセクションへ」
なんか変ですね。<header>要素を固定位置指定したために、その分ズレてます。
ではちょっとこのまま ↓下の方にスクロールしてもらって...
今度は2番目のセクション(このセクション)の先頭にリンクしてみます→「2番目のセクションへ」
今度はうまくいきました。
固定位置指定された <header>に隠れていませんね。
これは、下記のように、<header>の高さ分を足した「ネガティブマージン + padding」の組み合わせで指定しています。
#section2 { /*←リンク先に指定したidです*/
margin-top:-75px;
padding-top:75px}
/*このページの場合、<header>の高さは55px。
セクションの上マージンは20pxにしたいので合計75pxで調整しています*/