В начале месяца вышел первый рабочий черновик спецификации CSS values and units 5, а в пятницу вечером в нем уже исправили первые опечатки и огрехи.
Напишу серию постов о том, что нового и полезного готовит нам csswg. Смотрите ниже по тегу #css_values_5.
Напишу серию постов о том, что нового и полезного готовит нам csswg. Смотрите ниже по тегу #css_values_5.
Запятые в аргументах функции
Аргументы в функциях сейчас разделяются запятыми. Это создает противоречие с тем, что аргумент может уже содержать запятую как часть себя. Появляется потребность в разделителе более высокого порядка. Им стала точка с запятой.
При парсинге списка аргументов фунцкции сначала все запятые будут считаться разделителями аргументов функции. Если будет встречена точка с запятой, то все предыдущие аргументы, написанные через запятую, превратяться в один большой аргумент. И для этой конкретной функции запятая больше не будет считаться разделителем высшего порядка.
Эти два примера эквивалентны:
А здесь три аргумента, один из которых состоит из списка двух значений через запятую:
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
Аргументы в функциях сейчас разделяются запятыми. Это создает противоречие с тем, что аргумент может уже содержать запятую как часть себя. Появляется потребность в разделителе более высокого порядка. Им стала точка с запятой.
При парсинге списка аргументов фунцкции сначала все запятые будут считаться разделителями аргументов функции. Если будет встречена точка с запятой, то все предыдущие аргументы, написанные через запятую, превратяться в один большой аргумент. И для этой конкретной функции запятая больше не будет считаться разделителем высшего порядка.
Эти два примера эквивалентны:
list-style: random-item(--x, disc, circle, square);
list-style: random-item(--x; disc; circle; square);
А здесь три аргумента, один из которых состоит из списка двух значений через запятую:
list-style: random-item(--x; disc, circle; square);
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
Функции интерполяции
Группа функций с постфиксом
Функция без префикса, просто
То есть, грубо говоря, где находится
Обратите внимания, что типы агрументов указаны как
Аналогично, функция
И такая же функция для интерполяции в контексте контейнера, где необязательный аргумент
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
Группа функций с постфиксом
*-progress()
, позволяющих посчитать положение значения на заданном промежутке между двумя другими в заданном контексте.Функция без префикса, просто
progress()
, принимает три значения и возвращает пропорцию (progress_value - start_value) / (end_value - start_value)
. То есть, грубо говоря, где находится
progress_value
на шкале между start_value
и end_value
./*
* @param {<calc-sum>} --progress_value
* @param {<calc-sum>} --start_value
* @param {<calc-sum>} --end_value
* @return {<number>}
*/
progress(var(--progress_value) from var(--start_value) to var(--end_value));
Обратите внимания, что типы агрументов указаны как
<calc-sum>
. Так же, как, например, у фукнций min(), max() и clamp(). Это значит, что можно писать вычисления внутри, не оборачивая их в calc().Аналогично, функция
media-progress()
возвращает число, представляющее собой текущее положение между двумя заданними значениями в контексте указанного медиа-запроса./*
* @param {<media-feature>} --media_feature
* @param {<calc-sum>} --start_value
* @param {<calc-sum>} --end_value
* @return {<number>}
*/
media-progress(var(--media_feature) from var(--start_value) to var(--end_value));
И такая же функция для интерполяции в контексте контейнера, где необязательный аргумент
<container-name>
позволяет допольнительно указать имя контейнера:
/*
* @param {<size-feature>} --size_feature
* @param {<calc-sum>} --start_value
* @param {<calc-sum>} --end_value
* @param {<container-name>} [optional] --container_name
* @return {<number>}
*/
container-progress(var(--size_feature) of <container-name> from var(--start_value) to var(--end_value));
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
Вычисление с использованием собственных размеров.
Не смотря на наличие определение собственных размеров в словаре Веб-стандаров, здесь можно считать, что собственные размеры - это те, что не могут быть установлены без отрисовки документа. Например нельзя знать, какой размер текста, пока он не будет нарисован заданным шрифтом.
В таких случаях мы не можем использовать проценты и другие зависимые от контента значения в свойствах, связанных с размерами элемента.
Но функция
Она принимает два аргумента, базис и выражение, которое должно быть рассчитано на основе этого базиса. При этом внутри выражения разрешено ключевое слово size, значения которого будет равно базису. А в качетве базиса можно указать не только численные значения, но и
Например, так можно сделать блок равным половине максимально возможной ширины по контенту:
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
Не смотря на наличие определение собственных размеров в словаре Веб-стандаров, здесь можно считать, что собственные размеры - это те, что не могут быть установлены без отрисовки документа. Например нельзя знать, какой размер текста, пока он не будет нарисован заданным шрифтом.
В таких случаях мы не можем использовать проценты и другие зависимые от контента значения в свойствах, связанных с размерами элемента.
Но функция
calc-size()
можно позволить это делать некоторым образом.calc-size( <calc-size-basis>, <calc-sum> )
Она принимает два аргумента, базис и выражение, которое должно быть рассчитано на основе этого базиса. При этом внутри выражения разрешено ключевое слово size, значения которого будет равно базису. А в качетве базиса можно указать не только численные значения, но и
<intrinsic-size-keyword>
, то есть вещи типа auto
, min-content
, max-content
и тому подобное. Значение базиса будет рассчитано на основе контекста свойства, в котором используется выражение.Например, так можно сделать блок равным половине максимально возможной ширины по контенту:
width: calc-size(max-content, size / 2);
P.S. Пост из серии про новый пятый уровень спецификации CSS values, остальные смотрите по тегу #css_values_5
GitHub
dictionary/dictionary.md at main · web-standards-ru/dictionary
Словари по фронтенду. Contribute to web-standards-ru/dictionary development by creating an account on GitHub.