Введение
Мне нравится, когда люди делятся тем, что они хотят видеть в CSS. За последние несколько недель я прочитал два потрясающих списка желаний Дэйва Руперта и Эрика Мейера. В 2022 году мы получили много новых CSS функций , мои любимые из них - контейнерные запросы (Container Query), :has
и subgrid.
Я подумал, почему бы мне не поделиться с вами тем, что я хотел бы однажды увидеть в CSS.
Знать о том, перенесён ли элемент (flex-wrap detection)
Когда я использую flex-wrap: wrap
, иногда мне хочется, чтобы был способ узнать, в какой именно происходит перенос на новую строку.
Например, предположим, что у меня есть раздел, который содержит заголовок и ссылку. Мы можем сделать этот маленький компонент отзывчивым с помощью flex-wrap: wrap
. Вишенкой на торте будет знать, когда элементы переносятся в новую строку.
.section-header {
display: flex;
flex-wrap: wrap;
}
В настоящее время мы не можем определить, когда элементы переносятся. Единственный способ - использовать медиа-запросы для внесения желаемых изменений. Я хотел бы, чтобы у нас могло быть что-то подобное этому:
.section-header {
container-type: style flex-wrap;
display: flex;
flex-wrap: wrap;
}
@container style(wrap) {
/* срабатывает только при переносе элементов */
}
Добавлю от себя, что я бы больше хотел видеть что-то типа
:isWrap
Приведенный выше синтаксис CSS не самый удобный и понятный глазу, но вы поняли идею.
Поддержка gap
В настоящее время нет способа проверить, поддерживается ли gap
при использовании с flexbox
.
Не буду вдаваться в подробности, но иногда это действительно необходимо. Как я это вижу:
@supports (gap: 10px) {
.element {
display: flex;
gap: 10px;
}
}
Сейчас этот код не работает.
Новый (логический) линейный градиент (linear-gradient)
Логические свойства CSS отлично подходят для создания многоязычных веб-сайтов. Поскольку арабский - мой родной язык, я использую множество вариантов отображения right-to-left
, и каждый раз, когда я использую логические свойства, мне хотелось бы, чтобы они поддерживались и в градиентах.
.hero {
background-image: linear-gradient(to inline-end, #000, transparent);
}
Знать, является ли элемент sticky-позиционированным
Я могу придумать простой пример, в котором я хочу знать, когда position: sticky
активен. Другими словами, когда элемент прилипает.
.site-header {
position: sticky;
top: 0;
}
.site-header:sticky {
box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.1);
}
Сглаженные градиенты
Давайте посмотрим правде в глаза, CSS-градиенты сами по себе не выглядят гладкими. Каждый раз, когда я использую градиенты, мне приходится модифицировать их, чтобы немного сделать их лучше.
Я использую этот отличный инструмент для создания сглаженных градиентов.
.hero {
linear-gradient(to bottom, #304365, ease-in-out, transparent);
};
Сглаживание в настоящее время является предложением CSSWG, но ни один браузер еще не принял его.
Анимировать text-decoration
Я хотел бы, чтобы у нас был способ анимировать подчеркивания ссылок без использования CSS-фона или псевдоэлементов. Почему бы не использовать что-то вроде text-decoration-size
?
a {
text-decoration-size: 0%;
transition: text-decoration-size 0.3s;
}
a:hover {
text-decoration-size: 100%;
}
Leading trim
Одной из проблем при работе с некоторыми шрифтами является различное начальное значение (отступ от букв шрифта), что может привести к несоответствию интервалов до и после шрифта.
Подробнее об этой проблеме и как её исправить тут и тут.
Контролировать overscroll
В настоящее время мы можем предотвратить цепочку прокрутки, используя overscroll-behavoir: contain
. Представьте, что у вас есть модальный элемент, и при его прокрутке элемент body
тоже будет прокручиваться.
Сейчас это поддерживается, но одна вещь, которая мне в этом не нравится, - это то, что она не будет работать, если элемент имеет короткое содержимое.
Заключение
На этом всё, делитесь своим мнением и предложениями относительно новых CSS функций в комментариях, а любые ошибки в статье смело относите мне в лс, заранее спасибо!