質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
HTML

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

CSS

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

Q&A

解決済

3回答

6889閲覧

CSSの吹き出し文字の位置がずれる

SQLinjection

総合スコア36

HTML

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

CSS

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

0グッド

0クリップ

投稿2018/12/07 14:11

編集2018/12/07 16:01

おはようございます。
この画像のような吹き出しを作ろうとしています。

いろんなパラメータを操作したりして綺麗な形を作ろうとしているのですが、
吹き出し内の文字列が上下中央揃えと左右中央揃えがずれてしまいます。
paddingで調整しても、吹き出しの三角形の高さがずれたりしてしまいます。
良さげなCSSのオプションで上手く実現できる方法があるでしょうか。

イメージ説明
イメージ説明

HTML

1<FONT class="sample">文字列</FONT>

CSS

1.sample 2{ 3 margin:0px 15px 0px 0px; 4 padding:1.5px 0px 0px 0px; 5 height:22.5px; 6 border-radius:1em 0em 0em 1em; 7 position:relative; 8 display:inline-block; 9 text-align:center; 10 width:90px; 11 color:#ffffff; 12 background:#007000; 13} 14 15.sample:after 16{ 17 content:""; 18 position:absolute; 19 top:50%; 20 right:-24px; 21 margin-top:-12px; 22 border:12px solid transparent; 23 border-left:12px solid #7f0f5b; 24} 25

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

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

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

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

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

guest

回答3

0

flexboxレイアウトなら簡単です。

CSS

1.sample 2{ 3 margin:0px 15px 0px 0px; 4 padding:0px 0px 0px 0px; /*paddingで位置調整しないので0に変更*/ 5 height:22.5px; 6 border-radius:1em 0em 0em 1em; 7 position:relative; 8 9 display:flex; /*変更(inline-flexでも可)*/ 10 justify-content: center; /*追加*/ 11 align-items: center; /*追加*/ 12 13 text-align:center; 14 width:90px; 15 color:#ffffff; 16 background:#007000; 17 font-size: 0.8em; /*文字小さくしたほうが分かりやすいので一回り小さく*/ 18} 19

関係ありませんがFONTタグはもう廃止されてます。
pタグなどを使うようにしましょう。

投稿2018/12/07 15:01

aKusano

総合スコア3763

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

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

SQLinjection

2018/12/07 16:02

ありがとうございます。 実装してみたところ、↑の画像のように文字はやや上にずれてしまいます。 また、after で三角形は同じものを使ったところ、 やはり三角形の端がはみ出してしまいます。heightで調整をしてみてダメではない状況になりましたが、 上下中央揃えの実現が質問の目的ですので、いい方法はありますでしょうか?
aKusano

2018/12/08 01:38

表示確認のブラウザに何を使ってますか? flexboxがプレフィクス無しで動くのはIEだとIE11だけです。 flexboxのサポート環境詳細はこちらでご確認ください。 https://caniuse.com/#search=flex サポートされている環境ならば上記の記述で指定したエリアの上下左右中央にコンテンツを自動配置することができます。(サポート環境でも動かないならスペルミスなどの可能性が高いです) もし古い環境も含めて上下中央に配置したいなら、 yoshinaviさんが回答されているようにheightとline-heightを同じpx数値に揃えるという方法があります。 ただしこれは複数行の文字列には対応していませんので、可変長の文字列が入って折返しが発生したり、 長い文字列を改行して2行で表示したいといった場合には使用できません。 なお三角形の矢印部分をきちんと揃える部分については三角形の高さとボックスの高さが揃うように数値を調整するしかないんじゃないでしょうか。数学が得意なら計算すればどの数値の組み合わせの時にピッタリ同じ数値になるかは計算できると思います。(私は得意じゃないので揃うまでいろいろ試す派ですが/苦笑)
SQLinjection

2018/12/08 07:12

ありがとうございます。 ブラウザは、PC版として最新版Firefox・Chrome・Safari、AndroidのFirefoxでテストをしており、 IEは試しておりませんでした。 flexbox というのは知らないオプションでしたが、コピペで実装しているのでスペルミスではなさそうです。 その後も数時間試してみたのですが、CSSでの描画は画像と違ってアンチエイリアシスによるドットの欠落や、 拡大縮小にも強いことや、CSSテンプレートでいろんな場所に使い回せる点を考慮してのものでした。 vertival-aling は使えないので、line-height や font-size なども使っていろいろ試しましたが、 三角形がはみ出したりしてどうしてもトレードオフでした。 PCでうまくサイズがあったとしても、view-port等で画面サイズを統一しない限り、 スマホアクセスになったり拡大率などの関係でCSSの描画だとずれやすいので、 暫定対応として画像を使うことにしました。ご回答ありがとうございました。
guest

0

ベストアンサー

対応していないブラウザもありますが clip-pathで。

CSS

1.sample { 2 margin: 0 1em 0 0; 3 padding: .5em 0 .45em; 4 border-radius: 1em 0 0 1em; 5 position: relative; 6 display: inline-block; 7 text-align: center; 8 width: 90px; 9 color: #ffffff; 10 background-color: #007000; 11 line-height: 1.1; 12} 13 14.sample::after { 15 content: ""; 16 position: absolute; 17 width: 1.5em; 18 top: 0; 19 bottom: 0; 20 left: 100%; 21 background-color: #7f0f5b; 22 -webkit-clip-path: polygon(20% 0, 100% 50%, 10% 100%, 0% 100%, 0% 0%); 23 clip-path: polygon(20% 0, 100% 50%, 10% 100%, 0% 100%, 0% 0%); 24} 25```**動くサンプル:**[https://jsfiddle.net/w620yt5v/](https://jsfiddle.net/w620yt5v/) 26 27--- 28 29【clip-path | MDN】 30[https://developer.mozilla.org/ja/docs/Web/CSS/clip-path](https://developer.mozilla.org/ja/docs/Web/CSS/clip-path) 31 32【【CSS】CSSでマスク、クリッピングをしてみよう | unitopi - ユニトピ -】 33[http://unitopi.com/css3-clip/](http://unitopi.com/css3-clip/) 34 35【Can I use... Support tables for HTML5, CSS3, etc】 36[https://caniuse.com/#search=clip-path](https://caniuse.com/#search=clip-path) 37 38【html - How to make clip-path works on microsoft edge? - Stack Overflow】 39[https://stackoverflow.com/questions/39477755/how-to-make-clip-path-works-on-microsoft-edge](https://stackoverflow.com/questions/39477755/how-to-make-clip-path-works-on-microsoft-edge)

投稿2018/12/08 04:09

kei344

総合スコア69398

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

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

SQLinjection

2018/12/08 07:17

ありがとうございます。 なるほど、clip-path を使うんですね。これは盲点でした。 うまいですねぇ~ 完璧です。
guest

0

「line-height」を「height:22.5px;」に揃えてみてください。

以下を追加してください。

CSS

1.sample { 2 line-height: 22.5px; 3} 4

投稿2018/12/07 19:21

yoshinavi

総合スコア3523

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

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

SQLinjection

2018/12/08 07:05

ありがとうございます。 実はこの質問を投稿する前にも、line-height ・ font-size ・ height を使って調整も試みましたが、 なかなかうまくいっておりませんでした。 現状CSSだけで三角形を作るとなるとピクセル単位での調整が必要みたいですね。 私はCSSをネットで逆引きしていろいろと属性やオプションを調べて使ってる程度なので、 これからも勉強する余地がありそうです。
yoshinavi

2018/12/08 07:21

他の回答にもあるように、中央寄せはいくつかあります。ブラウザはデフォルトCSSがあるので、リセットしてから試してみてください。 1行ならheightとline-heightを同じ値にすると、テキストは中央(上下)に寄ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問