制作者の活動(PR)。

アイドル・堀北真希ちゃんにうさ耳を着けた制作者の創作キャラクタ。次
主な作品

堀北真希ちゃんのボシュロム社コンタクトレンズ用品コマーシャルへの出演に因んだ、堀北真希うさぎのレンズの仮想CM動画

CSSで実現するメニューの表示/非表示切替。

CSSの小技として、普段は隠れているけどマウスカーソルを合わせると表示されるメニューを実現する方法です。

CSSで実現するメニューの表示/非表示切替・目次。

CSSで実現するメニューの表示/非表示切替の概要。

CSSには:hover擬似クラスなどが定義されており、これに依りマウスカーソルを合わせる事で表示/非表示を切り替える事が出来ます。

残念な事に、インターネットエクスプローラ 6.0まででは正常な動作は期待出来ないようですので、IEは7.0以降と言う事にしましょう。

CSSで実現するメニューの表示/非表示切替のサンプル。

試しに、PC環境の

などでご覧の方は、以下のブロックにマウスカーソルを当ててご覧ください。

すると、主なアイドルの一覧が表示される事でしょう。

主なアイドル

実際のマークアップとスタイル定義。

ここで、HTMLのマークアップは以下のようになります。

<dl class="hiddenMenu">
    <dt>主なアイドル</dt>
    <dd>
        <ul>
            <li><a href="">堀北真希</a></li></il>
        </dd>
    </dl>

ご覧のように、何の変哲も種も仕掛けもない定義リストです。強いて言えば、クラス名が附与されている事くらいでしょうか。

しかし、ここに以下のCSSを適用する事で、動的に表示/非表示が変えられるようになるのです。

/* 普段のスタイル */
dl.hiddenMenu>dd {
    display: none;
    }

dl.hiddenMenu:hover>dt:after {
    color: #ccc;
    content: "(一覧の表示)";
    text-decoration: none;
    }

/* マウスカーソルが在るときのスタイル */
dl.hiddenMenu:hover>dd {
    display: block;
    }

dl.hiddenMenu>dt:after {
    color: #060;
    content: "(一覧の表示)";
    text-decoration: underline;
    }

からくりは実に単純で、普段のスタイルとして、

  1. <dl class="hiddenMenu">要素直下の<dd>要素は、普段は非表示にしております。(但し、:after擬似要素を認識しないインターネットエクスプローラ 7.0では無効)
  2. 一方、<dl class="hiddenMenu">要素直下の<dt>要素の直後には、下線付きで (一覧の表示) と表示させる事で、アンカーのように見せております。(但し、:after擬似要素を認識しないインターネットエクスプローラ 7.0では無効)

そして、当該要素にマウスカーソルが乗ったときのスタイル、すなわちホヴァーされた <dl class="hiddenMenu">要素でのスタイルとして、

  1. <dl class="hiddenMenu">要素直下の<dd>要素を、ブロックレヴェル要素のスタイルで表示させます。
  2. 一方、<dl class="hiddenMenu">要素直下の<dt>要素の直後に表示していた文字を、薄いねずみ色にする事で無効であるように見せております。(但し、:after擬似要素を認識しないインターネットエクスプローラ 7.0では無効)

要するに、:hover擬似クラスが適用される要素の下位要素についてのスタイルを特別に定める事で、マウスカーソルが乗っている状態でのみ表示させる事が可能になると言う訳です。

ただ、インターネットエクスプローラ 6.0までではそのような動作をしてくれないので、DOMを活用するか表示したままにしておくかのどちらかとなるでしょう。

この他に考えられる使い方。

サイトメニューで使う。

サイトのメニューはしばしば定義リストとしてマークアップされますが、説明文は普段は隠しておいて、メニューのアンカーにマウスが乗ったときに説明文が表示されるようにすると言う事が考えられます。

例えば、以下のようなメニューがあったとします。

<dl class="menu">
    <dt><a href="About.html">当サイトについて</a></li>
    <dd>当サイトについての総合案内です。</dd>

    <dt><a href="HTML/index.html">HTMLとCSS</a></li>
    <dd>WWWで公開する文書の作成に欠かせないHTMLとCSSについての簡単な解説です。</dd>

    <dt><a href="I_love_Horikita/index.html">堀北真希ちゃん</a></li>
    <dd>我がアイドル・俺の嫁・堀北真希ちゃんについてのコーナです。</dd></dl>

この場合、CSSで以下のように書くと、何とJAVAスクリプト無しでマウスカーソルが現れたときのみ表示させる事が出来るようになります。

dl.menu dd {
    display: none;
    }

dl.menu dt:hover+dd {
    display: block;
    }

余談・クリックで切替は出来ないのか?

今回のスタイル定義は、マウスカーソルを合わせると前触れも無くいきなり表示されるとと言うものであり、ちょっと使い難いと思った方もいらっしゃるかも知れません。

それでは、特定の箇所をクリックしたときに表示されるようにする事はCSSだけでも可能でしょうか。

結論から言うと、CSSだけではちょっと無理でしょう。

クリックについては :active擬似クラスがありますが、これはマウスボタンを押している間だけ有効となります。

クリックしたボタンから手が離れると折角表示させたメニューがまた隠れてしまい、使い物にならないでしょう。

結局、クリックでの切替を求めるのであれば、JAVAスクリプトでDOM操作を行う必要があります。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com