text-box-trim

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

text-box-trimCSS のプロパティで、テキスト要素のブロックコンテナーからテキストコンテンツの上端と下端のどちらを切り取るかを指定します。

フォントによって縦の余白が異なるため、ウェブではこれまで、文字の配置を統一することが困難でした。 text-box-trim プロパティと、切り取る余白の量を指定する対応プロパティ text-box-edge を使用すると、テキストの縦の余白を統一しやすくなります。

メモ: 一括指定プロパティの text-box を使用すると、 text-box-trim および text-box-edge の値を 1 つの宣言で指定することができます。

構文

css
/* キーワード */
text-box-trim: none;
text-box-trim: trim-both;
text-box-trim: trim-start;
text-box-trim: trim-end;

/* グローバル値 */
text-box-trim: inherit;
text-box-trim: initial;
text-box-trim: revert;
text-box-trim: revert-layer;
text-box-trim: unset;

text-box-trim プロパティの値は、次のキーワードのいずれかで指定できます。

none

既定値です。テキストから余白は切り取られません。

trim-both

先頭(上端)と末尾(下端)の端が両方切り取られます。

trim-start

先頭(上端)の端が切り取られます。

trim-end

末尾(下端)の端が切り取られます。

解説

テキストのみのコンテンツの高さは、フォントの高さに対して相対的です。デジタルフォントファイルでは、高さには大文字、アセンダー、ディセンダーなど、文字の全体が含まれます。フォントによってベースラインの高さが異なるため、同じ font-size を指定しても、テキストの行の高さが異なり、行間の間隔の外観に影響します。

text-box-trim プロパティを使用すると、テキストのブロックコンテナーの上端と下端を切り取って、ブロック方向のテキストの空間をより簡単に制御することができます。

実際に切り取られる余白の大きさは、 text-box-edge プロパティを使用して指定します。例えば、フォントの大文字または小文字に合わせて上端を切り取り、下端をフォントのベースラインに合わせて切り取ることを選択することができます。

公式定義

初期値none
適用対象Block containers and inline boxes
継承なし
計算値the specified keyword
アニメーションの種類離散値

形式文法

text-box-trim = 
none |
trim-start |
trim-end |
trim-both

基本的な text-box-trim の使用

次の例では、 2 つの段落に text-box-edge: cap alphabetic を設定して、テキスト要素のブロックコンテナーの上端を大文字の上端に、下端をテキストのベースラインに揃えるように切り取っています。

次に、最初の text-box-trim 値を trim-end に、2 つ目の text-box-trim 値を trim-both に設定します。これにより、最初の段落では下端のみが切り取られ、2 つ目の段落では上端と下端の両方が切り取られます。

css
p {
  text-box-edge: cap alphabetic;
  border-top: 5px solid magenta;
  border-bottom: 5px solid magenta;
}

.one {
  text-box-trim: trim-end;
}

.two {
  text-box-trim: trim-both;
}

結果

出力は次のとおりです。それぞれの段落の上部と下部に境界線を設置しましたので、それぞれのケースで余白がどのように切り取られたかを確認できます。

対話的な text-box-trim および text-box-edge の値の比較

この例では、テキストの段落に適用する text-box-trim および text-box-edge の値を選べるユーザーインターフェイスを提供しています。

HTML

HTML には、3 つの主要なアイテムが含まれます。

  • 3 つの <select> 要素を使用して、段落のどの端を切り取るかを設定します(text-box-trim 値)。また、段落のブロックの開始端とブロックの末尾から切り取る空白の量も設定します (text-box-edge 値)。
  • テキストを含む <p> 要素で、 text-box-* 値が適用されています。この段落には contenteditable が設定されているため、テキストを編集することができます。
  • <output> 要素で、段落に適用された text-box-* 宣言を表示するためのものです。これは、選択が行われたときに更新されます。

また、 Google Fonts サービスからフォントをインポートして、デモのテキストに適用しています。

簡潔にするため、正確な HTML コードは省略しています。

CSS

CSS では、インポートしたフォントを <html> 要素に適用し、フレックスボックスを使用して UI をレイアウトしています。簡潔にするため、 CSS コードのほとんどは非表示にしていますが、以下に、 text-box-* 効果が適用される段落のスタイルを設定するルールと、 text-box-* ルールが適用されていることを示す <output> を示します。

css
p {
  margin: 0;
  font-size: 6rem;
  font-weight: bold;
  border-top: 5px solid magenta;
  border-bottom: 5px solid magenta;
}

output {
  border: 2px solid gray;
  border-radius: 10px;
  padding: 10px;
  margin: 0;
  width: fit-content;
}

ここでも、.display 段落に上下の境界線を含めていることに注意してください。これにより、異なる text-box-* 値が選択された場合に、切り取られる余白がどのように変化するかを確認できます。

JavaScript

JavaScript では、3 つの <select> 要素と 2 つの <p> 要素への参照を取得することから始めます。

js
const boxTrimSelect = document.getElementById("box-trim");
const trimOverSelect = document.getElementById("trim-over");
const trimUnderSelect = document.getElementById("trim-under");

const displayElem = document.querySelector("p");
const codeElem = document.querySelector("output");

次に、 setEdgeTrim() という関数を定義します。これは、 text-box の値を <select> 要素の値に基づいて適用し、適用した宣言を(個別指定と一括指定の両方) output に表示します。

js
function setEdgeTrim() {
  const textBoxTrimValue = boxTrimSelect.value;
  const textBoxEdgeValue = `${trimOverSelect.value} ${trimUnderSelect.value}`;
  displayElem.style.textBox = `${textBoxTrimValue} ${textBoxEdgeValue}`;

  codeElem.innerHTML = `
    <span><code>text-box-trim: ${textBoxTrimValue}</code></span>
    <br>
    <span><code>text-box-edge: ${textBoxEdgeValue}</code></span>
    <br><br>
    <span>同等の一括指定:</span>
    <br><br>
    <span><code>text-box: ${textBoxTrimValue} ${textBoxEdgeValue}</code></span>
  `;
}

JavaScript の最後の部分では、 setEdgeTrim() 関数を 1 回実行して、UI の初期状態を設定します。次に、すべての <select> 要素に change イベントリスナーを適用し(addEventListener を使用して)、 <select> の値のいずれかが変更されるたびに setEdgeTrim() 実行され、 UI がそれに応じて更新されるようにします。

js
setEdgeTrim();

boxTrimSelect.addEventListener("change", setEdgeTrim);
trimOverSelect.addEventListener("change", setEdgeTrim);
trimUnderSelect.addEventListener("change", setEdgeTrim);

結果

出力結果は次の通りです。

text-box-trim は、最初は trim-both に設定されています。これは、段落の上端と下端が切り取られることを意味しています。 text-box-edge は、最初は cap alphabetic に設定されています。これは、テキストが、先頭の端では大文字の上端と、末尾の端ではベースラインと揃うように切り取られることを意味しています。

<select> の値を変更して、表示テキストに与える効果を確認してください。

仕様書

Specification
CSS Inline Layout Module Level 3
# text-box-trim

ブラウザーの互換性

関連情報