↑こちらの動画をご覧ください。要素にhoverすると、ツールチップが表示できます。cssのみでできているので、とても簡単に実装することができます。
それでは次のセクションから、上記の動画のような、htmlとcssだけで作成できるツールチップを実装するためのコードを書いていきます。
コードをご紹介
[html]
<div class="tooltip-container"> <p class="tooltip-container-target">hoverでTooltipを表示</p> <span class="tooltip-item">Only CSS Tooltip</span> </div> <div class="tooltip-container"> <p class="tooltip-container-target">hoverで右にTooltipを表示</p> <span class="tooltip-item is-right">Only CSS Tooltip</span> </div> <div class="tooltip-container"> <p class="tooltip-container-target">hoverで左にTooltipを表示</p> <span class="tooltip-item is-left">Only CSS Tooltip</span> </div> <div class="tooltip-container"> <p class="tooltip-container-target">hoverで上にTooltipを表示</p> <span class="tooltip-item is-top">Only CSS Tooltip</span> </div>
↑上から順に、デフォルト状態(下に出ます)、
右に表示、左に表示、上に表示です。
[css]
.tooltip-container {
margin: 100px auto;
position: relative;
/* width: max(264px, min(calc(100vw - 8px), 600px)); */
text-align: center;
width: clamp(240px, calc(100vw - 8px), 240px);
}
.tooltip-item {
background: hsla(180, 75%, 70%, 1);
border-radius: 5px;
color: #fff;
display: block;
font-size: .75rem;
left: 50%;
opacity: 0;
padding: .25rem .75rem;
position: absolute;
transform: translateX(-50%);
transition: opacity .3s;
width: 7rem;
}
.tooltip-container-target {
cursor: pointer;
display: block;
}
.tooltip-container-target:hover + .tooltip-item {
opacity: 1;
}
.tooltip-item.is-left {
left: -140px;
top: 50%;
transform: translateY(-50%);
}
.tooltip-item.is-right {
left: initial;
right: -140px;
top: 50%;
transform: translateY(-50%);
}
.tooltip-item.is-top {
left: 50%;
top: -2.5rem;
transform: translateX(-50%);
}
↑重要なのは、
.tooltip-container-target:hover + .tooltip-item
この部分です。隣接セレクタ( + ) を使用して、
.tooltip-container-target の「隣の」
.tooltip-item に対してのスタイルを設定していると言うことです。
ツールチップが表示されるデフォルト位置は下で、そのほかは
.is-left, .is-right, .is-top
という各classを付与することで、それぞれの位置に表示させている仕組みになります。
この記事のまとめ
今回は、いたってシンプルながら、
結構使い道のある、cssとhtmlだけで作るツールチップについて、作り方をご紹介しました。
これ、なんか見覚えがあるなと思われる方もいるかもしれませんが、
こちらの記事で以前ご紹介している Vuetify の v-tooltip と、見た目的には同じようなUIパーツですよね。
意外にも、こんな単純なコードで、似たようなパーツを再現できます。
特定の何かに依存せず、
こうした、シンプルかつ基礎的な仕組みでできるUIパーツの作り方をたくさん覚えておくと
仮にVuetifyが使えなかった案件ではどうするのか等、
色々な状況に対応しやすくなりますのでおすすめです。
当サイトでは Vuetify や Vue.js 等にからめた内容の記事が多い傾向ですが、
このようなシンプルなコードで再現できるパーツの作例についての記事も、
今後、数を増やしていけたらと考えています。
※この記事は、内容の品質向上を目的に、随時更新を行う場合があります。