Освободите пространство сверху и снизу вашего текстового контента; достичь оптического баланса.
Опубликовано: 14 января 2025 г.
Начиная с Chrome 133, text-box
позволяет разработчикам и дизайнерам настраивать пространство над и под текстом.
Browser Support
От руки:
text-box-trim: trim-start | trim-end | trim-both | none;
text-box-edge: cap | ex | text | leading;
line-fit-edge: alphabetic | text;
Сокращение:
text-box: trim-both cap alphabetic;
Это свойство позволяет вам управлять пространством над и под текстом, например <h1>
, <button>
и <p>
. Каждый шрифт создает различное количество направленного пространства этого блока, что влияет на размер элемента. Этот хаотичный вклад пространства нелегко измерить, и до сих пор его невозможно контролировать.
Шрифт знает, теперь знает и CSS!
Пространство над и под шрифтом обусловлено тем, как текст располагается в Интернете, и называется «полуинтерлиньяж». Об этом мастерски рассказывает Маттиас Отт в статье «The Thing With Leading In CSS» . По сути, когда набор текста выполнялся вручную, для разделения строк текста использовались кусочки металлического свинца. Сеть, вдохновленная лидированием, делит эту часть лида пополам и распределяет часть над контентом, а часть — под ним.
Эта история имеет смысл, потому что text-box
дает нам имена для каждой половины: сверху и снизу. Плюс возможность его обрезать.
У text-box
также есть предшествующий уровень техники, вы можете вспомнить захватывающий пост Итана Ванга под названием «Leading-Trim: The Future Of Digital Typesetting» , где впервые было представлено leading-trim
(ранее называвшееся text-box
).
Точкой входа в обрезку текста может быть Figma и ее элементы управления «вертикальной обрезкой» для дизайнеров. В этом посте X показано, где находится эта опция вертикальной обрезки и насколько она полезна для кнопок.
Независимо от того, как вы сюда попали, этот небольшой, звучный элемент управления типографикой может иметь большое значение.
Обзор функций и синтаксиса
Вот, на мой взгляд, две наиболее распространенные однострочники, которые вам понадобятся при работе с text-box
:
h1 {
/* trim both sides to the capital letters */
text-box: trim-both cap alphabetic;
/* trim both sides to the lowercase letter x */
text-box: trim-both ex alphabetic;
}
Обрезка обоих букв до cap alphabetic
будет наиболее распространенным использованием этой функции. В следующих демонстрациях это используется много раз. Однако в предыдущем примере также показан ex alphabetic
, поскольку он по-своему полезен для оптического баланса.
Детская площадка Исследователя
Следующая демонстрация позволяет вам изучить синтаксис и увидеть результаты с помощью раскрывающихся меню. Вы можете менять шрифты, изменять значения обрезки выше и ниже, а также следить за цветными визуальными элементами и метками.
Что стоит попробовать:
- Визуальная проверка того, как работает
text-box-trim
в однострочных и многострочных текстовых вариантах. - Наведя курсор на вариант, вы увидите значения обрезки, использованные для достижения этого эффекта.
- Изменение шрифта.
- Обрезка только одной стороны текстового поля.
- Просматривайте синтаксис во время игры.
Что я могу с его помощью построить или какие проблемы он решает?
Благодаря этой возможности обрезки возникают гораздо более простые решения по центрированию и выравниванию. Вы даже можете приблизиться к правильному интерлиньяжу, когда между содержимым можно использовать что-то вроде gap
.
Более простое центрирование
Для меньших по размеру, более встроенных и содержательных внутренних компонентов padding: 10px
является разумным стилем, который можно указать для элемента с одинаковым интервалом со всех сторон. Однако результат может сбить с толку людей, так как часто сверху и снизу имеется лишнее пространство.
Чтобы обойти эту проблему, разработчики часто явно уменьшают отступы сверху и снизу (блока), чтобы компенсировать эффект половины интерлиньяжа.
button {
padding-block: 5px;
padding-inline: 10px;
}
На этом этапе нам остается пробовать комбинации значений, пока все не станет оптически центрированным. Это может выглядеть хорошо на одном экране и в одной операционной системе, но не на другом.
text-box
позволяет нам обрезать половину начального пробела в тексте, делая полезными равные значения заполнения, например 10px
:
button {
text-box: trim-both cap alphabetic;
padding: 10px;
}
Вот несколько элементов <button>
, которые показывают, как обрезка пространства с помощью text-box
делает padding: 10px
выглядят одинаковыми со всех сторон в практичном интерактивном элементе. Обратите внимание, как альтернативный шрифт может создавать совершенно разные половинные интервалы.
Вот элементы <span>
, которые часто используются для отображения категорий или значков. Еще один момент, когда равносторонние отступы должны быть лучшим решением, но до появления text-box
нам приходилось обходиться без этого.
Более простое выравнивание
Дополнительное, неконтролируемое половинное пространство над ( over
) и снизу ( under
) текстового поля также затрудняет выравнивание. Следующие примеры показывают, когда половинный интерлиньяж может затруднить выравнивание и как обрезка сторон текстового поля может улучшить выравнивание.
Здесь изображение размещается рядом с текстом. Изображение вырастет до высоты, необходимой для текста, но без text-box
изображение всегда будет немного выше. С помощью text-box
изображение может идеально совпадать с текстовым содержимым.
Обратите внимание, что в сценариях с переносом строк пробел находится над первой форматированной строкой текста и под последней форматированной строкой текста.
В следующем примере обратите внимание, как эта функция логически адаптируется к изменению writing-mode
. Попробуйте изменить текст, посмотрите, как макет продолжает оставаться ровным.
Продолжить обучение
Хотите узнать больше? Следующий список ссылок предлагает различное количество дополнительной информации и вариантов использования.
- https://codepen.io/collection/zxQBaL — коллекция Codepen всех вышеперечисленных демо.
- https://github.com/jantimon/text-box-trim-examples — отличное исследование и демонстрации Яна Никласа
- https://css-tricks.com/two-css-properties-for-trimming-text-box-whitespace/
- https://drafts.csswg.org/css-inline-3/#text-edges
- Не путать с
size-adjust
илиascent-override
https://web.dev/articles/css-size-adjust. - https://www.smashingmagazine.com/2012/12/css-baseline-the-good-the-bad-and-the-ugly/
- https://css-tricks.com/two-css-properties-for-trimming-text-box-whitespace/
- применяется ко многим элементам HTML https://codepen.io/nileshprajapati/pen/RweKdmw
- Сообщение в блоге Safari https://webkit.org/blog/16301/webkit-features-in-safari-18-2/
- https://piccalil.li/blog/why-im-excited-about-text-box-trim-as-a-designer/