🟨
角の丸い吹き出しをCSSで作ってjQueryで表示・非表示を切り替える
はじめに
今回はボタンを押すと吹き出しが表示され、吹き出し以外の部分を押すと吹き出しが非表示になるように作成しました。
吹き出しが上側にある場合
吹き出しが下側にある場合
ちなみに、この部分は2つの二等辺三角形をずらして重ねることで表現しています。
共通部分
HTML
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<p id="trigger">吹き出しを表示</p>
<div id="balloon">
<div class="balloon-contents">
<p>吹き出しの中に表示される文章!!!!!!!!!!!!!</p>
</div>
</div>
JavaScript(jQuery)
$("#balloon").has(e.target).length === 0
はIDがballoon
の子要素の数が0の時という意味です。
$(function() {
$(document).on("click", function(e) {
if ($("#trigger").is(e.target)) {
e.stopPropagation();
$("#balloon").toggle();
} else if (!$("#balloon").is(e.target) && $("#balloon").has(e.target).length === 0) {
$("#balloon").hide();
}
});
});
上向きCSS
#balloon {
display: none;
}
/* 吹き出しの四角の部分 */
.balloon-contents {
position: absolute;
background: #fff;
border: solid 2px #000;
border-radius: 3px;
}
/* 二等辺三角形の共通部分 */
.balloon-contents::before,
.balloon-contents:after {
content: "";
position: absolute;
left: 50%; /* 角丸の位置 */
transform: translateX(-50%) rotate(135deg);
border: 15px solid transparent;
border-radius: 0 0 0 10px;
}
/* 内側の二等辺三角形 */
.balloon-contents::before {
top: -14px;
border-bottom-color: #fff;
border-left-color: #fff;
z-index: 2;
}
/* 外側の二等辺三角形 */
.balloon-contents:after {
top: -16px;
border-bottom-color: #000;
border-left-color: #000;
z-index: 1;
}
下向きCSS
#balloon{
display: none;
}
/* 吹き出しの四角の部分 */
.balloon-contents {
position: absolute;
background: #fff;
border: solid 2px #000;
border-radius: 3px;
}
/* 二等辺三角形の共通部分 */
.balloon-contents::before,
.balloon-contents:after {
content: "";
position: absolute;
left: 50%; /* 角丸の位置 */
transform: translateX(-50%) rotate(-45deg);
border: 15px solid transparent;
border-radius: 0 0 0 10px;
}
/* 内側の二等辺三角形 */
.balloon-contents::before {
bottom: -14px;
border-bottom-color: #fff;
border-left-color: #fff;
z-index: 2;
}
/* 外側の二等辺三角形 */
.balloon-contents:after {
bottom: -16px;
border-bottom-color: #000;
border-left-color: #000;
z-index: 1;
}
二等辺三角形の部分を細くする
scaleX()
を使用して幅を調整してください。
transform: scaleX(0.5) translateX(-50%) rotate(-45deg);
比較すると細くなっているのがわかるかと思います。
修正前
参考にさせていただきました
jQuery
CSS
終わりに
何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉
Discussion