YAS's VB.NET Tips
 
NetCommons Tips
NetCommons Tips >> 記事詳細

2018/06/03

マウスホバーでポップアップを表示する

Tweet ThisSend to Facebook | by:YAS
 リンクにマウスをのせたとき,ポップアップでサムネイルを表示させる。
  左の文字にマウスをのせると,サムネイル画像がポップアップする。
 一見よさそうだが,マウスをのせていないとき,画像は見えないが,opacity 0で文字の右側に「表示されている」ので,右クリックに反応したり,画像の下のリンクがクリックできなかったりする。だからといって,display:none;で非表示にしておき,hover時にdisplay:block;にすると,アニメーションで表示されない。

<style>
.popup_container {
  position:relative;
}
.popup {
  position: absolute;
  top: -50px;
  left: 100px;
  opacity: 0;
  box-shadow: 5px 5px 5px 0px rgba(0, 0, 0, 0.5);
  transiton-property: opacity, top;
  transition-duration: 0.5s;
}
.popup_trigger:hover + .popup {
  opacity: 1;
  top: -80px;
}
</style>
<div class="popup_container">
    <a class="popup_trigger" href="./index.php?key=jobqknn6w-45#_45">
      学校だより4月号
    </a>
    <div class="popup">
        <img src="./?action=common_download_main&upload_id=156" style="border:2px solid rgb(204, 204, 204);" />
    </div>
</div>

 display:noneで非表示にしておき,マウスホバー時にdisplay:blockにすると,display:blockのときにDOMが生成されるようで,opacityやtopがアニメーション後の設定になってしまい,結果としてアニメーションで表示されない。transitionプロパティではなく,animationプロパティを使えば,アニメーションで表示されるが,animationプロパティは戻るときに一瞬で戻ってしまい,今ひとつかっこ悪い。
 そこで,height:0pxとoverflow:hiddenで非表示にしておき,マウスホバー時にheightを画像の高さに設定すると,思った通りの動作をするが,heightをautoにするとアニメーションされないので,数値で設定する必要がある。heightが変わるところをアニメーションで表示したくないので,heightのtransition-delayにマイナス値を設定して,heightの変化がアニメーションで表示されないようにする。 
  他にも,少しかっこよくするため,戻るときのtransition-durationを1sにしてみた。

<style>
.popup_container2 {
  position:relative;
}
.popup2 {
  max-height:0vh;
  overflow:hidden;
  position: absolute;
  top: -50px;
  left: 100px;
  opacity: 0;
  box-shadow: 5px 5px 5px 0px rgba(0, 0, 0, 0.5);
  transition-property: max-height,opacity,top;
  transition-duration: 1s;
  transition-delay: 1s,0s,0s;
}
.popup_trigger2:hover + .popup2 {
  transition-duration: 0.5s;
  transition-delay: -0.5s,0s,0s;
  max-height: 100vh;
  opacity: 1;
  top: -80px;
}
</style>
<div class="popup_container2">
    <a class="popup_trigger2" href="./index.php?key=jobqknn6w-45#_45">
      学校だより4月号
    </a>
    <img class="popup2" src="./?action=common_download_main&upload_id=156" style="border:2px solid rgb(204, 204, 204);" />
</div>

 上のコードは,heightを数値で指定するので,複数のサイズの異なる画像には共用できない。そこで,max-height:100vhを使えば画像の高さを指定する必要がなく,複数サイズの画像でコードを共用できる。ただし,max-heightはdiv要素には効かず,img要素に直接指定する必要がある。画像にキャプションをつける場合などには使えないので,上のコードを使うことになる。
<style>
.popup_container3 {
  position:relative;
}
.popup3 {
  max-height:0vh;
  overflow:hidden;
  position: absolute;
  top: -50px;
  left: 100px;
  opacity: 0;
  box-shadow: 5px 5px 5px 0px rgba(0, 0, 0, 0.5);
  transition-property: max-height,opacity,top;
  transition-duration: 1s;
  transition-delay: 1s,0s,0s;
}
.popup_trigger3:hover + .popup3 {
  transition-duration: 0.5s;
  transition-delay: -0.5s,0s,0s;
  max-height: 100vh;
  opacity: 1;
  top: -80px;
}
</style>
<div class="popup_container3">
    <a class="popup_trigger3" href="./index.php?key=jobqknn6w-45#_45">
      学校だより4月号
    </a>
    <div class="popup3">
        <img src="./?action=common_download_main&upload_id=156" style="border:2px solid rgb(204, 204, 204);" />
    </div>
</div>


参考にしたページ
cssだけでホバー時にバルーンポップアップを表示させる
display: noneはtransitionできないので
width、heightがautoの要素にtransitionを適用する
01:13 | 投票する | 投票数(1) | コメント(0)