2017/08/01

CSS備忘録 CSSだけでドロップダウンメニューを作る

CSSだけでマウスオンすると展開するメニューを作ってみました。
これHTMLだから簡単だけど、GUIアプリで作ったら大変だなきっと・・・。とか思ってます。

それではサンプルです。

目標

CSSだけでマウスオンすると展開するメニューを作る。

sample.html

<!DOCTYPE html>
<html>
  <head>
    <meta content="IE=edge" http-equiv="X-UA-Compatible" />
    <link href="./samplecss.css" rel="stylesheet" type="text/css" />
    <title>sample</title>
  </head>
  <body>
    <div class="container">
      <header>ヘッダーだよ 
        <div id="box">Menu 
        <ul id="list">
          <li class="item">
            <a href="./LinkA.html">リンクA</a>
          </li>
          <li class="item">
            <a href="./LinkB.html">リンクB</a>
          </li>
          <li class="item">
            <a href="./LinkC.html">リンクC</a>
          </li>
          <li class="item">
            <a href="./LinkD.html">リンクD</a>
          </li>
        </ul></div>
      </header>
      <main>meinだよ</main>
    </div>
  </body>
</html>
 

samplecss.html


* {
  margin : 0;
  padding    : 0;
  box-sizing : border-box;
}
html{
  background-color: #FFAAAA;
}
a{
  text-decoration : none;
}
.container{
  max-width : 900px;
  margin    : 0 auto;
}
header{
  display: block;
  position: relative;
  height: 40px;
  background-color: #AAFFFF;
}
#box{
  position   :absolute;
  top        : 0;
  right      : 0;
  height     : 40px;
  width      : 100px;
  padding    : 10px;
  text-align : center;
  background : #FFFF55;
}
#list{
  position : absolute;
  display  : none;
  top      : 40px;
  right    : 0;
}
.item{
  list-style-type : none;
  width           :100px;
  background      :#AAAAFF;
}
.item a{
  display : block;
  padding10px;
  color   : #FFFFFF;
}
#box:hover
  color           : #FFFFFF;
  background-color: #5555FF;
}
#box:hover  #list,
#box:hover  #list .item{
  display: block;
}
.item:hover{
  background : #5555AA
}
 

表示例1:メニュー非表示

表示例2:メニュー表示(menuの部分をマウスオンしています。)

ポイント

  • HTML側
    1. div要素でマウスオンする対象を作る。
    2. マウスオンするdiv要素の子要素としてul要素を設定
    3. <div id="box">Menu 
        <ul id="list">
          <li class="item">
            <a href="./LinkA.html">リンクA</a>
          </li>
          <li class="item">
        
        ・
        ・
        </ul>
      </div>
  • CSS側
    1. ul要素,li要素はdisplay:noneを指定し描画されないように指定する。
    2. マウスオンする対象として作ったdiv要素の疑似クラス:hoverの子孫要素で、
      ul要素とli要素に display:block を指定する
    3. #list{
        position : absolute;
        display  : none;
        top      : 40px;
        right    : 0;
      }
      .item{
        list-style-type : none;
        width           :100px;
        background      :#AAAAFF;
      }
      .item a{
        display : block;
        padding10px;
        color   : #FFFFFF;
      }
      #box:hover
        color           : #FFFFFF;
        background-color: #5555FF;
      }
      #box:hover  #list,
      #box:hover  #list .item{
        display: block;
      }
      .item:hover{
        background : #5555AA
      }
これでCSSだけでマウスオンすると開くメニューが作れました。
結構使えそうな部品がわかってきたので、何かWebページを作ってみたいところです。
うーん、コンテンツが特に何もないなぁ。

参考になれば幸いです。

0 件のコメント:

コメントを投稿

AWSに手を出してフレームワークも使ってみたが・・・。

サイトを作り直しました。 AWS上に構築した Content created by AXY を作り直しました。 具体的にはbottle.pyを使ったpythonで構築したサイトからPHP7を使用したサイトに再構築しています。 特別何か問題点があったというわけで...