Интересное решение на
https://codepen.io/robinrendle/pen/MWRxNJr
#css
CSS определить, что содержимое блока не помещается в нем и сделать что-то - через определение появления скролла и установку CSS кастомного свойстваhttps://codepen.io/robinrendle/pen/MWRxNJr
#css
codepen.io
Detect scroll with CSS
...
👍6
В
Интересно, что внутрь тела этих функций можно ставить, например,
Через три года в
#css #chrome #gitlab
Chrome Canary уже тестируются CSS custom functions@function --negate(--value) {
result: calc(-1 * var(--value));
}
:root {
padding: --negate(1px); /* = -1px */
}Пользовательскую функцию можно рассматривать как расширенное пользовательское свойство, которое вместо замены одним фиксированным значением вычисляет значение замены на основе параметров функции и значений пользовательских свойств в момент ее вызова.
Интересно, что внутрь тела этих функций можно ставить, например,
@mediaЧерез три года в
GitLub-е опять будут переписывать свою дизайн систему. Хочешь снизить прибыль компании и обеспечить фронтендеров большой зарплатой на много лет вперёд - используй Atomic CSS.#css #chrome #gitlab
👍8
Если работаете с
CSS Variable Autocomplete
#css #tip
CSS properties в VS Code, то вот полезное расширениеCSS Variable Autocomplete
#css #tip
Visualstudio
CSS Variable Autocomplete - Visual Studio Marketplace
Extension for Visual Studio Code - Autocomplete CSS Variable support CSS, SCSS, LESS, PostCSS, VueJS, ReactJS and more
👍9❤🔥1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
По совету в комментариях к посту про
Но не готовой библиотекой, а свой. Ну, потому что свой всегда лучше - и роутинг можно задействовать, и кастомный контент тултипов, и ветвистые пути туров.
Делал не сам, конечно, с
Сгенерил он что-то приличное раза с пятого. Только оверлей на весь экран, не подсвечивается целевой элемент.
Я его прошу доделать, и даю ссылки на код
Ничего себе, какой самонадеянный
Ну, ладно, говорю, показывай своё "мач беттер".
Показывает. И ведь реально гениально!
Вопрос: как он это сделал?
#lissa #css
Lissa Health решил добавить Tour на сайт.Но не готовой библиотекой, а свой. Ну, потому что свой всегда лучше - и роутинг можно задействовать, и кастомный контент тултипов, и ветвистые пути туров.
Делал не сам, конечно, с
AI помощником.Сгенерил он что-то приличное раза с пятого. Только оверлей на весь экран, не подсвечивается целевой элемент.
Я его прошу доделать, и даю ссылки на код
driverjs для примера. Он отвечает:I've implemented a much better approach for the tour overlay that's similar to driverjs.
Ничего себе, какой самонадеянный
Sonnet попался, думаю. Когда я свой onboarding делал, много помучился с этим вырезанием дырки в оверлее, особенно не прямоугольной (в driverjs это на svg масках реализовано).Ну, ладно, говорю, показывай своё "мач беттер".
Показывает. И ведь реально гениально!
Вопрос: как он это сделал?
#lissa #css
👍10🔥1😁1🤡1
Ответ к вопросу в прошлом посте
Реализация
1. Находим абсолютные координаты target element.
2. Создаем прозрачный модальный элемент с такими же абсолютными координатными.
3. Ставим ему...
Это первая половина гениальности. Вторая состоит в том, что теперь анимация перехода подсветки это тоже одна
Ну и копирование исходного
В итоге весь визуал туринга занимает меньше 20 строк по сути, и можно сосредоточиться на логике.
На таких велосипедах я готов всю жизнь кататься. А антивелосипедисты могут использовать
#tour #css
Реализация
tour:1. Находим абсолютные координаты target element.
2. Создаем прозрачный модальный элемент с такими же абсолютными координатными.
3. Ставим ему...
boxShadow: 0 0 0 9999px rgba(0, 0, 0, 0.7)Это первая половина гениальности. Вторая состоит в том, что теперь анимация перехода подсветки это тоже одна
CSS строка: transition.Ну и копирование исходного
border-radius даст в большинстве случаев ту же самую форму.В итоге весь визуал туринга занимает меньше 20 строк по сути, и можно сосредоточиться на логике.
На таких велосипедах я готов всю жизнь кататься. А антивелосипедисты могут использовать
VueUse, svg маски и прочие достижения контемпорари фронтенда.#tour #css
🤡15🔥6👍5💊3
This media is not supported in your browser
VIEW IN TELEGRAM
Дожили
В
Теперь сайт Аэроэкспреса пофиксят...
#chrome #css
В
Chrome 135 появилась возможность стилизовать нативный <select>Теперь сайт Аэроэкспреса пофиксят...
#chrome #css
🤯9👍4💩1
В
Однако полной замены
Но для ванильных случаев это полезное нововведение
#css
CSS есть @scope функция, ограничивающая область применения стилей:<template>
<div class="box">
<button class="button">Click me</button>
</div>
</template>
<style>
@scope (.box) {
.button {
color: red;
}
}
</style>
Однако полной замены
Vue scoped она не может дать. Например, потому, что если компонент выше вывести списком, то во Vue у каждого будет свой data атрибут и своя область видимости стилей, а у @scope всё смешаетсяНо для ванильных случаев это полезное нововведение
#css
👍5
Контейнерные запросы (
Что такое Scroll States?
Пример:
Где это можно использовать?
- Индикация прокрутки — визуально показывать, что есть ещё контент ниже
- "Липкие" заголовки — автоматически делать заголовки
- Изменение навигации — например, показывать кнопку "Наверх" при прокрутке
- Оптимизация интерфейса — скрывать второстепенные элементы при прокрутке
Документация
#chrome #css
Container Queries) — это инструмент в CSS, который позволяет стилизовать элементы на основе размеров их родительского контейнера, а не всего окна браузера. В Chrome 133 появилась новая фича — scroll states для контейнерных запросов, которая добавляет ещё больше контроля над поведением элементов.Что такое Scroll States?
scrollable, stuck и snapped - это новые условия свойства scroll-state, которые можно использовать внутри @container, чтобы применять стили в зависимости от состояния прокрутки контейнера:Пример:
.stuck-top {
container-type: scroll-state;
position: sticky;
top: 0px;
> nav {
@container scroll-state(stuck: top) {
background: _Highlight;
color: _HighlightText;
}
}
}Где это можно использовать?
- Индикация прокрутки — визуально показывать, что есть ещё контент ниже
- "Липкие" заголовки — автоматически делать заголовки
sticky при прокрутке- Изменение навигации — например, показывать кнопку "Наверх" при прокрутке
- Оптимизация интерфейса — скрывать второстепенные элементы при прокрутке
Документация
#chrome #css
❤🔥4🔥2💩2
В последних версиях
Сейчас для процессинга
Экспериментально lightningcss был в
#vite #css
Vite активно доделывают поддержку lightningcssСейчас для процессинга
CSS используется ESBuild, но с переходом на Rolldown нужно что-то другое. Экспериментально lightningcss был в
Vite с 4 версии.#vite #css
👍2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
:hover > :not(:hover)
#css #tip
hover обычно используется, чтобы выделить какой-то элемент. Но иногда красивей что-то сделать с остальнымиul {
@media (hover) and (prefers-reduced-motion: no-preference) {
& > li {
transform-origin: left center;
transition: transform 1s var(--ease-spring-3), opacity 0.3s var(--ease-3);
}
&:hover > li:not(:hover) {
opacity: 0.25;
transform: scale(0.8);
}
}
}#css #tip
👍21
Самые значимые обновления
- Анимация
-
-
-
-
#css
CSS в 2024 года:- Анимация
height : auto + calc-size-
@starting-style: решает проблему, когда добавление элементов в DOM ломает анимацию-
Scroll-driven animations: эта функция добавляет в CSS анимации, запускаемые скроллом.-
Popover API: Позволяет создавать всплывающие подсказки и окна на чистом CSS-
Document view transitions: позволяет анимировать переходы между HTML-документами.#css
👍20
CSS продолжает развиваться в сторону языка программированияНачиная с
Chrome 140 и Safari 18.2 стала возможна арифметика с разными единицами размерностиИсточник
.container {
position: relative;
i {
--angle: calc(sibling-index() * 10deg);
--distance: calc(var(--angle) / 360deg * 180px);
position: absolute;
inset: -0.5em;
background-color: #fff;
border-radius: 50%;
transform: rotate(var(--angle)) translateX(var(--distance));
}
}<div class="container">
<i></i>
...
<i></i>
</div>
#css
🔥8👎7🥱1
В
#css
media queries нельзя использовать CSS свойства, но есть обходные пути через container queries@property --inline-size-s {
syntax: "<length-percentage>";
inherits: true;
initial-value: 100vi;
}
:root {
--breakpoint-s: 48em;
--inline-size-s: min(var(--breakpoint-s), 100vi);
}
body {
background-color: var(--bg-color);
--bg-color: oklch(0.94 0.01 99);
@container style(--inline-size-s: var(--breakpoint-s)) {
--bg-color: oklch(0.87 0.21 95.82);
}
}#css
codepen.io
A workaround for using custom properties in media queries (Demo 2)
...
👍4