🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

2283閲覧

ふきだしの中に画像と文字を一緒に入れたり、情報量によって横幅を縮めたい。

wally

総合スコア11

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/12/01 02:47

編集2019/12/03 12:52

前提・実現したいこと

テンプレートでは左からの吹き出しなのですが、cssを少し変更して右からの吹き出しにする方法は解りました。

実現したいことは3つです。

1.文字が少ない時は吹き出しの幅を短くしたい。
2.吹き出しの中(右端)に画像を挿入したい。
3.画像の左には文章が入るので、文章と画像の間に少し余白が欲しい。

発生している問題・エラーメッセージ

[リンク](https://saruwakakun.com/html-css/reference/speech-bubble)

↑の「考えごと風のふきだし」を使いました。
ふきだしの中に入れる画像は画像サイズを小さくしないとふきだしから画像がはみ出してしまうのと、吹き出しと文字がピッタリくっついていて、余白がありません。

また、10~20文字程度で終わる文章の場合は吹き出しの横幅を縮めたいと思っています。
イメージ説明

該当のソースコード

HTML

1<div class="balloon4"> 2 <p>ここに文章</p> 3</div>

css

1.balloon4 { 2 position: relative; 3 margin: 2em 0 2em 40px; 4 padding: 15px; 5 background: #fff0c6; 6 border-radius: 30px; 7} 8 9.balloon4:before { 10 content: ""; 11 position: absolute; 12 left: -38px; 13 width: 13px; 14 height: 12px; 15 bottom: 0; 16 background: #fff0c6; 17 border-radius: 50%; 18} 19 20.balloon4:after { 21 content: ""; 22 position: absolute; 23 left: -24px; 24 width: 20px; 25 height: 18px; 26 bottom: 3px; 27 background: #fff0c6; 28 border-radius: 50%; 29} 30.balloon4 p { 31 margin: 0; 32 padding: 0; 33}

cssは吹き出しが左から、右から出るように少し改変しています。

css

1/************* 2/* 左から吹き出し 3*************/ 4 5.balloon1 { 6 position: relative; 7 margin: 2em 0 2em 40px; 8 padding: 15px; 9 background: #FAE2E1; 10 border-radius: 30px; 11} 12 13.balloon1:before { 14 content: ""; 15 position: absolute; 16 left: -38px; 17 width: 13px; 18 height: 12px; 19 bottom: 0; 20 background: #FAE2E1; 21 border-radius: 50%; 22} 23 24.balloon1:after { 25 content: ""; 26 position: absolute; 27 left: -24px; 28 width: 20px; 29 height: 18px; 30 bottom: 3px; 31 background: #FAE2E1; 32 border-radius: 50%; 33} 34.balloon1 p { 35 margin: 0; 36 padding: 0; 37} 38/************* 39/* 右から吹き出し 40*************/ 41.balloon2 { 42 position: relative; 43 margin: 2em 40px 2em 0; 44 padding: 15px; 45 background: #FAE2E1; 46 border-radius: 30px; 47} 48.balloon2:before { 49 content: ""; 50 position: absolute; 51 right: -24px; 52 width: 20px; 53 height: 18px; 54 bottom: 3px; 55 background: #FAE2E1; 56 border-radius: 50%; 57} 58.balloon2:after { 59 content: ""; 60 position: absolute; 61 right: -38px; 62 width: 13px; 63 height: 12px; 64 bottom: 0; 65 background: #FAE2E1; 66 border-radius: 50%; 67}

試したこと

画像の幅は元々200px~400px程度あり、縦長の画像ですと高さも400px以上あるのですが、元々の画像のままですと、吹き出しから画像がはみ出てしまうため、現在は画像を小さく載せています。

HTML

1<div class="balloon1"> 2<div align="right"><a href="images/sample.jpg"><img src="images/sample.jpg" width="100" align="right"></a></div> 3<p> 文章が数行に渡って入る場合と1行で終わる場合といろいろあります。</p> 4

しかし、どの環境でもきちんと表示されるのかが判らない(画像サイズを小さくしたことで私の環境では問題なく表示されたため)のと、現在の設定では文章は折り返しで表示されていますが、文章の右端と画像の左端がピッタリとくっついています。

現時点(12/1 19:45)のものを画像で掲載します。
イメージ説明

s8_chuさまに教えて頂いた内容を元に手元のテスト画像のプレビュー画面を確認してみた結果を画像で掲載します。(12/3 21:49)段組みが解消されました。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s8_chu

2019/12/01 03:12 編集

画像が画面に収まらないほど横長の場合、文章や画像はどのように表示するのでしょうか?(横と縦の比率は維持するのか、画像をゆがませてでも全体を見せるのか、など) それとも、画像は 400x400 以上にはならないという前提でよろしいのでしょうか?
wally

2019/12/01 03:45 編集

画像の掲載ができることを知ったので、画像サイズを小さくする前の画像を載せてみました。 これは横幅280px、縦幅355pxですが、試しに作った2番目のふきだし、3番目のふきだしまで画像が突き抜けてしまいました。 これをふきだしの中だけで画像を収めるために画像の横幅を100pxにしました。 画像の左が文章なのですが、1番最後の文字のところまででふきだしが終わってしまうようなので、本当は載せた画像のサイズに合わせてふきだしが大きくなると良いと思っています。 画像はクリックすると大きくなりますが、ふきだしの中に入れる画像は400×400より大きくならない予定です。
wally

2019/12/01 15:16 編集

asuchi0819様 お試しいただきありがとうございます。 asuchi0819様の環境では私が上で載せたcssやHTMLのままでもふきだしの中に画像が入るのですね。 私が質問させて頂いた時と、asuchi0819様が再現してくださったものとで画像のタグを入れる場所が違っていたので、asuchi0819様と同じように文章の1番最後に画像を入れてみたのですが、やはり、画像がふきだしに収まらず、ふきだしの下に突き抜けてしまいました。 ありがとうございました。
kyoya0819

2019/12/02 03:35

環境はなんでしょうか? Windows10かMac OS XかHomeかProかChromeかFirefoxかバージョンは何か、画面の大きさ・ピクセルは何か
wally

2019/12/02 04:37

パソコンはWindows10でChrome スマホはiPhone XでSafari です。 画面の大きさ等帰宅後に確認致します。
wally

2019/12/02 14:03

自分のことなのに遅くなりましてすみません。 画面の大きさは解像度というところでしょうか? 1366×768(推奨) と書かれているところを選択していました。
guest

回答1

0

ベストアンサー

  1. 色々な方法がありますが、今回は inline-flex を使用します。
  2. inline-flex を指定したことで、 inline-flex コンテナ内の各要素が整列します。p 要素の後に img 要素を記述していれば、その時点でこの動作が実現出来たということになります。もし順番が異なる場合は、 order プロパティで調整します。
  3. inline-flex コンテナ内の p 要素の直後に隣接する img 要素にのみ margin-left プロパティを適用することで、この動作が実現出来ます。

p 要素の直後に img 要素がある場合 (動作確認用リンク):

HTML

1<div class="balloon2"> 2 <p>ここに文章</p> 3</div> 4 5<hr> 6 7<div class="balloon2"> 8 <p> 9 ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章 10 </p> 11</div> 12 13<hr> 14 15<div class="balloon2"> 16 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 17</div> 18 19<hr> 20 21<div class="balloon2"> 22 <p> 23 ここに文章 24 </p> 25 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 26</div> 27 28<hr> 29 30<div class="balloon2"> 31 <p> 32 ここに文章 33 </p> 34 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 35</div> 36 37<hr> 38 39<div class="balloon2"> 40 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 41</div> 42 43<hr> 44 45<div class="balloon2"> 46 <p> 47 ここに文章 48 </p> 49 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 50</div> 51 52<hr> 53 54<div class="balloon2"> 55 <p> 56 ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章 57 </p> 58 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 59</div>

CSS

1.balloon2 { 2 position: relative; 3 margin: 2em 40px 2em 0; 4 padding: 15px; 5 background: #FAE2E1; 6 border-radius: 30px; 7} 8 9.balloon2:before { 10 content: ""; 11 position: absolute; 12 right: -24px; 13 width: 20px; 14 height: 18px; 15 bottom: 3px; 16 background: #FAE2E1; 17 border-radius: 50%; 18} 19 20.balloon2:after { 21 content: ""; 22 position: absolute; 23 right: -38px; 24 width: 13px; 25 height: 12px; 26 bottom: 0; 27 background: #FAE2E1; 28 border-radius: 50%; 29} 30 31.balloon2 { 32 display: inline-flex; /* 1, 2 */ 33} 34 35.balloon2>p { 36 max-width: 30em; 37} 38 39.balloon2>img { 40 object-fit: contain; 41 max-width: 100%; 42} 43 44.balloon2>p+img { 45 margin-left: 1.5em; /* 3 */ 46}

img 要素の直後に p 要素がある場合 (動作確認用リンク):

HTML

1<div class="balloon2"> 2 <p>ここに文章</p> 3</div> 4 5<hr> 6 7<div class="balloon2"> 8 <p> 9 ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章 10 </p> 11</div> 12 13<hr> 14 15<div class="balloon2"> 16 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 17</div> 18 19<hr> 20 21<div class="balloon2"> 22 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 23 <p> 24 ここに文章 25 </p> 26</div> 27 28<hr> 29 30<div class="balloon2"> 31 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 32 <p> 33 ここに文章 34 </p> 35</div> 36 37<hr> 38 39<div class="balloon2"> 40 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 41</div> 42 43<hr> 44 45<div class="balloon2"> 46 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 47 <p> 48 ここに文章 49 </p> 50</div> 51 52<hr> 53 54<div class="balloon2"> 55 <img src="http://placehold.jp/3d4070/ffffff/400x400.png"> 56 <p> 57 ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章 58 </p> 59</div>

CSS

1.balloon2 { 2 position: relative; 3 margin: 2em 40px 2em 0; 4 padding: 15px; 5 background: #FAE2E1; 6 border-radius: 30px; 7} 8 9.balloon2:before { 10 content: ""; 11 position: absolute; 12 right: -24px; 13 width: 20px; 14 height: 18px; 15 bottom: 3px; 16 background: #FAE2E1; 17 border-radius: 50%; 18} 19 20.balloon2:after { 21 content: ""; 22 position: absolute; 23 right: -38px; 24 width: 13px; 25 height: 12px; 26 bottom: 0; 27 background: #FAE2E1; 28 border-radius: 50%; 29} 30 31.balloon2 { 32 display: inline-flex; /* 1, 2 */ 33} 34 35.balloon2>p { 36 max-width: 30em; 37} 38 39.balloon2>img { 40 object-fit: contain; 41 max-width: 100%; 42 order: 1; /* 2 */ 43} 44 45.balloon2>img+p { 46 margin-right: 1.5em; /* 3 */ 47}

投稿2019/12/01 03:53

編集2019/12/01 04:43
s8_chu

総合スコア14731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wally

2019/12/01 06:43

s8_chu様 丁寧なご回答をありがとうございました。 左からのふきだしで試してみたのですが、うまくいきませんでした…。 .balloon1 { position: relative; margin: 2em 0 2em 40px; padding: 15px; background: #FAE2E1; border-radius: 30px; } .balloon1:before { content: ""; position: absolute; left: -38px; width: 13px; height: 12px; bottom: 0; background: #FAE2E1; border-radius: 50%; } .balloon1:after { content: ""; position: absolute; left: -24px; width: 20px; height: 18px; bottom: 3px; background: #FAE2E1; border-radius: 50%; } .balloon1 p { margin: 0; padding: 0; } .balloon1 { display: inline-flex; /* 1, 2 */ } .balloon1>p { max-width: 30em; } .balloon1>img { object-fit: contain; max-width: 100%; } .balloon1>img+p { margin-left: 1.5em; /* 3 */ } のように記述してみたところ、画像が1番左に配置され、5段組で文章が表示されました。(画像はあるのですが、このコメントにどのように表示するのかが判らず、画像が載せられておらずすみません。) 教えて頂いた通りにできていないから、きちんと表示されないのだと思い、文章の上に画像、画像の上に文章等、試しているところです。
wally

2019/12/01 10:59 編集

s8_chu様 早々にご回答ありがとうございました。 教えて頂いたcssを全てコピーしましたが、画像が左寄せで表示され、文章は段落が替わるたびに段組みになってしまいました。(現在の画面の画像を質問の1番下に貼りました。)HTML側が間違っている可能性が高いと思っています。 css /************* /* 左から吹き出し *************/ .balloon1 { position: relative; margin: 2em 0 2em 40px; padding: 15px; background: #FAE2E1; border-radius: 30px; } .balloon1:before { content: ""; position: absolute; left: -38px; width: 13px; height: 12px; bottom: 0; background: #FAE2E1; border-radius: 50%; } .balloon1:after { content: ""; position: absolute; left: -24px; width: 20px; height: 18px; bottom: 3px; background: #FAE2E1; border-radius: 50%; } .balloon1 p { margin: 0; padding: 0; } .balloon1 { display: inline-flex; /* 1, 2 */ } .balloon1>p { max-width: 30em; } .balloon1>img { object-fit: contain; max-width: 100%; order: 1; } .balloon1>img+p { margin-right: 1.5em; /* 3 */ } /************* /* 右から吹き出し *************/ .balloon2 { position: relative; margin: 2em 40px 2em 0; padding: 15px; background: #FAE2E1; border-radius: 30px; } .balloon2:before { content: ""; position: absolute; right: -24px; width: 20px; height: 18px; bottom: 3px; background: #FAE2E1; border-radius: 50%; } .balloon2:after { content: ""; position: absolute; right: -38px; width: 13px; height: 12px; bottom: 0; background: #FAE2E1; border-radius: 50%; } .balloon2 { display: inline-flex; /* 1, 2 */ } .balloon2>p { max-width: 30em; } .balloon2>img { object-fit: contain; max-width: 100%; } .balloon2>p+img { margin-left: 1.5em; /* 3 */ } HTML <article> <div class="balloon1"> <a href="http://placehold.jp/3d4070/ffffff/150x150.png"><img src="http://placehold.jp/3d4070/ffffff/150x150.png" width="240"></a> <p> ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章</p> <p> ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章</p> </div> </article> <article> <div class="balloon2"> <a href="http://placehold.jp/3d4070/ffffff/150x150.png"><img src="http://placehold.jp/3d4070/ffffff/150x150.png" width="240"></a> <p> ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章</p> <p> ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章</p> <p> ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章ここに文章</p> </div> </article> <article> <div class="balloon1"> <p> ここに文章ここに文章ここに文章</p> </div></article>
s8_chu

2019/12/03 07:54

> 文章は段落が替わるたびに段組みになってしまいました。 について、読み逃していたので修正しましたが、いかがでしょうか? https://jsfiddle.net/b6d2knLj/
wally

2019/12/03 12:57

s8_chu様、何度もありがとうございました。 先程、最初の質問の1番下に現在の画面の画像を投稿しました。 段組みは解消されていました。 例文は長文なので、1番上のあずき色のタイトルの左から右までふきだしだと更に理想に近いのですが、これは難しいですよね…。 本来は私がきちんと理解して自分でやれていないといけないのに、すみません。
s8_chu

2019/12/04 04:27

> 1番上のあずき色のタイトルの左から右までふきだしだと更に理想に近いのですが、これは難しいですよね…。 現状では、小豆色のタイトル部分に関する HTML, CSS が提示されていないため難しいと思います。本来の質問からは離れている内容となるため、この質問を解決済みにしたうえで、現在直面している問題に関して詳細を記述した質問を新たに投稿すると良いと思います。
wally

2019/12/04 13:25

s8_chu様、ありがとうございます。 元々のふきだしが文章の長さに関係なく、左端から右端まであるふきだしだったので、ふきだしのCSSを変更することでふきだしの長さが長くなったり短くなったりするものだと思っていたのですが、そうではないのですね! こういうことも解らないレベルなので、アドバイスありがとうございます。 新たな質問にさせて頂きたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問