見出し画像

Bootstrap のツールチップを左右にずらして表示する

お仕事で、

ツールチップが画面からはみ出そうだけど、回避して表示できませんか?

と訊かれたので、ちょっとがんばってみました。
画面右端でツールチップを表示する場合などに便利です。

環境

Bootstrap 5.0.0-alpha1
古い Bootstrap でも同様にスタイルを設定することで問題なく使えます。

0. 下準備

適当にツールチップを表示させて、ツールチップ 1 行分の「.tooltip-inner」の高さを確認しておきます。オプションの trigger を 'click' にすると、開発者ツールで確認しやすいです。

画像1

この場合は 29px になりますね。

1. スタイルを追加する

ツールチップをにずらす場合をまず説明しておきます。

.clearfix::after {
	display: block;
	clear: both;
	content: "";
}
.tooltip {
	&.tooltip--shiftleft {
		width: 29px;
		@extend .clearfix;
		.tooltip-inner {
			float: right;
			white-space: nowrap;
		}
	}
}

(※Bootstrap に合わせて SCSS で書いています)
「tooltip--shiftleft」というクラスを追加し、width に下準備で確認したツールチップの「高さ」を設定します。
また、clearfix が適用されるようにしておきます。

「tooltip--shiftleft」にネストした「tooltip-inner」は float を「right」にして、white-space を「nowrap」で親のサイズを突き抜けて表示するようにします。

2. HTML タグを書く

<button class="btn btn-primary" type="button"
data-toggle="tooltip-shiftleft" data-placement="top"
title="左にずれたツールチップ">ツールチップ上</button>

data-toggle を通常の「tooltip」から任意の内容に変えておきます(ここでは「tooltip-shiftleft」)。また、placement は HTML タグに含めておきましょう。

3. JavaScript で tooltip を起動する

const tooltipShiftLeftOption = {
    template: '<div class="tooltip tooltip--shiftleft" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
};
const tooltip = new bootstrap.Tooltip(document.querySelector('[data-toggle="tooltip-shiftleft"]'), tooltipShiftLeftOption);

オプションの template で、スタイルに追加した「tooltip--shiftleft」クラスを追加します。
(className みたいなオプションで、簡単にクラス追加できるようにしてくれないかな……)

Bootstrap 4.x 以前の jQuery を使う書き方だとこうなります。

const tooltipShiftLeftOption = {
    template: '<div class="tooltip tooltip--shiftleft" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
};
const tooltip = $('[data-toggle="tooltip-shiftleft"]').tooltip(tooltipShiftLeftOption);

画像2

ということで、ツールチップをずらして表示することが可能になりました。
右にずらしたい場合は、クラスに「tooltip--shiftright」を同じように追加し、HTML タグ、JavaScript での起動も「left / right」を入れ替える形で記述します。

.tooltip {
	&.tooltip--shiftright {
		width: 29px;
		@extend .clearfix;
		.tooltip-inner {
			float: left;
			white-space: nowrap;
		}
	}
}

ちょっとした小技ですが、これで Bootstrap のツールチップがもっと使いやすくなりますね。

いいなと思ったら応援しよう!