ポップアップ(ドロップダウン) メニュー の余白を調整する - CSS

こちらの記事で紹介したドロップダウン型のメニューの余白を調整するコードを紹介します。

コード

HTMLファイル (popupmenu03.html)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link rel="stylesheet" type="text/css" href="popupmenu03.css" />
</head>
<body>

  <ul id="menu">
    <li>
      <a href="">メニュー1</a>
      <ul>
        <li><a href="">サブメニュー1-1</a></li>
        <li><a href="">サブメニュー1-2</a></li>
        <li><a href="">サブメニュー1-3</a></li>
      </ul>
    </li>
    <li>
      <a href="">メニュー2</a>
      <ul>
        <li><a href="">サブメニュー2-1</a></li>
        <li><a href="">サブメニュー2-2</a></li>
      </ul>
    </li>
    <li>
      メニュー3
      <ul>
        <li><a href="">サブメニュー3-1</a></li>
        <li><a href="">サブメニュー3-2</a></li>
        <li><a href="">サブメニュー3-3</a></li>
      </ul>
    </li>
  </ul>
</body>
</html>

CSSファイル (popupmenu03.css)

#menu {
  list-style: none;
  padding: 0px 0px 0px 0px;
}

#menu>li {
  display: block;
  position: relative;
  float: left;
  background-color:#808080;
  color: #ffffff;
  padding: 5px 15px 5px 15px;
}

#menu>li>a {
  text-decoration:none;
  color: #ffffff;
}

#menu>li:hover {
  background-color: #ff6a00;
}

#menu>li>ul { 
  display: none; 
  padding: 0px 0px 0px 0px;
}

#menu>li:hover>ul {
  display: block;
  position: absolute;
  margin-top:5px;
  margin-left:-15px;
}

}
#menu>li:hover>ul>li {
  float: none;
}

#menu>li:hover>ul>li>a {
  background: #ff6a00;
  padding: 5px 15px 5px 15px;
}

#menu>li:hover>ul>li>a:hover { 
  background: #ff0000; 
}

#menu>li>ul>li>a {
  display: block;
  text-decoration: none;
  color: #ffffff;
  white-space: nowrap;
}

解説

コードはこちらの記事とほぼ同じです。以下変更点を紹介します。

#menu>li {
  display: block;
  position: relative;
  float: left;
  background-color:#808080;
  color: #ffffff;
  padding: 5px 15px 5px 15px;
}
上記は親メニューの余白を設定しています。余白はpaddingプロパティを指定します。(Marginで指定すると外側に余白ができメニューが離れているように見えるため)

#menu>li:hover>ul {
  display: block;
  position: absolute;
  margin-top:5px;
  margin-left:-15px;
}

#menu>li:hover>ul>li>a {
  background: #ff6a00;
  padding: 5px 15px 5px 15px;
}
上記がポップアップ表示されるメニューの余白を設定している部分です。こちらも親メニューと同様にpaddingプロパティで余白を指定します。また、paddingの指定だけではポップアップメニューが親メニューと重なってしまうため、枠全体を定義するulのスタイルで余白分marginを調整して親メニューに重ならないようにしています。

実行結果

HTMLファイルを表示すると下図の画面が表示されます。メニュー間の余白がとられていることがわかります。


ポップアップ表示されるメニューも余白がとられています。



補足 - margin を設定しない場合

単純にmarginを記述しない場合

marginを設定しなかった場合の表示結果を紹介します。
#menu>li:hover>ul {
  display: block;
  position: absolute;
  margin-top:5px;
  margin-left:-15px;
}
の部分のmarginを設定せず、下記のコードに変更します。
#menu>li:hover>ul {
  display: block;
  position: absolute;
}

表示結果

上記のHTMLファイルを表示すると下図の表示となります。ポップアップメニューがメインメニューに被さって表示されています。(ただし親メニューのほうが上に表示されています。)


メニューにマウスポインタを乗せた場合も同様にメインメニューのほうが上に表示されています。


z-indexを記述した場合

メニューが重なっている外観にしたい場合は、merginを設定しないことで実現できます。ただし先の例ではポップアップメニューがメインメニューの裏側に隠れてしまいます。z-indexプロパティを設定することでこの問題を回避できます。
#menu>li:hover>ul {
  display: block;
  position: absolute;
  margin-top:5px;
  margin-left:-15px;
}
の部分を下記に変更します。
#menu>li:hover>ul {
  display: block;
  position: absolute;
  z-index:10;
}

表示結果

HTMLファイルを表示すると下図の画面が表示されます。


Z-Indexを指定しているため、ポップアップメニュー側が上に表示されます。



著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
最終更新日: 2021-02-03
作成日: 2013-12-10
iPentec all rights reserverd.