Свойство CSS `text-box-trim`
Baseline Ограниченная доступность
Эта возможность не входит в Baseline, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Свойство text-box-trim CSS указывает, какие из верхнего и нижнего краёв текстового содержимого следует обрезать в блочном контейнере текстового элемента.
Синтаксис
/* Keywords */ text-box-trim: none; text-box-trim: trim-both; text-box-trim: trim-start; text-box-trim: trim-end; /* Global values */ 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 - Обрезается конечный (нижний) край.
Описание
Свойство text-box-trim указывает, какие из верхнего и нижнего краёв текстового содержимого следует обрезать в блочном контейнере текстового элемента.
Вертикальные интервалы различаются в зависимости от шрифта, что исторически затрудняло единообразный набор текста в интернете. Свойство text-box-trim вместе со связанным свойством text-box-edge, которое задаёт величину обрезаемого пространства, упрощает создание равномерных вертикальных интервалов в тексте.
Высота содержимого, состоящего только из текста, зависит от высоты шрифта. В цифровых файлах шрифтов в эту высоту входят все символы, в том числе заглавные буквы, восходящие и нисходящие элементы и т. д. У разных шрифтов разная базовая высота строки, а значит, строки текста с одинаковым font-size образуют блоки строк разной высоты, что влияет на вид интервалов между строками.
Свойство text-box-trim позволяет обрезать верхний и нижний края блочного контейнера текста, упрощая управление интервалами текста в направлении блока.
Фактическая величина обрезаемого пространства задаётся с помощью свойства text-box-edge. Например, можно обрезать верхний край по верхней границе заглавных или строчных букв шрифта, а нижний край выровнять по базовой линии шрифта.
Свойство text-box-trim, а также свойство text-box-edge можно задать с помощью сокращённого свойства text-box.
Формальное определение
| Исходное значение | none |
|---|---|
| Применяется к | Блочным контейнерам и встроенным блокам |
| Наследуется | нет |
| Вычисленное значение | указанное ключевое слово |
| Тип анимации | дискретный |
Формальный синтаксис
text-box-trim =
none |
trim-start |
trim-end |
trim-both
Примеры
Основы использования text-box-trim
В следующем примере мы задаём text-box-edge: cap alphabetic для двух абзацев. Это обрезает верхний край блочных контейнеров текстовых элементов по верхней границе заглавных букв, а нижний край выравнивает по базовой линии текста.
Затем для первого абзаца мы задаём значения trim-end свойства text-box-trim, а для второго — trim-both. В результате у первого абзаца обрезается только нижний край, а у второго — и верхний, и нижний.
<p class="one">This is .one</p> <p class="two">This is .two</p>
html {
font-family: sans-serif;
height: 100%;
}
body {
height: inherit;
display: flex;
flex-direction: column;
justify-content: center;
gap: 100px;
}
p {
margin: 0;
font-size: 6rem;
font-weight: bold;
}
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 мы добавили три основных элемента:
- Три элемента
<select>, позволяющие выбрать, какие края абзаца нужно обрезать (значениеtext-box-trim), а также сколько пространства обрезать от начального и конечного краёв блока абзаца (значениеtext-box-edge). - Элемент
<p>с текстом, к которому применяются значенияtext-box-*. Для этого абзаца задан атрибутcontenteditable, поэтому текст можно редактировать. - Элемент
<output>, отображающий объявленияtext-box-*, применённые к абзацу. Его содержимое обновляется при выборе значения.
Также мы подключаем шрифт из сервиса Google Fonts и применяем его к тексту примера.
Для краткости мы скрыли точный HTML-код.
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet" />
<section>
<div>
<label for="box-trim">Select edge(s) to trim:</label>
<select id="box-trim">
<option>none</option>
<option>trim-start</option>
<option>trim-end</option>
<option selected>trim-both</option>
</select>
</div>
<div>
<label for="trim-over">Select trim over (start) value:</label>
<select id="trim-over">
<option>text</option>
<option selected>cap</option>
<option>ex</option>
</select>
</div>
</section>
<p class="display" contenteditable>Holly Golightly</p>
<section>
<div>
<label for="trim-under">Select trim under (end) value:</label>
<select id="trim-under">
<option>text</option>
<option selected>alphabetic</option>
</select>
</div>
</section>
<output></output>
CSS
В CSS мы применяем подключённый шрифт к элементу <html> и размещаем элементы интерфейса с помощью flexbox. Для краткости большая часть кода CSS скрыта, но ниже приведены правила для абзаца, к которому применяются эффекты text-box-*, и для элемента <output>, отображающего применённые правила text-box-*:
html {
font-family: "Roboto", sans-serif;
height: 100%;
}
body {
height: inherit;
display: flex;
flex-direction: column;
justify-content: center;
gap: 30px;
}
section {
display: flex;
justify-content: space-between;
}
section:nth-of-type(2) {
justify-content: flex-end;
padding-bottom: 30px;
}
select {
width: 6rem;
}
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 сначала получим ссылки на три элемента <select> и два элемента <p>:
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>, а также выводит применённые объявления (как в полной, так и в сокращённой форме):
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>Shorthand equivalent:</span>
<br><br>
<span><code>text-box: ${textBoxTrimValue} ${textBoxEdgeValue}</code></span>
`;
}
В заключительной части JavaScript мы один раз вызываем функцию setEdgeTrim(), чтобы задать начальное состояние интерфейса. Затем для всех элементов <select> с помощью addEventListener добавляются обработчики события change. Благодаря этому setEdgeTrim() запускается при каждом изменении значения <select>, обновляя интерфейс соответствующим образом:
setEdgeTrim();
boxTrimSelect.addEventListener("change", setEdgeTrim);
trimOverSelect.addEventListener("change", setEdgeTrim);
trimUnderSelect.addEventListener("change", setEdgeTrim);
Результат
Результат выглядит следующим образом:
Изначально для text-box-trim задано значение trim-both, поэтому у абзаца обрезаются и верхний, и нижний края. Изначально для text-box-edge задано значение cap alphabetic, поэтому текст обрезается по верхней границе заглавных букв у начального края и по базовой линии у конечного края.
Попробуйте изменить значения <select>, чтобы увидеть, как они влияют на отображаемый текст.
Спецификации
| Спецификация |
|---|
| CSS Inline Layout Module Level 3 # text-box-trim |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | |
text-box-trim |
133 |
133 |
154 |
118 |
18.2 |
133 |
154 |
88 |
18.2 |
29.0 |
133 |
18.2 |
inline_elements |
Нет |
Нет |
154 |
Нет |
26.5Не работает в режимах вертикального письма. |
Нет |
154 |
Нет |
26.5Не работает в режимах вертикального письма. |
Нет |
Нет |
26.5Не работает в режимах вертикального письма. |
none |
133 |
133 |
154 |
118 |
18.2 |
133 |
154 |
88 |
18.2 |
29.0 |
133 |
18.2 |
trim-both |
133 |
133 |
154 |
118 |
18.2 |
133 |
154 |
88 |
18.2 |
29.0 |
133 |
18.2 |
trim-end |
133 |
133 |
154 |
118 |
18.2 |
133 |
154 |
88 |
18.2 |
29.0 |
133 |
18.2 |
trim-start |
133 |
133 |
154 |
118 |
18.2 |
133 |
154 |
88 |
18.2 |
29.0 |
133 |
18.2 |
См. также
-
text-box,text-box-edge - встроенная компоновка CSS, модуль
- CSS text-box-trim на developer.chrome.com (2025)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-box-trim