Главная | Все статьи | Код

Новые (и старые) единицы измерения в CSS, о которых вы никогда не слышали

Время чтения статьи ~5 минут
Новые (и старые) единицы измерения в CSS, о которых вы никогда не слышали главное изображение

Это перевод статьи Massimo Artizzu The new (and old) CSS units you've never heard about.

JavaScript быстро эволюционирует в последнее время, но не то, чтобы другие языки веб-разработки стояли на месте.

CSS тоже развивается, и скорее всего Houdini совершит новый прорыв в CSS, но его, к сожалению, адаптируют далеко не все. Мы всё так же проходим процесс совещаний специалистов, которые создают новые спецификации и всё такое… Не так, как с непрерывными изменениями стандарта TC39, но всё же.

Вы вероятно слышали но, скорее всего — нет! о единицах измерения в CSS, речь о которых пойдёт в этой статье. И нет, не о тех, «старых» vw и vh (которые предстоит объяснить тем, кто меньше разбирается в CSS).

Ниже перечислены новые единицы CSS, которые будут детально описаны в готовящемся CSS Value и Units Module Level 4.

lh и rlh

lh равно текущей высоте строки, и это может стать очень полезной штукой при вычислении высоты текстового контента. К сожалению, ни один браузер не поддерживает это.

rlh, с другой стороны, эквивалентна тому, чем rem выступает для em: высоте строки главного элемента.

vi and vb

Еще одно интересное дополнение, подобно vw и vh — это процентное соотношение, относительно области просмотра (viewport). А именно:

  • vi составляет 1% от размера области просмотра (viewport) в направлении inline;
  • vb составляет 1% от размера области просмотра (viewport) в направлении block.

Что представляют из себя эти оси «inline» и «block»? Для языков с горизонтальным написанием, как английский или арабский, они соответствуют горизонтальному и вертикальному направлению, что делает эти две единицы измерения эквивалентными vw и vh.

Но для языков с вертикальным написанием (приходит в голову японский), эти направления взаимозаменяются.

Мы использовали такое различие в CSS с самого начала (настройка display, например), поэтому теперь они используются соответственно, поскольку создаются дополнительные спецификации CSS.

Жаль, что *ни один браузер, как всегда, не поддерживает эти единицы измерения 👎.

ic

В отношении интернационализации, ic— это восточный эквивалент ch, он представляет собой размер символа 0ic — размер CJK (китайского / японского / корейского ) идеограма (символа)  («вода», U + 6C34), поэтому его можно грубо интерпретировать как «количество идеограмов.

Но что это за «размер»? Это так называемая «advance measure» (предупредительная мера): если текст лежит горизонтально — это ширина, в противном случае — это высота. Обратите внимание, что та же концепция применима и к ch!

Ииии всё ещё нет поддержки браузерами.

cap

Это измерение так называемой cap-height. Спецификация определяет высоту капса как «приблизительно равную высоте заглавной латинской буквы». Существует алгоритм для её вычисления, даже для шрифтов, которые не содержат латинских букв, но я не буду объяснять подробности.

Ещё и потому, что мы не можем использовать их в каком-либо браузере.

Теперь немного конкретики

Давайте посмотрим на спецификацию постарше (Level 3), потому что хоть она и должна чаще использоваться и иметь широкую поддержку, в ней всё ещё присутствуют малоизвестные моменты...

turn и его братья

Этот параграф для разогрева, поскольку эта единица должна быть более известна, чем остальные.

Мы используем deg для поворота элементов при transform, так? Один turn эквивалентен 360 deg. Всё очень просто. Полезно для анимации (особенно для вращения на 360 градусов) и значений прогрессии, вычисляемых в JavaScript.

Но подождите, есть ещё кое-что! grad и rad тоже имеют свои значения, и да, как вы догадываетесь — это грады (сотая часть прямого угла) и радианы (угол, длина дуги которого равна радиусу окружности), соответственно.

И все они поддерживаются всеми браузерами (IE с 9-й версии), и я не особо вижу необходимость в градах, а вот радианы могут быть использованы напрямую из тригонометрических функций JavaScript.

Q

Эта единица должна поддерживаться всеми браузерами, потому что она — часть Level 3. Но на факте поддерживает её только Firefox, и с относительно недавней 49 версии (сентябрь 2016).

Так что это, Q? Это всего лишь 0.25мм — четверть милиметра.

И почему она нам вдруг могла понадобиться? По всей видимости она использовалась в печатной типографике. В Японии, где не используются пункты (points) и другие империальные единицы (и это 👍 для меня).

Соотношение сторон (Aspect ratio)

Не совсем единица измерения, потому что единица должна содержать чистое значение, но всё же это измерение. Соотношение сторон специально выражено через положительные целые числа, разделённые / (слеш или "солидус", говоря языком Unicode).

Где мы можем это использовать? В медиа-запросах конечно! Например:

@media screen and (min-aspect-ratio: 16/10) {
  /* something for wide screens */
}

Хорошие новости: это поддерживается любым браузером! Ура!  🎉

Hz and kHz

…Стоп, что? Как мы учили в универе, разве это не единицы частоты? Как они связаны с CSS?

Ответ на эти вопросы: да, — это единицы частоты и никакого отношения к CSS они не имеют, потому что в свойствах CSS в данный момент ничто не требует частоты. Но единицы частоты были сформулированы. Почему?

Возможно, для использования в будущем, на случай спецификации модуля таргетированного на синтез речи или какой-то акустический вывод. Уже разрабатывается CSS Aural style sheets module, он использует свойства, которые применяют частоту, но этот модуль ещё никто не видел.

Этот модуль был вытеснен новым, совместимым со Speech Synthesis Markup Language (SSML), который откликается на имя CSS Speech. Он всё ещё в разработке и содержит свойства (вроде voice-pitch), которые предусматривают использование частот, но он не готов.

Вполне понятно, почему ни один браузер не поддерживает единицы измерения частоты: мы бы в любом случае не смогли бы их использовать!

Аватар пользователя Natalia Bass
Natalia Bass 30 июля 2018
0
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 25 апреля
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 25 апреля
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время