This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный список покупок с :has()
Давайте сегодня разберем еще один интересный пример использования селектора
Сделаем список покупок, чтобы при установке галочки текст зачеркивался, цвет меняется на серый и добавлялась прозрачность.
HTML структура:
Ключевой CSS:
Как это работает:
■
■
■ Получаем зачеркивание и изменение цвета
Теперь CSS может даже в логику)
Код лежит здесь.
Давайте сегодня разберем еще один интересный пример использования селектора
:has(), который показывает его крутые возможности)Сделаем список покупок, чтобы при установке галочки текст зачеркивался, цвет меняется на серый и добавлялась прозрачность.
HTML структура:
<ul class="shopping-list">
<li>
<input type="checkbox" id="milk">
<label for="milk">Молоко</label>
</li>
<li>
<input type="checkbox" id="bread">
<label for="bread">Хлеб</label>
</li>
</ul>
Ключевой CSS:
li:has(input:checked) label {
text-decoration: line-through;
color: #999;
opacity: 0.7;
}Как это работает:
■
li:has(input:checked) — выбираем <li>, который содержит отмеченный чекбокс■
label — применяем стили к лейблу внутри такого <li>■ Получаем зачеркивание и изменение цвета
Теперь CSS может даже в логику)
Код лежит здесь.
1👍29🔥8❤2
Чередование элементов с nth-child
Есть довольно популярная задача — создание чередующегося макета, где элементы меняют своё расположение через один.
Допустим, у нас есть список карточек с текстом и изображением. Нужно, чтобы в четных карточках порядок элементов был обратным.
Давайте разберем простое решение с использованием Flexbox и псевдокласса
HTML:
CSS:
Это правило меняет направление flex-контейнера для каждой четной карточки, перемещая цветной блок в противоположную сторону.
Такая вот мелочь, которая превращает скучный список в продуманный интерфейс)
Полный код можно посмотреть здесь.
Есть довольно популярная задача — создание чередующегося макета, где элементы меняют своё расположение через один.
Допустим, у нас есть список карточек с текстом и изображением. Нужно, чтобы в четных карточках порядок элементов был обратным.
Давайте разберем простое решение с использованием Flexbox и псевдокласса
:nth-child().HTML:
<div class="card">
<div class="text-content">
Текст...
</div>
<div class="color-block"></div>
</div>
<div class="card">
<div class="text-content">
Текст...
</div>
<div class="color-block"></div>
</div>
CSS:
.card:nth-child(even) {
flex-direction: row-reverse;
}Это правило меняет направление flex-контейнера для каждой четной карточки, перемещая цветной блок в противоположную сторону.
Такая вот мелочь, которая превращает скучный список в продуманный интерфейс)
Полный код можно посмотреть здесь.
1👍21🔥7❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Текст с анимированным градиентом
Наткнулся на интересный эффект для текста, делается буквально в несколько строк CSS, а выглядит классно. Неплохо подойдет для заголовков лендингов на первых экранах)
HTML:
CSS:
Весь фокус в том, что мы создаем градиент из трех цветов (черный → белый → черный) и анимируем его позицию:
■ Градиент (#000 → #fff → #000) — создаем полосу света на темном фоне.
■
■
■
■ Анимация — двигаем градиент от -500% до 500%, создавая эффект пробегающего света.
Так что если заказчик попросить "оживить лендос", запилите ему этот эффект)
Потестить код можно здесь.
Наткнулся на интересный эффект для текста, делается буквально в несколько строк CSS, а выглядит классно. Неплохо подойдет для заголовков лендингов на первых экранах)
HTML:
<p>Шлёпаем формы и красим кнопки...</p>
CSS:
p {
background: linear-gradient(90deg, #000, #fff, #000);
background-size: 80%;
animation: animate 4s linear infinite;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
@keyframes animate {
0% { background-position: -500%; }
100% { background-position: 500%; }
}Весь фокус в том, что мы создаем градиент из трех цветов (черный → белый → черный) и анимируем его позицию:
■ Градиент (#000 → #fff → #000) — создаем полосу света на темном фоне.
■
background-size: 80% — делаем градиент уже самого текста, чтобы свет не покрывал всю ширину сразу.■
background-clip: text — обрезаем градиент по форме букв.■
text-fill-color: transparent — делаем сам текст прозрачным, видим только фон.■ Анимация — двигаем градиент от -500% до 500%, создавая эффект пробегающего света.
Так что если заказчик попросить "оживить лендос", запилите ему этот эффект)
Потестить код можно здесь.
1🔥15👍13❤5
This media is not supported in your browser
VIEW IN TELEGRAM
ContentEditable и списки
Думаю, все знают про
Но только сегодня я попробовал применить его к упорядоченному списку)
Получается интересная вещь, при Enter автоматом создается новый
Пока не придумал, где это можно применить, но будем держать в уме)
Посмотреть можно здесь.
Думаю, все знают про
contenteditable — этот атрибут позволяет делать любой HTML-элемент редактируемым прямо в браузере. Обычно его применяют к div для создания простых текстовых редакторов. Но только сегодня я попробовал применить его к упорядоченному списку)
Получается интересная вещь, при Enter автоматом создается новый
<li>, нумерация сама проставляется:<ol contenteditable>
<li>Первый пункт</li>
<li>Второй пункт</li>
<li>Третий пункт</li>
<li>Четвертый пункт</li>
</ol>
Пока не придумал, где это можно применить, но будем держать в уме)
Посмотреть можно здесь.
1🔥20👍12❤7✍3
This media is not supported in your browser
VIEW IN TELEGRAM
Цветной цикл для карточек
Здесь мы с вами разбирали, как делать цветной цикл для списков. Но эту фишку, как понимаете, можно использовать не только в списках, но и в целом на любых элементах.
Можно сделать классный список одинаковых блоков, но со своей изюминкой)
Создадим сетку карточек на гридах и добавим каждой свой цвет.
HTML:
Запилим гриды для карточек:
Автоматическое назначение цветов через :nth-child():
Формула
■
■
То есть
А
Добавляем ховер:
Цветной кружок изначально частично скрыт за границами карточки
Получаем классное чередование цветов со стильным ховером)
Потестить код можно здесь.
Здесь мы с вами разбирали, как делать цветной цикл для списков. Но эту фишку, как понимаете, можно использовать не только в списках, но и в целом на любых элементах.
Можно сделать классный список одинаковых блоков, но со своей изюминкой)
Создадим сетку карточек на гридах и добавим каждой свой цвет.
HTML:
<div class="card-container">
<div class="card-grid">
<div class="card">
<a href="#" class="card__link">
<div class="card__decoration"></div>
<h3 class="card__title">Первая карточка</h3>
</a>
</div>
<!-- и так далее -->
</div>
</div>
Запилим гриды для карточек:
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 30px;
}Автоматическое назначение цветов через :nth-child():
.card:nth-child(6n+1) .card__decoration { background-color: #f9b234; }
.card:nth-child(6n+2) .card__decoration { background-color: #3ecd5e; }
.card:nth-child(6n+3) .card__decoration { background-color: #e44002; }
.card:nth-child(6n+4) .card__decoration { background-color: #952aff; }
.card:nth-child(6n+5) .card__decoration { background-color: #cd3e94; }
.card:nth-child(6n+6) .card__decoration { background-color: #4c49ea; }Формула
6n+1:■
6n — это кратность (каждый 6-й элемент)■
+1 — это смещение (начинаем с 1-го элемента)То есть
6n+1 выберет элементы: 1, 7, 13, 19... и так далее.А
6n+2 выберет: 2, 8, 14, 20...Добавляем ховер:
.card__decoration {
height: 130px;
width: 130px;
position: absolute;
top: -75px;
right: -75px;
border-radius: 50%;
transition: transform 0.5s ease;
z-index: 1;
}
.card:hover .card__decoration {
transform: scale(8);
}Цветной кружок изначально частично скрыт за границами карточки
overflow: hidden, а при hover увеличивается в 8 раз и заливает всю карточку.Получаем классное чередование цветов со стильным ховером)
Потестить код можно здесь.
1🔥22❤9👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Краткая видео-шпаргалка по gap в grid css
Наткнулся на наглядный видос по работе gap в grid, решил с вами тоже поделиться.
Ну, а
В общем, сохраняем в коллекцию и забываем)
Наткнулся на наглядный видос по работе gap в grid, решил с вами тоже поделиться.
row-gap и column-gap задают отступы между рядами или колонками:.container {
display: grid;
/* Отступы между рядами */
row-gap: 50px;
/* Отступы между колонками */
column-gap: 20px;
}Ну, а
gap это шорткат для записи значений свойств row-gap и column-gap. Значения разделяются пробелом:.container {
display: grid;
gap: 50px 20px;
}В общем, сохраняем в коллекцию и забываем)
1👍19❤7🔥4😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Только смелым покоряется фронтенд)
😁47🔥11👍4
Циклические CSS-счетчики
Иногда нужно сделать так, чтобы список выглядел нестандартно, т.е. не просто «точки» или «дефисы».
Давайте разберем, как создать кастомные цикличные маркеры, которые будут повторяться по кругу.
HTML:
CSS:
■
■
■
■
Разумеется, можно использовать не только эмодзи, но и любые другие символы.
Пример кода здесь.
Иногда нужно сделать так, чтобы список выглядел нестандартно, т.е. не просто «точки» или «дефисы».
Давайте разберем, как создать кастомные цикличные маркеры, которые будут повторяться по кругу.
HTML:
<ul>
<li>Первый</li>
<li>Второй</li>
<li>Третий</li>
<li>Четвертый</li>
<li>Пятый</li>
<li>Шестой</li>
</ul>
CSS:
@counter-style thumbs {
system: cyclic;
symbols: 😀 😡 😍;
suffix: " ";
}
li {
list-style-type: thumbs;
}■
@counter-style — определяем свой стиль счетчика.■
system: cyclic — система чередования (маркеры должны циклически повторяться).■
symbols: 😀 😡 😍 — последовательность эмодзи, которые будут использоваться как маркеры. ■
suffix: " " — суффикс после маркера (чтобы был пробел после каждого эмодзи).Разумеется, можно использовать не только эмодзи, но и любые другие символы.
Пример кода здесь.
1👍24🔥8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Кнопка-переключатель с меняющимся текстом
Давайте сегодня разберем, как с помощью одного
HTML:
В html у нас будет простой чекбокс.
Превращаем его в кнопку:
Добавляем текст через псевдоэлемент:
Состояние "нажато":
Когда чекбокс отмечен, мы меняем фон на красный, текст — на белый.
Меняем текст при переключении:
Когда чекбокс отмечен — меняем текст с "Открыть" на "Закрыть".
Собственно всё, получаем крутую кнопку, которую не стыдно повесить на самое заметное место)
Код, как всегда лежит здесь.
Давайте сегодня разберем, как с помощью одного
<input type="checkbox"> и немного CSS можно создать красивую, анимированную кнопку-переключатель.HTML:
<input type="checkbox">
В html у нас будет простой чекбокс.
Превращаем его в кнопку:
input {
appearance: none;
padding: 15px 40px;
background: #ffffff;
border: 2px solid #ddd;
border-radius: 8px;
cursor: pointer;
color: #333;
}Добавляем текст через псевдоэлемент:
input::before {
content: "Открыть";
}Состояние "нажато":
input:checked {
background: #ff6b6b;
color: white;
}Когда чекбокс отмечен, мы меняем фон на красный, текст — на белый.
Меняем текст при переключении:
input:checked::before {
content: "Закрыть";
}Когда чекбокс отмечен — меняем текст с "Открыть" на "Закрыть".
Собственно всё, получаем крутую кнопку, которую не стыдно повесить на самое заметное место)
Код, как всегда лежит здесь.
2👍15🔥5❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Оживление форм с помощью accent-color
По умолчанию элементы форм в браузерах выглядят функционально, но скучно.
Для того, чтобы создать хоть какую-то минимальную интерактивность можно использовать
Базовая реализация:
Всего несколько строк кода — и формы уже выглядят интересней. Но конечно, использовать это нужно там, где это уместно)
Пример можно глянуть здесь.
По умолчанию элементы форм в браузерах выглядят функционально, но скучно.
Для того, чтобы создать хоть какую-то минимальную интерактивность можно использовать
accent-color с псевдоклассом :hover, чтобы при наведении менялся цвет.Базовая реализация:
/* Базовые стили - серый цвет */
input[type="range"],
input[type="checkbox"],
input[type="radio"] {
accent-color: #888;
cursor: pointer;
}
/* При наведении - меняем цвет */
input[type="range"]:hover,
input[type="checkbox"]:hover,
input[type="radio"]:hover {
accent-color: #ff1493;
}
Всего несколько строк кода — и формы уже выглядят интересней. Но конечно, использовать это нужно там, где это уместно)
Пример можно глянуть здесь.
1🔥14👍6❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Подсветка таблиц на чистом CSS
Сегодня разберем крутой трюк для создания интерактивной подсветки строк и столбцов в HTML-таблицах без JS. Типа как в Excel)
На html создадим обычную таблицу.
Базовые стили:
Подсветка строки:
При hover на строку подсвечиваем все ее ячейки.
Подсветка столбца:
Теперь когда мы наводим на ячейку, то подсвечивается и строка и столбец, выглядит круто)
Потестить можно здесь.
Сегодня разберем крутой трюк для создания интерактивной подсветки строк и столбцов в HTML-таблицах без JS. Типа как в Excel)
На html создадим обычную таблицу.
Базовые стили:
.highlight-table {
overflow: hidden; /* Важно для обрезки псевдоэлементов */
}Подсветка строки:
.highlight-table tbody tr:hover td,
.highlight-table tbody tr:hover th {
background: #fffe96;
}
При hover на строку подсвечиваем все ее ячейки.
Подсветка столбца:
.highlight-table td:hover::after,
.highlight-table thead th:hover::after {
content: "";
position: absolute;
z-index: -1;
top: -50vh;
left: 0;
width: 100%;
height: 100vh;
background: #fffe96;
}
vh позволяют создавать элементы размером с экран. В нашем случае 100vh дает полосу на всю высоту, а top: -50vh центрирует ее так, чтобы она покрывала всю таблицу.Теперь когда мы наводим на ячейку, то подсвечивается и строка и столбец, выглядит круто)
Потестить можно здесь.
1🔥19👍15❤4✍3
Новый синтаксис медиазапросов Media Queries Range
Если кто-то вдруг пропустил, то теперь медиазапросы можно писать проще и понятнее.
Раньше нужно было делать так:
Теперь можно так:
В целом доступны такие операторы сравнения:
■
■
■
■
■
Так что теперь писать медиазапросы не так больно, как раньше)
Поддержку браузерами можно глянуть здесь.
Если кто-то вдруг пропустил, то теперь медиазапросы можно писать проще и понятнее.
Раньше нужно было делать так:
@media (max-width: 1000px) {
/* ... */
}
@media (min-width: 1000px) and (max-width: 1400px) {
/* ... */
}Теперь можно так:
@media (width <= 1000px) {
/* ... */
}
@media (1000px <= width <= 1400px) {
/* ... */
}В целом доступны такие операторы сравнения:
■
< — меньше;■
> — больше;■
= — равно;■
<= — меньше или равно;■
>= — больше или равно.Так что теперь писать медиазапросы не так больно, как раньше)
Поддержку браузерами можно глянуть здесь.
1👍28🔥7❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Вайб-кодеры встретились на корпоративе)
😁36❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивное размытие текста
Давайте сегодня разберем еще один трюк, как можно определенные фразы в тексте "засекречивать", а при наведении курсора делать их читаемыми.
HTML:
Те фразы, которые хотим заблюрить оборачиваем в
CSS:
■ Все
■ При наведении
Можно использовать в разных интерактивных упражнениях, тестах, да и просто для акцентирования внимания)
Код, как всегда, здесь.
Давайте сегодня разберем еще один трюк, как можно определенные фразы в тексте "засекречивать", а при наведении курсора делать их читаемыми.
HTML:
<p><span>Lorem ipsum</span> dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut <span>labore et dolore</span> magna aliqua. </p>
Те фразы, которые хотим заблюрить оборачиваем в
<span>.CSS:
span {
filter: blur(3px);
transition: filter 0.3s ease;
}
span:hover {
filter: blur(0px);
cursor: pointer;
}■ Все
<span> получают filter: blur(3px), что делает их нечитаемыми.■ При наведении
span:hover фильтр сбрасывается до blur(0px), и текст становится чётким. Можно использовать в разных интерактивных упражнениях, тестах, да и просто для акцентирования внимания)
Код, как всегда, здесь.
1👍25🔥8❤5🗿1
Иконка в input с выравниванием
Давайте разберем еще один, довольно простой, способ добавления иконки и её выравнивания в
HTML-структура:
CSS:
Отступы:
■
■
Центрирование по вертикали:
■
Получаем отличное выравнивание и адаптивность благодаря rem)
Код лежит здесь.
Давайте разберем еще один, довольно простой, способ добавления иконки и её выравнивания в
input.HTML-структура:
<input type="text" placeholder="Поиск">
CSS:
input {
font-size: 1rem;
height: 2.5rem; /* 40px */
padding-left: 2.5rem; /* 40px */
background-image: url(search_24x24.svg);
background-position-y: center;
background-position-x: 0.5rem; /* 8px */
background-repeat: no-repeat;
}background-image — вставляем ссылку на иконку или svg-иконку напрямую через Data URL.Отступы:
■
padding-left: 2.5rem — освобождаем место для иконки.■
background-position-x: 0.5rem — отступ иконки от края.Центрирование по вертикали:
■
background-position-y: center — иконка всегда по центру.Получаем отличное выравнивание и адаптивность благодаря rem)
Код лежит здесь.
1👍26🔥12❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Анимированная ссылка
Сегодня разберем красивый эффект анимации для ссылок, который создает плавное появление подчеркивания при наведении курсора.
HTML:
CSS:
■ Убираем стандартное подчеркивание:
■ Создаем "поддельное" подчеркивание:
■ Анимация:
Эффект при наведении:
При наведении курсора размер фона меняется с 0% 2px на 100% 2px, создавая эффект "рисования" линии слева направо.
Получаем современный, модный эффект подчеркивания ссылок)
Код здесь.
Сегодня разберем красивый эффект анимации для ссылок, который создает плавное появление подчеркивания при наведении курсора.
HTML:
<p>Lorem ipsum dolor <a class="fancy-link" href="#">sit amet consectetur...</a>...</p>
CSS:
.fancy-link {
color: #6366f1;
text-decoration: none;
background-image: linear-gradient(#6366f1, #6366f1);
background-repeat: no-repeat;
background-position: bottom left;
background-size: 0% 2px;
transition: background-size 0.4s ease;
}■ Убираем стандартное подчеркивание:
text-decoration: none.■ Создаем "поддельное" подчеркивание:
background-image: linear-gradient(#6366f1, #6366f1) — сплошная линия того же цвета.background-position: bottom left — позиционируем внизу слева.background-size: 0% 2px — изначально ширина 0%, высота 2px.background-repeat: no-repeat — не повторяем фон.■ Анимация:
transition: background-size 0.4s ease — плавное изменение размера за 0.4 секунды.Эффект при наведении:
.fancy-link:hover {
background-size: 100% 2px;
}При наведении курсора размер фона меняется с 0% 2px на 100% 2px, создавая эффект "рисования" линии слева направо.
Получаем современный, модный эффект подчеркивания ссылок)
Код здесь.
1🔥17👍7❤6
Информационные блоки с помощью fieldset
Недавно наткнулся на интересный способ создавать стильные информационные блоки без лишних div'ов и классов. Оказывается, старый добрый
HTML:
CSS:
Получается чистый блок без лишних элементов)
Посмотреть код можно здесь.
Недавно наткнулся на интересный способ создавать стильные информационные блоки без лишних div'ов и классов. Оказывается, старый добрый
<fieldset> можно использовать не только для форм)HTML:
<fieldset>
<legend>💡 Совет</legend>
<p>Используйте сочетание клавиш Ctrl+S для быстрого сохранения документа.</p>
</fieldset>
CSS:
fieldset {
border: 2px solid #4a90e2;
border-radius: 8px;
padding: 6px 20px 20px;
background: white;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
max-width: 30em;
}
legend {
font-weight: bold;
padding: 4px 12px;
background-color: white;
color: #4a90e2;
border: 2px solid #4a90e2;
border-radius: 4px;
}Получается чистый блок без лишних элементов)
Посмотреть код можно здесь.
1👍21❤7🔥4
width + max-width vs min()
При создании адаптивных компонентов часто возникает задача: сделать элемент, который занимает определенную долю от родителя, но не превышает максимальное значение.
И для этого есть два основных подхода:
Классика:
■ Элемент занимает 50% от ширины родителя.
■ Но никогда не становится шире 10rem.
Современный подход:
Функция
Оба варианта делают одно и то же, но
Поддержку браузерами можно посмотреть здесь.
При создании адаптивных компонентов часто возникает задача: сделать элемент, который занимает определенную долю от родителя, но не превышает максимальное значение.
И для этого есть два основных подхода:
Классика:
.container {
width: 50%;
max-width: 10rem;
}■ Элемент занимает 50% от ширины родителя.
■ Но никогда не становится шире 10rem.
Современный подход:
.container {
width: min(50%, 10rem);
}Функция
min() выбирает наименьшее значение из двух значений.Оба варианта делают одно и то же, но
width: min(50%, 10rem) выглядит более семантично и элегантно)Поддержку браузерами можно посмотреть здесь.
1🔥18👍14❤9
Префикс в поле ввода телефона
Давайте сегодня разберем, как можно упростить процесс ввода телефона. Вместо того, чтобы заставлять юзера вводить код страны (+7 или 8), мы можем визуально отделить его от основного поля ввода.
HTML:
Объединяем всё в одно "поле":
Чтобы +7 и
Убираем рамку у самого
Ну и тут стоит понимать, что такой вариант подходит только для российских номеров, где код страны всегда +7. Если нужна международная форма, нужно добавить выбор страны — например, выпадающий список с кодами стран, но это уже совсем другая история)
Код можно посмотреть здесь.
Давайте сегодня разберем, как можно упростить процесс ввода телефона. Вместо того, чтобы заставлять юзера вводить код страны (+7 или 8), мы можем визуально отделить его от основного поля ввода.
HTML:
<div class="card">
<h2>Введите номер телефона</h2>
<div class="input-box">
<span class="prefix">+7</span>
<input type="tel" placeholder="9871234567">
</div>
</div>
Объединяем всё в одно "поле":
.input-box {
display: flex;
border: 1px solid #ddd;
border-radius: 8px;
padding: 0.75rem 1rem;
}Чтобы +7 и
input выглядели как одно целое, делаем флекс-контейнер и оформляем его рамкой.Убираем рамку у самого
input, чтобы поле выглядело цельным:input {
border: none;
}Ну и тут стоит понимать, что такой вариант подходит только для российских номеров, где код страны всегда +7. Если нужна международная форма, нужно добавить выбор страны — например, выпадающий список с кодами стран, но это уже совсем другая история)
Код можно посмотреть здесь.
1👍16🔥8❤4🗿1