This media is not supported in your browser
VIEW IN TELEGRAM
Оживляем форму с помощью :focus-within
Сегодня разберем, как сделать формы немного умнее и приятнее для пользователя)
Поможет нам в этом псевдокласс
Допустим, у нас есть поле ввода с префиксом или суффиксом:
Когда пользователь кликает на
Для этого используем псевдокласс
Как только пользователь кликает на
Пример можно глянуть здесь.
Сегодня разберем, как сделать формы немного умнее и приятнее для пользователя)
Поможет нам в этом псевдокласс
:focus-within
Допустим, у нас есть поле ввода с префиксом или суффиксом:
<div class="input-group">
<span>https://</span>
<input type="text" placeholder="domain.tld" />
</div>
Когда пользователь кликает на
input
, мы хотим, чтобы всё поле реагировало — включая span
.Для этого используем псевдокласс
:focus-within
, который применяется к родителю, если любой из его потомков находится в фокусе:.input-group:focus-within {
border-color: #275efe;
}
.input-group:focus-within span {
background: #678efe;
color: white;
}
Как только пользователь кликает на
input
— весь контейнер "понимает", что внутри что-то активно, и реагирует)Пример можно глянуть здесь.
🔥23👍6❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Акцент в меню с помощью :has()
Сегодня разберём мини-лайфхак: меню с эффектом "акцента" на активном пункте.
Ну, т.е. когда наводишь на один пункт — остальные слегка затемняются.
Создадим обычное меню:
Добавим ховер, чтобы при наведении ссылка становилась оранжевой:
И теперь заюзаем
Что мы получаем в итоге:
■
■
■
В результате, когда мы наводим на любую ссылку в меню, ссылка под курсором становится ярко-оранжевой, все остальные ссылки тускнеют.
Такой вот эффект фокусировки внимания)
Код, как всегда, здесь.
Сегодня разберём мини-лайфхак: меню с эффектом "акцента" на активном пункте.
Ну, т.е. когда наводишь на один пункт — остальные слегка затемняются.
Создадим обычное меню:
<nav>
<ul class="nav-list">
<li><a href="#">Главная</a></li>
<li><a href="#">Статьи</a></li>
<li><a href="#">Видео</a></li>
<li><a href="#">Контакты</a></li>
</ul>
</nav>
Добавим ховер, чтобы при наведении ссылка становилась оранжевой:
nav a:hover {
color: #ff7a18;
}
И теперь заюзаем
:has
:nav ul:has(a:hover) a:not(:hover) {
opacity: 0.3;
}
Что мы получаем в итоге:
■
nav ul:has(a:hover)
— если внутри списка есть ссылка в состоянии hover
■
a:not(:hover)
— то все ссылки, которые НЕ в состоянии hover
■
opacity: 0.3
— сделать полупрозрачнымиВ результате, когда мы наводим на любую ссылку в меню, ссылка под курсором становится ярко-оранжевой, все остальные ссылки тускнеют.
Такой вот эффект фокусировки внимания)
Код, как всегда, здесь.
1👍43🔥15❤3✍2
This media is not supported in your browser
VIEW IN TELEGRAM
Футер выезжающий из-под контента
Сегодня разберём один из тех визуальных приёмов, который вы 100% видели на модных лендингах — "Sticky Footer Reveal", или по-русски — футер, который выезжает из-под контента при прокрутке)
HTML-разметка:
CSS:
Футер позиционируем через
Теперь, когда заказчик говорит: "Сделайте что-то модное" — ты просто вставляешь этот футер и уходишь в отпуск)
Полный код лежит здесь.
Сегодня разберём один из тех визуальных приёмов, который вы 100% видели на модных лендингах — "Sticky Footer Reveal", или по-русски — футер, который выезжает из-под контента при прокрутке)
HTML-разметка:
<div class="container">
<!-- контент -->
</div>
<footer>
<!-- футер -->
</footer>
CSS:
.container {
position: relative;
z-index: 1;
background: #fff;
}
z-index: 1
и position: relative
— это делает контейнер "выше" по слоям, чем футер. Поэтому он будет перекрывать футер при прокрутке.footer {
position: sticky;
bottom: 0;
background: #0b0b0b;
z-index: 0;
}
Футер позиционируем через
position: sticky
и bottom: 0
, чтобы закрепить на нижней границе страницы, а z-index: 0
— делает его "ниже" контента.Теперь, когда заказчик говорит: "Сделайте что-то модное" — ты просто вставляешь этот футер и уходишь в отпуск)
Полный код лежит здесь.
👍25🔥13😁4❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Раскрывающаяся панель поиска
Сегодня разберем классную штуку — раскрывающуюся панель поиска. Такую часто можно встретить в хедерах сайтов.
Создадим контейнер с инпутом и кнопкой:
Иконку возьмем из font-awesome, предварительно подключив его к странице.
CSS контейнера:
Теперь с помощью
Анимация появления инпута:
Вкратце это все, полностью посмотреть код можно здесь.
Сегодня разберем классную штуку — раскрывающуюся панель поиска. Такую часто можно встретить в хедерах сайтов.
Создадим контейнер с инпутом и кнопкой:
<div class="search-bar">
<input type="search" class="search-input" placeholder="Искать...">
<button class="search-btn">
<i class="fa-solid fa-magnifying-glass"></i>
</button>
</div>
Иконку возьмем из font-awesome, предварительно подключив его к странице.
CSS контейнера:
.search-bar {
display: flex;
justify-content: flex-end;
background: white;
border-radius: 50px;
width: 70px;
transition: width 0.4s ease;
overflow: hidden;
}
Теперь с помощью
:focus-within
расширяемся при фокусе на любом дочернем элементе:.search-bar:focus-within {
width: 500px;
}
Анимация появления инпута:
.search-input {
opacity: 0;
transition: opacity 0.4s ease;
}
.search-bar:focus-within .search-input {
opacity: 1;
}
Вкратце это все, полностью посмотреть код можно здесь.
👍25🔥13❤7
This media is not supported in your browser
VIEW IN TELEGRAM
Sticky заголовки
Иногда при прокрутке длинного контента нужно, чтобы заголовок текущего блока не убегал вверх, а оставался на экране, пока мы не дойдём до следующей секции.
Разберем, как это сделать с помощью
Html-структура:
CSS:
Что мы получаем:
■
■
■
Удобно использовать, например, для всяких пошаговых инструкций, чтобы юзер понимал с первого взгляда, на каком он этапе)
Код, как всегда, здесь.
Иногда при прокрутке длинного контента нужно, чтобы заголовок текущего блока не убегал вверх, а оставался на экране, пока мы не дойдём до следующей секции.
Разберем, как это сделать с помощью
position: sticky
.Html-структура:
<div class="content-block">
<h2>Шаг 1</h2>
<p>Контент...</p>
<h2>Шаг 2</h2>
<p>Контент...</p>
<h2>Шаг 3</h2>
<p>Контент...</p>
</div>
CSS:
h2 {
position: sticky;
top: 0;
background: #6200ee;
color: white;
padding: 12px 20px;
margin: 0;
z-index: 1;
}
Что мы получаем:
■
position: sticky + top: 0
— заголовок прилипает к верхней границе контейнера■
background
нужен, чтобы перекрывать контент снизу■
z-index: 1
— поднимаем заголовок над остальным контентомУдобно использовать, например, для всяких пошаговых инструкций, чтобы юзер понимал с первого взгляда, на каком он этапе)
Код, как всегда, здесь.
👍25🔥10❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Псевдобрейкпоинты для шрифта без @media
Все мы знаем про fluid typography с
Но если вас напрягает эта плавность и хочется, чтобы размер шрифта не плавал, а менялся чёткими скачками, как при брейкпоинтах, то оказывается, способ есть)
Для этого даже не нужны
Реализация:
Как это работает
1)
■ Минимум:
■ Максимум:
■ Желательное значение: результат функции
2)
■
■
3)
■ Округление результата до ближайшего кратного
Это убивает плавность и даёт ступенчатый рост — как будто у тебя есть брейкпоинты каждые пару сотен пикселей, но ты их не писал.
Вот такой хак еще в нашу копилку добавим, мало ли, вдруг пригодится)
Код лежит здесь.
Все мы знаем про fluid typography с
clamp()
— шрифт плавно меняется в зависимости от ширины окна.Но если вас напрягает эта плавность и хочется, чтобы размер шрифта не плавал, а менялся чёткими скачками, как при брейкпоинтах, то оказывается, способ есть)
Для этого даже не нужны
@media
— достаточно одной строчки в CSS и round()
.Реализация:
html {
font-size: clamp(
1em,
round(0.8em + 1.5vw, 0.5em),
2.5em
);
}
Как это работает
1)
clamp(min, preferred, max)
■ Минимум:
1em
■ Максимум:
2.5em
■ Желательное значение: результат функции
round()
.2)
0.8em + 1.5vw
■
0.8em
— стартовый размер■
1.5vw
— прибавка, зависящая от ширины окна3)
round(..., 0.5em)
■ Округление результата до ближайшего кратного
0.5em
.Это убивает плавность и даёт ступенчатый рост — как будто у тебя есть брейкпоинты каждые пару сотен пикселей, но ты их не писал.
Вот такой хак еще в нашу копилку добавим, мало ли, вдруг пригодится)
Код лежит здесь.
👍33🔥14❤2
Toggle Switch на CSS
Разберем, как сделать модный переключатель, вместо обычного чекбокса.
HTML структура:
Внутри
Теперь прячем чекбокс:
Стилизуем ползунок:
Добавляем бегунок (
Меняем стили при включении:
Получился классный выключатель, который легко кастомизировать)
Код можно найти здесь.
Разберем, как сделать модный переключатель, вместо обычного чекбокса.
HTML структура:
<label class="toggle-switch">
<input type="checkbox">
<span class="slider"></span>
</label>
Внутри
<label>
лежит скрытый <input type="checkbox">
и стилизованный <span class="slider">
, который и выглядит как переключатель.Теперь прячем чекбокс:
.toggle-switch input {
opacity: 0;
width: 0;
height: 0;
}
Стилизуем ползунок:
.slider {
background: #ccc;
border-radius: 34px;
transition: 0.4s;
}
Добавляем бегунок (
:before
):.slider:before {
content: "";
background: white;
border-radius: 50%;
transition: 0.4s;
}
Меняем стили при включении:
input:checked + .slider {
background: #2196F3;
}
input:checked + .slider:before {
transform: translateX(26px);
}
Получился классный выключатель, который легко кастомизировать)
Код можно найти здесь.
🔥20👍12❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Адаптивная таблица без JS
Таблицы на мобильных — это боль. Помните те времена, когда приходилось скроллить влево-вправо, чтобы увидеть все колонки? Или когда текст был настолько мелким, что нужна была лупа? Сегодня разберем, как можно решить эту проблему)
Наша таблица:
На десктопе всё ок, а для мобильных превращаем таблицу в карточки:
В итоге, на мобильном:
■
■ Заголовки прячутся (они больше не нужны)
■ Каждая строка становится отдельной карточкой
■
Согласитесь, выглядит круто)
Код положил сюда.
Таблицы на мобильных — это боль. Помните те времена, когда приходилось скроллить влево-вправо, чтобы увидеть все колонки? Или когда текст был настолько мелким, что нужна была лупа? Сегодня разберем, как можно решить эту проблему)
Наша таблица:
<table>
<thead>
<tr>
<th>Имя</th>
<th>Email</th>
<th>Город</th>
<th>Профессия</th>
</tr>
</thead>
<tbody>
<tr>
<td>Иван Петров</td>
<td>[email protected]</td>
<td>Москва</td>
<td>Frontend-разработчик</td>
</tr>
</tbody>
</table>
На десктопе всё ок, а для мобильных превращаем таблицу в карточки:
@media (max-width: 640px) {
/* Делаем все элементы таблицы блочными */
table, thead, tbody, th, td, tr {
display: block;
}
/* Прячем заголовки */
thead {
display: none;
}
/* Каждая строка становится карточкой */
tr {
border: 1px solid #ddd;
margin-bottom: 1rem;
padding: 1rem;
}
/* Ячейки превращаются в пары ключ-значение */
td {
display: flex;
justify-content: space-between;
}
/* Добавляем подписи из data-атрибутов */
td::before {
content: attr(data-label) ":";
font-weight: 600;
}
}
В итоге, на мобильном:
■
display: block
превращает все элементы таблицы в обычные блоки■ Заголовки прячутся (они больше не нужны)
■ Каждая строка становится отдельной карточкой
■
attr(data-label)
берет текст из HTML-атрибута и вставляет как подписьСогласитесь, выглядит круто)
Код положил сюда.
👍38🔥22❤5👏1
Градиентная обводка текста
Сегодня давайте разберем один из эффектных трюков — текст с градиентной обводкой на чистом CSS.
HTML:
Основные настройки вынесем в переменные:
Основной эффект:
Как это работает:
■ Создаём линейный градиент с четырьмя цветами.
■
■ Устанавливаем цвет текста, который совпадает с фоном страницы.
■ stroke эффект:
В результате мы видим только градиентную обводку текста, а сам текст сливается с фоном.
Это, конечно, не особо часто используется в работе, но вдруг когда-нибудь нужно будет сделать такой крутой эффект)
Потестить можно здесь.
Сегодня давайте разберем один из эффектных трюков — текст с градиентной обводкой на чистом CSS.
HTML:
<h1>Формошлёп</h1>
Основные настройки вынесем в переменные:
:root {
--color-background: #000119;
--stroke-width: 12px;
--font-size: 150px;
--font-weight: 700;
}
Основной эффект:
h1 {
background-clip: text;
background-image: linear-gradient(
to right,
#09f1b8,
#00a2ff,
#ff00d2,
#fed90f
);
color: var(--color-background);
font-size: var(--font-size);
font-weight: var(--font-weight);
-webkit-text-stroke-color: transparent;
-webkit-text-stroke-width: var(--stroke-width);
}
Как это работает:
■ Создаём линейный градиент с четырьмя цветами.
■
background-clip: text
— обрезаем фон по форме текста. ■ Устанавливаем цвет текста, который совпадает с фоном страницы.
■ stroke эффект:
-webkit-text-stroke-width
задаёт толщину обводки (12px).-webkit-text-stroke-color: transparent
делает внутреннюю часть обводки прозрачной.В результате мы видим только градиентную обводку текста, а сам текст сливается с фоном.
Это, конечно, не особо часто используется в работе, но вдруг когда-нибудь нужно будет сделать такой крутой эффект)
Потестить можно здесь.
👍16🔥9❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Не совсем по теме, но блин, ору))
😁48🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект "появления текста при наведении"
Давайте разберём интересный CSS-эффект, когда часть текста плавно появляется при наведении курсора.
HTML:
Здесь заголовок, но span с классом
Скрываем текст:
■
■
■
■
Эффект появления при наведении:
При наведении на
Такой вот прикольный эффект получается)
Посмотреть можно здесь.
Давайте разберём интересный CSS-эффект, когда часть текста плавно появляется при наведении курсора.
HTML:
<h1>Наведи<span class="hide">, чтобы увидеть весь текст</span>!</h1>
Здесь заголовок, но span с классом
.hide
изначально скрыт, он будет "появляться" при наведении. Скрываем текст:
.hide {
display: inline-block;
max-width: 0%;
vertical-align: bottom;
overflow: hidden;
white-space: nowrap;
transition: max-width 1s ease-in-out;
}
■
display: inline-block
— превращаем span в inline-block, для управления его шириной.■
max-width: 0
— ограничиваем максимальную ширину до 0.■
overflow: hidden
— обрезаем всё, что выходит за пределы блока.■
transition: max-width 1s ease-in-out
— анимация изменения ширины.Эффект появления при наведении:
h1:hover .hide {
max-width: 100%;
}
При наведении на
<h1>
мы увеличиваем max-width
до 100%, и текст плавно "раскрывается" слева направо.Такой вот прикольный эффект получается)
Посмотреть можно здесь.
👍30🔥11🗿2❤1
Стилизуем разрывы текста в CSS
Если у вас есть текст с оформлением, который переносится на несколько строк. То с помощью
Разберем на примере:
Здесь у нас 2 текста, которые переносятся на новую строку (
CSS:
Зададим одинаковое оформление, но первому тексту добавим
■ по умолчанию
■
Важно помнить, это работает только с inline-элементами.
Такой вот короткий лайфхак, если не знали об этом свойстве раньше)
Пример здесь.
Если у вас есть текст с оформлением, который переносится на несколько строк. То с помощью
box-decoration-break
можно контролировать, как оформление будет отображаться при переносе.Разберем на примере:
<div class="container">
<h1><span class="clone">Привет, мир!</span></h1>
<h1><span>Привет, мир!</span></h1>
</div>
Здесь у нас 2 текста, которые переносятся на новую строку (
max-width: 200px
).CSS:
span {
background: linear-gradient(to right, #4f46e5, #ec4899);
color: white;
padding: 12px;
}
.clone {
box-decoration-break: clone;
-webkit-box-decoration-break: clone;
}
Зададим одинаковое оформление, но первому тексту добавим
box-decoration-break: clone
и посмотрим разницу:■ по умолчанию
box-decoration-break: slice
— оформление ведёт себя как единое целое, паддинги только по бокам всего блока, фон/градиент продолжается между строками.■
box-decoration-break: clone
— каждая строка становится независимым блоком, паддинги со всех сторон у каждой строки, фон/градиент применяется к каждой строке отдельно.Важно помнить, это работает только с inline-элементами.
Такой вот короткий лайфхак, если не знали об этом свойстве раньше)
Пример здесь.
👍22🔥6❤2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Бургер-меню без JS
Давайте разберем, как сделать адаптивное меню для сайта, используя только HTML и CSS.
Нам нужно:
■ Скрытый
■
■ Меню изначально скрыто через
■ При клике на
HTML:
CSS:
Как работает:
■
■
■ Клик на
■ Селектор
■
■ Результат — меню появляется/исчезает при каждом клике.
Такая вот нехитрая, но рабочая схема)
Код, как всегда, здесь.
Давайте разберем, как сделать адаптивное меню для сайта, используя только HTML и CSS.
Нам нужно:
■ Скрытый
checkbox
для хранения состояния.■
Label
, как переключатель (кнопка бургера).■ Меню изначально скрыто через
opacity: 0
.■ При клике на
label
— чекбокс переключается и показывает меню.HTML:
<input type="checkbox" id="menu-toggle">
<div class="menu">
<nav>
<a href="#">Главная</a>
<a href="#">О нас</a>
</nav>
</div>
<label for="menu-toggle" class="menu-btn">
<span></span>
<span></span>
<span></span>
</label>
CSS:
#menu-toggle {
display: none;
}
.menu {
opacity: 0;
visibility: hidden;
}
#menu-toggle:checked ~ .menu {
opacity: 1;
visibility: visible;
}
Как работает:
■
Checkbox
скрыт — display: none
, но состояние сохраняется.■
Label
связан с input
через for="menu-toggle"
.■ Клик на
label
= клик на checkbox
— браузер автоматически переключает состояние.■ Селектор
~
— находит элементы .menu
после чекбокса.■
:checked
— псевдокласс активен только при отмеченном checkbox
.■ Результат — меню появляется/исчезает при каждом клике.
Такая вот нехитрая, но рабочая схема)
Код, как всегда, здесь.
👍15❤8🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект инвертирования цветов в CSS
Если нужно, как то заметно выделить элемент или даже блок на странице, к примеру при ховере, то можно попробовать использовать
Делается быстро, эффект заметный)
Просто вешаем на нужный элемент ховер с фильтром:
И всё, заметный интерактив готов)
Неплохо подходит: для кнопок, монохромных иконок (соцсети, меню), галерей — эффект "негатив" на изображениях, карточки товаров/услуг.
Потестить можно здесь.
Если нужно, как то заметно выделить элемент или даже блок на странице, к примеру при ховере, то можно попробовать использовать
filter: invert(100%)
.Делается быстро, эффект заметный)
Просто вешаем на нужный элемент ховер с фильтром:
.card:hover {
filter: invert(100%);
transition: filter 0.4s; /* для плавности */
}
И всё, заметный интерактив готов)
Неплохо подходит: для кнопок, монохромных иконок (соцсети, меню), галерей — эффект "негатив" на изображениях, карточки товаров/услуг.
Потестить можно здесь.
👍18🔥3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
"Липкий" хедер с эффектом размытия
Сегодня разберём, как сделать стильный фиксированный хедер с полупрозрачным фоном и размытием — прям, как у Apple)
Сделаем обычную разметку:
Тут просто, для примера хедер, и несколько секций.
Стилизуем хедер:
Делаем фиксированное позиционирование, ставим его поверх конента
Задаем фон с прозрачностью и с помощью
Можно поиграться с
Код лежит здесь.
Сегодня разберём, как сделать стильный фиксированный хедер с полупрозрачным фоном и размытием — прям, как у Apple)
Сделаем обычную разметку:
<header class="header"></header>
<main class="main">
<section class="section">
<h2></h2>
<p></p>
</section>
</main>
Тут просто, для примера хедер, и несколько секций.
Стилизуем хедер:
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: rgba(255, 255, 255, 0.6);
backdrop-filter: saturate(180%) blur(20px);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
z-index: 100;
}
Делаем фиксированное позиционирование, ставим его поверх конента
z-index: 100
.Задаем фон с прозрачностью и с помощью
backdrop-filter
получаем эффект размытия фона под элементом.Можно поиграться с
backdrop-filter
и background
, чтобы получилось еще интереснее)Код лежит здесь.
❤8🔥3👍2