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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

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

CSS

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

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

3回答

2746閲覧

インライン要素で、行間の広いフォントの背景色の縦幅を狭めたい

amie8mie

総合スコア14

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

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

CSS

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

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

1クリップ

投稿2020/12/14 18:08

編集2020/12/15 10:38

それぞれのフォントに対し、line-heightを1にしてbackground-colorとunderlineを設定した様子

CSS

1div { 2 font-size: 30px; 3 line-height: 1; 4 width: 3em; 5 margin: 5px; 6} 7 8div span { 9 background-color: blueviolet; 10 text-decoration: underline; 11}

HTML

1<article style="display: flex;"> 2 <div><span style="font-family: メイリオ;">◆メイリオ</span>です</div> 3 <div><span style="font-family: 源真ゴシック;">◆源真ゴシック</span>です</div> 4 <div><span style="font-family: 游ゴシック;">◆游ゴシック</span>です</div> 5 <div><span style="font-family: MS ゴシック;">◆MS ゴシック</span>です</div> 6</article>

ご覧のとおり、MSゴシック以外では「◆」をはじめとする上段の文字やアンダーラインが背景色の裏側に隠れてしまっています

これはメイリオ・源真ゴシック・游ゴシックら自体が行間の広めなフォントだかららしいのですが

  • MSゴシックのように、背景色の縦幅をできるだけ文字にぴったりとさせるのはCSSでは難しいでしょうか?

  • もしくはメイリオ・源真ゴシック・游ゴシックらの代用にある程度耐えうる、漢字が比較的豊富で行間の狭い日本語フリーフォントがあれば助かります

※表示するPC環境は固定ですので、多環境への配慮は無用です(Windows・Chrome)

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

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

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

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

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

guest

回答3

0

この場合は、ascent-override descent-override を適用した font-face を定義すれば大丈夫です。

css

1@font-face { 2 font-family: Meiryo-low-height; 3 src: local(Meiryo); 4 ascent-override: 90%; /* ここを適切に調整すること */ 5 descent-override: 10%; /* ここを適切に調整すること */ 6}

html

1<div><span style="font-family: Meiryo-low-height;">◆メイリオ</span>です</div>

投稿2021/11/07 14:41

編集2021/11/07 14:45
int32_t

総合スコア20872

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

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

0

CSSインラインレイアウトモジュールレベル3では、インラインボックスの高さの基準を定めることができます。

5.2. Inline Box Edge Metrics: the text-edge property | CSS Inline Layout Module Level 3

ですので、text-edge: textでアセンダやディセンダを考慮したインラインボックスの高さとすることができるはずです。たぶん。

実装されれば。


現状では、手計算でline-heightを設定するしかないと思います。たとえば、メイリオだとおそらく1.5かと。

このツールを使って LineSpacingRate の値を調べてみると、**メイリオ, Meiryo UI, MeiryoKe_Gothic, MiryoKe_Console, MS ゴシック についてはそれぞれ 1.50, 1.27, 1.18, 1.00, 1.00 になっています。**なお、このツールではベースラインから上の部分をアセント(CellAscent)、下の部分をディセント(CellDescent)と呼んでおり、これらのアセント・ディセントの値は ttfname3.exe で表示されるアセンダ(Ascender)・ディセンダ(Descender)の値と一致しています。つまり Microsoft がアセンダと呼んでいるものは「欧文書体の基礎知識」に載っているアセンダの定義とは異っているわけです。

また、「フォント メトリックを取得する」では、CellAscent+CellDescent の値を「セル高 LineSpacing」、セル高から空隙部分を引いた値を 「em高 EmHeight」と呼んでいます。FontInfo.exe では、(セル高)を(em高)で割って LineSpacingRate の値を求めていますから、この値から 1.00 を引いたものが内部レディング(Internal Leading)の割合を表しています。

つまり、メイリオには em高の 50% (1.50ー1.00=0.50) にあたる内部レディングが含まれており、Meiryo UI には 27% の、MeiryoKe_Gothic には 18% の内部レディングがそれぞれ含まれていること、そしてMS ゴシックや MiryoKe_Console には内部レディングがない (0%) ことが分かります。
ことば・その周辺 PC版「メイリオ(3)――メイリオ系フォントのアセンダ・ディセンダ(1)」

 

That means the Catamaran font uses 1100 + 540 units in a 1000 units em-square, which gives a height of 164px when setting font-size: 100px. This computed height defines the content-area of an element and I will refer to this terminology for the rest of the article. You can think of the content-area as the area where the background property applies

Deep dive CSS: font metrics, line-height and vertical-align - Vincent De Oliveira

蛇足

上記記事にあった、この言葉を最後に書いておきますね。

It becomes obvious that setting line-height: 1 is a bad practice. I remind you that unitless values are font-size relative, not content-area relative, and dealing with a virtual-area smaller than the content-area is the origin of many of our problems.

Deep dive CSS: font metrics, line-height and vertical-align - Vincent De Oliveira

line-height: 1 がバッドプラクティスであることは明らかです。


ちなみに、その後にこんなことも書いてあります。

But not only line-height: 1. For what it’s worth, on the 1117 fonts installed on my computer (yes, I installed all fonts from Google Web Fonts), 1059 fonts, around 95%, have a computed line-height greater than 1. Their computed line-height goes from 0.618 to 3.378. You’ve read it well, 3.378!

Deep dive CSS: font metrics, line-height and vertical-align - Vincent De Oliveira

参考までに私がインストールした1117個のフォント(ええ、Googleフォントは全部インストールしてます)ですが、...... line-height は 0.618 から 3.378 でした。よろしいですか?3.378です!

ええと、どうすれば?

投稿2020/12/15 03:16

編集2020/12/15 04:06
Lhankor_Mhy

総合スコア36104

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

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

0

インライン要素を制御するにはdisplay要素を使うと指定した属性と同じふるまいをするので、テーブルセル属性にしてしまうとフォントごとのマージンが固定されます。あとは、そのマージンに対し、上下に同じ色でborder制御するといいのでは。

css

1div span { 2 background-color: blueviolet; 3 text-decoration: underline; 4 display: table-cell; 5  border-top: 6px solid blueviolet; 6  border-bottom: 6px solid blueviolet; 7 8} 9

投稿2020/12/15 00:44

編集2020/12/15 00:48
FKM

総合スコア3633

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

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

amie8mie

2020/12/15 10:31

table-cellにすると文字どおりtable-cellとして扱われそうに思いながら試してみたものの、やはり質問文に載せた画像のようなインライン的な背景色(文字の部分だけ)にはなっておらず単純に四角い背景になってしまっているように見えますね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問