CSSで実現するポップアップメッセージ。

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

CSSで実現するポップアップメッセージ・目次。

CSSで実現するポップアップメッセージの概要。

ポップアップメッセージとは、文書中のある要素にマウスでポイントすると、その傍に表示されるメッセージです。

今日、殆どの視覚系のウェブブラウザにはtitle属性の値がツールティップとしてポップアップするようになっておりますが、これをCSSでもやってみたいと思います。

後述のように余り役には立たないかも知れませんが、手軽な方法として紹介いたします。

CSSだけでポップアップメッセージを実現するための方法。

HTMLのマークアップに依り、幾つかの方法があります。

メッセージをHTML内に埋め込む方法。

先ずは、ポップアップさせたい注釈を当該要素内に埋め込む場合の方法です。

例えば、以下のようにポップアップさせたい項目を持つフレーズを<abbr>要素とし、その直下にポップアップさせたい注釈を何らかのインライン要素(ここでは<span class="remark">要素)としてマークアップしているとします。

<abbr>
    堀北真希ちゃん
    <span class="delimiter">(</span>
        <span class="remark">東京都清瀬市出身のアイドル女優。制作者にとってのいわゆる<em>俺の嫁</em>。</span>
        <span class="delimiter">)</span>
    </abbr>

この方法は

などの利点がありますが、マークアップは若干面倒かも知れません。

HTML内のメッセージをポップアップさせるCSS。

上記のようなHTMLに於いて、<abbr>要素がポイントされたときにメッセージを表示させるCSSは以下の通りです。

abbr {
    position: relative;
    top: 0;
    left: 0;
    }

span.delimiter,
span.remark {
    display: none;
    }

abbr:hover>span.remark {
    display: block;
    position: absolute;
    top: 1.0em;
    left: 1.0em;
    width: 12em;
    margin: 0.5em;
    padding: 0.5em;
    border: #ccc solid 2px;
    background: #efe;
    color: #000;
    font-size: 80%;
    line-height: 1.2em;
    z-index: 2;
    }

大したカラクリではありませんが、

  1. 通常は、CSS非対応向けの区切り符号である<span class="delimiter">要素と、ポップアップさせたい注釈である<span class="remark">要素を非表示にしておきます。
  2. <abbr>要素がポイントされたら、直下の内容となっている<span class="remark">要素をその近くにブロックレヴェル要素として表示させる

と言うものです。

CSSに於いて工夫すべきところ。

ここで、単純に表示させても良いのですが、幾つか工夫が必要になります。

表示位置の指定方法

普通に表示位置を固定するには、<abbr>要素がポイントされた際の直下の<span class="remark">要素について、position: relative プロパティを当てればよいと思われるかも知れません。

ですが、position: relative プロパティだと該当する要素が本来位置すべき空間が空いてしまいます。

このため、position: absolute プロパティを当てる必要があります。

しかし、そのまま単純に position: absolute プロパティを当ててしまうと、何処に表示されるか分からなくなるため、親要素の<abbr>要素で予め position: relative プロパティを当てる事でデフォルトの表示原点を変更する必要があると言う訳です。

ポップアップの重なり方

この方法を単純に行うと、表示されるポップアップメッセージが後続のテキストの下に表示されてしまいます。

なぜなら、後続のテキストは常に上から重ねられる形にレンダリングされるからです。

後続テキストの下敷きにされてしまうのを防ぐため、<abbr>要素がポイントされたときの注釈要素には z-index プロパティに正の値を指定して後続テキストより上に重なるようにします。

尚、<abbr>要素がポイントされたときの注釈要素のスタイル定義では、直下セレクタにしておりますが、これは<abbr>要素の下に更に<abbr>要素があった場合、ポイントの有無にかかわらずそれも表示されてしまう事になるため、直下要素のみに限定したものです。

メッセージをtitle属性値とする方法。

続いて、ポップアップさせたい注釈をtitle属性として記述する場合の方法です。

例えば、以下のようにポップアップさせたい項目を持つフレーズを<abbr>要素とし、そのtitle属性にポップアップさせたい注釈を記述しているとします。

<abbr title="東京都清瀬市出身のアイドル女優。制作者にとってのいわゆる&quot;俺の嫁&quot;。">堀北真希ちゃん</abbr>

この方法は記述は比較的簡単なのですが、何よりも、当該<abbr>要素がポイントされた際にウェブブラウザのデフォルトのツールティップも表示されてしまうと言う欠点があります。

もっとも、ツールティップは一定時間が経つと消えるようなので、長めのメッセージなど読んでいる途中で消えてしまいそうなものなどには良いかも知れません。

また、この方法はインターネットエクスプローラでは 8.0以降でないと対応出来ません。

title属性値であるメッセージをポップアップさせるCSS。

上記のようなHTMLに於いて、<abbr>要素がポイントされたときにtitle属性値を表示させるCSSは以下の通りです。

abbr[title] {
    position: relative;
    top: 0;
    left: 0;
    }

abbr[title]:before {
    display: none;
    }

abbr[title]:hover:before {
    display: block;
    position: absolute;
    top: 1.0em;
    left: 1.0em;
    width: 12em;
    margin: 0.5em;
    padding: 0.5em;
    border: #ccc solid 2px;
    background: #efe;
    color: #000;
    font-size: 80%;
    line-height: 1.2em;
    content: attr(title);
    z-index: 2;
    }

このCSSのカラクリは、

  1. 普段ポイントされていない場合には、title属性を持つ<abbr>要素の前には何も出さないようにし、
  2. title属性を持つ<abbr>要素がポイントされた場合は、その直前にブロックレヴェル要素としたtitle属性値を表示させる

と言うものです。

工夫すべき点はメッセージをテキストに埋め込んでいる場合とほぼ同じで、

の二つを実現しております。

CSSだけでポップアップメッセージを行う方法の欠点。

CSSだけでのポップアップメッセージは、旧型ブラウザ(ここではインターネットエクスプローラ 7.0までも含めます)については最低限の可読性を保証するに留めると割切れば、これほど手軽なものはないでしょう。

わざわざJAVAスクリプトをプログラミングする必要もありません。

ですが、CSSはプログラミング言語ではない故にいろいろ欠点もあります。

表示位置を適切に調整してくれない

CSSはプログラミング言語ではないので、当然ながら条件分岐の機能を持ちません。

このため、右端にあるテキストにポップアップの仕掛けをCSSだけで施した場合、ポイントしてもクライアント領域からはみ出して見られない場合があります。

カーソルの動きやスクロールに合わせて表示位置を変えてくれない

カーソルを動かしても、適切に移動してくれないため、メッセージの下のテキストが読めなくなる場合があります。

また、上の方にあるテキストであれば問題はないかも知れませんが、下の方だとスクロールしなければポップアップメッセージを読み切れない場合があります。

これも、CSSがプログラミング言語でない故の問題点です。

結局、JAVAスクリプトに対応している環境であればスクリプトで表示位置を調整するのがベターとなります。

そうすると、何かの理由でJAVAスクリプトが利用出来ない場合に代用として利用するか、JAVAスクリプトが使える環境に対してはスクリプトを併用する事で使い勝手を良くするなどと言った事が考えられます。

ただ、CSSを用いればこんな事も可能であると言う事は知っていて損はないと思われます。

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

ページ外へのご案内。

marguerite.site@gmail.com