[jQuery]z-indexを使わずに特定の要素を前面に表示する

Design重視のweb siteの場合に、HTMLの構造を無視してTitleだけ全ての要素より前面に表示したい場合がある。

z-indexをゴニョゴニョすることで解決する場合もあるけど、なぜか前面に出てくれなかったので無理やり前面にするやり方。

追記: 出来なかったのは親要素をoverflow: hiddenにしてたから。

考えた末にjQuery UIでも使っているようなbodyタグにappendして、positionを設定する方法にした。jQuery UI 1.8からpositionというUtilityが追加されているので、これを使うとサクっと実現できる。

Sample Script

jQuery(function(){
    var jSelect = jQuery("#tag-id");
    var jParent = jSelect.parent();
    jQuery("body").append(jSelect);
    jSelect.position({
      my: "left top", at: "left top", of: jParent, offset: "-20 -10"
    });
});

tag-idのタグを一度bodyタグの直下に移動させてから親要素だった位置に戻す。offsetで少しだけ左上に移動させている。

 

<追記>
この方法timingによって、表示されなかったり安定しない。setTimeoutも使ってみたけど、2つ以上要素があるとfirefox以外ではズレる。cssのpositionを使った方が安全。

まぁ、こんな方法もあるという感じで。