チャット風の吹き出し
アバターと名前の付いた、チャットの会話のような吹き出しを作る例です。b--chat の CSS を自分で足して使います。
アバター(人の顔の小さな画像)と吹き出しを並べて、チャットで話しているような見た目を作る例です。並べ方は Lism のクラスに任せ、吹き出しの形だけを b--chat という少しの CSS で作ります。
b--chat は、Lism にも @lism-css/ui にも入っていません(@lism-css/ui v0.26.0 でパッケージから外れました)。下の「足す CSS」を、自分のサイトの CSS に足して使います。このサイトでは CSS を足していないので、表示例は出さずにコードだけを載せています。
どんなときに使う?#
- 2人の会話の形で、説明やよくある質問を見せたいとき
- 「言ったこと」と「心の中で思ったこと」を、吹き出しの形で分けたいとき
組み立て#
吹き出し1つは、次の部品でできています。
| クラス・属性 | 役目 |
|---|---|
b--chat |
いちばん外の箱。l--grid といっしょに付ける |
b--chat--speak |
話している吹き出し(しっぽが三角) |
b--chat--think |
心の中で思っている吹き出し(しっぽが小さな丸) |
data-chat-dir |
アバターの位置。start で左、end で右 |
b--chat_avatar |
アバターの画像を入れる枠。l--frame といっしょに付ける。無くてもよい |
b--chat_name |
名前。無くてもよい |
b--chat_body |
吹き出しの部分を包む箱 |
b--chat_deco |
吹き出しのしっぽ。a--decorator と u--cbox といっしょに付ける |
b--chat_content |
文章を入れるところ。l--flow と u--cbox といっしょに付ける |
--keycolor |
吹き出しの色。既定は var(--gray) |
--speak と --think は、どちらか1つを b--chat に足します。
使い方#
左にアバター、右に吹き出しが出る形です。
<div class="b--chat b--chat--speak l--grid" data-chat-dir="start">
<div class="b--chat_avatar l--frame" aria-hidden="true">
<img src="/img/sample-square.svg" alt="" width="60" height="60" />
</div>
<div class="b--chat_name">Taro</div>
<div class="b--chat_body">
<div class="b--chat_deco a--decorator is--skipFlow u--cbox" aria-hidden="true"></div>
<div class="b--chat_content l--flow u--cbox">
<p>こんにちは。</p>
</div>
</div>
</div>
アバターを右に出すときは data-chat-dir="end" にします。吹き出しの色を変えるときは、style="--keycolor:var(--green)" のように色の変数を渡します。
<div class="b--chat b--chat--think l--grid" style="--keycolor:var(--blue)" data-chat-dir="end">
…(中身は上と同じ)…
</div>
u--cbox は、--keycolor の色から、うすい背景と文字の色を作るクラスです。吹き出しの本体としっぽの両方に付けるので、両方が同じ色になります。
足す CSS の要点#
公式ドキュメントに、そのまま写して使える CSS が載っています。全体を @layer lism-block { … } で囲んだまま写すと、Lism の CSS の重なりの順番にうまく入り、あとから lism-custom のレイヤーで上書きできます(レイヤーについては CSS のレイヤーと強さの順番)。
CSS がしていることは、おおまかに次のとおりです。
-
b--chatに、色の変数--keycolorの既定(var(--gray))と、吹き出しの背景の濃さ--cbox-bgPct: 8%を入れる -
名前(
b--chat_name)は、小さな斜めの文字で、少し薄い文字色(--text-2)にする -
b--chatにgrid-template-areasを書いて、左の列にアバター、右の列の上に名前、下に吹き出しを置く -
アバターの大きさ(
--avator-size)を、入れ物の幅に合わせて 48px〜64px のあいだで変える。しっぽの大きさ(--deco-size)はアバターの大きさから決める -
吹き出しの本体(
b--chat_content)に、内側の余白・角の丸み・最大の幅を付ける。中の段落のすきまは少しせまくする -
しっぽ(
b--chat_deco)を吹き出しの横にposition: absoluteで置き、maskに SVG の形を入れて切り抜く。--speakは三角、--thinkは小さな丸2つ -
data-chat-dir="end"のときは、列の左右を入れかえ、しっぽを左右反転する -
--speakのときだけ、しっぽ側の吹き出しの角の丸みを 0 にする(この部分だけは@layerの外に書く。セレクタの強さを保つため)
CSS の全文は長いので、ここには載せていません。公式ドキュメントの Chat のページにある chat.css を写してください。
React・Astro で書く場合#
Grid・Frame・Lism・Decorator・Flow を組み合わせ、それぞれに class で上のクラスを付けます。色は keycolor で渡します。
<Grid class="b--chat b--chat--speak" keycolor="green" data-chat-dir="end">
<Frame class="b--chat_avatar" aria-hidden="true">
<img src="/img/sample-square.svg" alt="" width="60" height="60" />
</Frame>
<Lism class="b--chat_name">Hanako</Lism>
<Lism class="b--chat_body">
<Decorator class="b--chat_deco" util="cbox" isSkipFlow />
<Flow class="b--chat_content" util="cbox">
<p>こんにちは。</p>
</Flow>
</Lism>
</Grid>
関連するページ#
公式ドキュメント
2026年10月5日時点の内容(lism-css 1.0.1・@lism-css/ui 0.40.1)をもとに、やさしい日本語でまとめています。