position: fixed; でスクロールすると文字が重なる

概要

メニューを上部に固定するために、position: fixed; を使用した際に、その下のコンテンツ(メイン)部分をスクロールするとメニューの文字とコンテンツの文字が重なる場合の解決方法について説明します。

ソース

HTML

  • <body class="fixed-menu-body">
  • <div>
  •   <ul id="fixed-menu">
  •     <li><a href="#">メニュー1</a></li>
  •     <li><a href="#">メニュー2</a></li>
  •     <li><a href="#">メニュー3</a></li>
  •   </ul>
  •   <div id="main">ここにコンテンツが入ります。</div>
  • </div>
  • </body>

CSS

  • .fixed-menu-body {margin-top: 0px;}
  • #fixed-menu {
  •   margin: 0px;
  •   padding: 0px;
  •   list-style-type: none;
  •   position: fixed;
  •   background-color: #FFFFFF;
  • }
  • #fixed-menu:after {
  •   content: "";
  •   clear: both;
  •   display: block;
  • }
  • #fixed-menu li {
  •   width: 110px;
  •   float: left;
  •   text-align: center;
  •   font-size: 20px;
  •   font-weight: bold;
  • }
  • #fixed-menu li a {text-decoration: none; color: #000000;}
  • #fixed-menu li:hover a {text-decoration: underline;}
  • #main {padding-top: 30px; margin: 0px;}

表示例

ソースの解説

CSSの解説

  • #fixed-menu {
  •   margin: 0px;
  •   padding: 0px;
  •   list-style-type: none;
  •   position: fixed;
  •   background-color: #FFFFFF;
  • }

メニューのulタグ(ulタグの中のliタグでも可)に background-color を指定します。指定がない場合は背景は透明となるため、スクロールした際にコンテンツの文字や画像がメニューと重なります。

参考:表示例 スクロールするとメニューと文字が重なる

#main {padding-top: 30px; margin: 0px;}

メニューの下に来るコンテンツを入れるブロックに padding-top を指定します。指定しない場合、メニューとコンテンツ部分が重なってしまいます。そのため、メニューの高さよりも大きな値を指定する必要があります。また、margin: 0px; を指定します。これを指定しておかないと、ブロック main の中に margin を指定したブロックを入れると、メニューの上部に隙間ができてしまいます。

.fixed-menu-body {margin-top: 0px;}

body タグに margin-top: 0px; を指定します。これを指定しないとスクロールした際にメニューの上とページの上部との間に隙間ができて文字が見えてしまいます。

参考:表示例 メニューの上部に隙間ができる

表示例 スクロールするとメニューと文字が重なる

表示例 メニューの上部に隙間ができる