Распределение элементов с margin: auto в Flexbox
Иногда нужно не просто выровнять элементы, а распределить их в flex-контейнере так, чтобы между ними появилось нужное пространство. С этим отлично справляется
Пример 1:
Когда мы применяем
Пример 2:
В общем, если нужно разделить на "основное" и "дополнительное" — можно использовать
Глянуть код можно здесь.
Иногда нужно не просто выровнять элементы, а распределить их в flex-контейнере так, чтобы между ними появилось нужное пространство. С этим отлично справляется
margin: auto, давайте разберем, как это работает.Пример 1:
margin-right: auto (прижать к краям).container {
display: flex;
}
.element {
margin-right: auto;
}Когда мы применяем
margin-right: auto к элементу, он "захватывает" всё доступное пространство справа. Все элементы после него автоматически сдвигаются вправо.Пример 2:
margin-inline: auto (центрирование).container {
display: flex;
}
.element {
margin-inline: auto;
}margin-inline: auto добавляет автоматические отступы слева и справа, центрируя элемент. Остальные элементы распределяются по краям контейнера.В общем, если нужно разделить на "основное" и "дополнительное" — можно использовать
margin-right: auto. Если нужна симметрия — margin-inline: auto)Глянуть код можно здесь.
1👍29🔥10❤4
<hr> для разделения элементов в <select>
Не многие знают, что обычный тег
HTML:
Если не хочется использовать
Пример кода здесь.
Не многие знают, что обычный тег
<hr> можно использовать внутри выпадающих списков <select> для визуального разделения групп опций.HTML:
<select name="languages">
<option value="" disabled selected>Выберите язык</option>
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
<hr>
<option value="python">Python</option>
<option value="java">Java</option>
<hr>
<option value="php">PHP</option>
<option value="csharp">C#</option>
</select>
Если не хочется использовать
<optgroup> с label, то можно вполне обойтись <hr>)Пример кода здесь.
1👍18❤10🔥9
Визуальная шпаргалка по CSS :nth-child
Селектор
:nth-child(4) — конкретный элемент
Выбирает 4-й элемент среди соседей.
:nth-child(n+3) — все элементы начиная с третьего
Выбирает 3-й элемент и все последующие (3, 4, 5, 6, 7...).
Как работает формула:
■ n принимает значения 0, 1, 2, 3...
■ При n=0: 0+3 = 3 → выбирает 3-й элемент.
■ При n=1: 1+3 = 4 → выбирает 4-й элемент.
И так далее до конца.
:nth-child(-n+3) — первые N элементов
Выбирает только первые 3 элемента (1, 2, 3).
Как работает формула:
■ При n=0: 0+3 = 3 → выбирает 3-й элемент.
■ При n=1: -1+3 = 2 → выбирает 2-й элемент.
■ При n=2: -2+3 = 1 → выбирает 1-й элемент.
■ При n=3: -3+3 = 0 → не выбирает ничего.
:nth-child(3n+1) — каждый N-й элемент с отступом
Выбирает каждый 3-й элемент, начиная с 1-го (1, 4, 7, 10...).
Как работает формула:
■ 3n — это шаг (каждый третий)
■ +1 — это сдвиг (начинаем с первого)
■ При n=0: 3*0+1 = 1
■ При n=1: 3*1+1 = 4
■ При n=2: 3*2+1 = 7
:nth-child(odd) — нечётные элементы
Выбирает все нечётные элементы (1, 3, 5, 7...).
:nth-child(even) — чётные элементы
Выбирает все чётные элементы (2, 4, 6...).
:last-child — последний элемент
Выбирает последний элемент среди соседей.
:nth-last-child(2) — N-й элемент с конца
Выбирает второй элемент с конца.
Вот как-то так, надеюсь, если было непонятно, то стало понятней)
Селектор
:nth-child — мощный инструмент в CSS, но его синтаксис часто вызывает вопросы. Давайте разберём основные варианты использования с наглядными примерами.:nth-child(4) — конкретный элемент
.item:nth-child(4) {
...
}Выбирает 4-й элемент среди соседей.
:nth-child(n+3) — все элементы начиная с третьего
.item:nth-child(n+3) {
...
}Выбирает 3-й элемент и все последующие (3, 4, 5, 6, 7...).
Как работает формула:
■ n принимает значения 0, 1, 2, 3...
■ При n=0: 0+3 = 3 → выбирает 3-й элемент.
■ При n=1: 1+3 = 4 → выбирает 4-й элемент.
И так далее до конца.
:nth-child(-n+3) — первые N элементов
.item:nth-child(-n+3) {
...
}Выбирает только первые 3 элемента (1, 2, 3).
Как работает формула:
■ При n=0: 0+3 = 3 → выбирает 3-й элемент.
■ При n=1: -1+3 = 2 → выбирает 2-й элемент.
■ При n=2: -2+3 = 1 → выбирает 1-й элемент.
■ При n=3: -3+3 = 0 → не выбирает ничего.
:nth-child(3n+1) — каждый N-й элемент с отступом
.item:nth-child(3n+1) {
...
}Выбирает каждый 3-й элемент, начиная с 1-го (1, 4, 7, 10...).
Как работает формула:
■ 3n — это шаг (каждый третий)
■ +1 — это сдвиг (начинаем с первого)
■ При n=0: 3*0+1 = 1
■ При n=1: 3*1+1 = 4
■ При n=2: 3*2+1 = 7
:nth-child(odd) — нечётные элементы
.item:nth-child(odd) {
...
}Выбирает все нечётные элементы (1, 3, 5, 7...).
:nth-child(even) — чётные элементы
.item:nth-child(even) {
...
}Выбирает все чётные элементы (2, 4, 6...).
:last-child — последний элемент
.item:last-child::after {
...
}Выбирает последний элемент среди соседей.
:nth-last-child(2) — N-й элемент с конца
.item:nth-last-child(2) {
...
}Выбирает второй элемент с конца.
Вот как-то так, надеюсь, если было непонятно, то стало понятней)
1👍35🔥11❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект "выглядывающего" аватара
Давайте разберём CSS-трюк, который позволяет создать интерактивный аватар с эффектом "выглядывания" изображения за границы круга при наведении курсора.
HTML:
Здесь всего один контейнер и изображение.
Создаём круглый контейнер:
Базовый круг с золотистым фоном и светлой рамкой.
Главная фишка —
■
■ -100vw (верх) - отрицательное значение - не обрезаем сверху
■ 0 (право) - обрезаем по краю справа
■ 0 (низ) - обрезаем по краю снизу
■ 0 (лево) - обрезаем по краю слева
■
Позиционируем изображение:
Интерактивность:
При наведении изображение масштабируется в 1.4 раза, сохраняя центрирование благодаря
Потестить код можно здесь.
Давайте разберём CSS-трюк, который позволяет создать интерактивный аватар с эффектом "выглядывания" изображения за границы круга при наведении курсора.
HTML:
<div class="avatar">
<img src="avatar.png" alt="Аватар" />
</div>
Здесь всего один контейнер и изображение.
Создаём круглый контейнер:
.avatar {
width: 300px;
height: 300px;
border-radius: 50%;
background-color: #ddbe11;
position: relative;
clip-path: inset(-100vw 0 0 0 round 50%);
border: 6px solid #eaeaea;
}Базовый круг с золотистым фоном и светлой рамкой.
position: relative нужен для абсолютного позиционирования изображения внутри.Главная фишка —
clip-path:■
inset() - обрезает элемент по заданным отступам■ -100vw (верх) - отрицательное значение - не обрезаем сверху
■ 0 (право) - обрезаем по краю справа
■ 0 (низ) - обрезаем по краю снизу
■ 0 (лево) - обрезаем по краю слева
■
round 50% - скругляем форму обрезки до кругаПозиционируем изображение:
.avatar img {
position: absolute;
top: 70%;
left: 60%;
transform: translate(-50%, -50%);
width: 100%;
height: auto;
transition: transform 0.3s ease;
}Интерактивность:
.avatar:hover img {
transform: translate(-50%, -50%) scale(1.4);
}При наведении изображение масштабируется в 1.4 раза, сохраняя центрирование благодаря
translate(-50%, -50%) и выходя за пределы круга сверху благодаря нашему хитрому clip-path)Потестить код можно здесь.
1🔥40👍14❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Сжимающийся хедер при прокрутке
Иногда нужно сделать не просто фиксированный хедер, а такой, чтобы при скролле хедер фиксировался и уменьшался, освобождая место для контента.
Давайте разберём, как это можно реализовать.
HTML:
CSS:
Фишка сжимающегося хедера заключается в комбинации двух
■ Внешний контейнер
■ Внутренний контейнер
Таким вот хитрым образом можно получить нужный эффект)
Посмотреть в действии можно здесь.
Иногда нужно сделать не просто фиксированный хедер, а такой, чтобы при скролле хедер фиксировался и уменьшался, освобождая место для контента.
Давайте разберём, как это можно реализовать.
HTML:
<header class="header">
<div class="header-content">
<div class="header-logo">
Лого
</div>
<nav class="header-navigation">
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Blog</a>
<a href="#">Contact Us</a>
</nav>
</div>
</header>
CSS:
.header {
position: sticky;
top: -40px;
height: 110px;
}
.header-content {
height: 70px;
position: sticky;
top: 0;
}Фишка сжимающегося хедера заключается в комбинации двух
position: sticky.■ Внешний контейнер
.header имеет высоту 110px и прилипает к позиции top: -40px. Отрицательное значение заставляет контейнер прилипать ВЫШЕ viewport — его верхняя часть уходит за границу экрана.■ Внутренний контейнер
.header-content высотой 70px также имеет position: sticky с top: 0. Он прилипает к верхней границе родительского элемента, оставаясь всегда видимым.Таким вот хитрым образом можно получить нужный эффект)
Посмотреть в действии можно здесь.
2👍32🔥6❤5🗿2
Множественные границы через box-shadow
Иногда для дизайна требуется создать элемент с несколькими границами разных цветов. Классическое свойство
Свойство
HTML:
CSS:
Синтаксис
Для создания границы, мы задаем смещения по осям X и Y равным нулю, третье значение — радиус размытия тоже 0, четвертое значение — радиус распространения (spread radius) — задаёт толщину "границы", пятое — цвет.
Тени перечисляются от внутренней к внешней. Чтобы каждая последующая "граница" была видна, её радиус распространения должен быть больше, чем у предыдущей.
Также нужно помнить, что:
■
■ Эти "границы" не реагируют на события мыши.
Такой вот незамудренный способ)
Пример здесь.
Иногда для дизайна требуется создать элемент с несколькими границами разных цветов. Классическое свойство
border позволяет добавить только одну границу, можно напилить дополнительных div-обёрток, но есть элегантное решение — использовать box-shadow.Свойство
box-shadow позволяет задать несколько теней, разделяя их запятыми. Каждая тень может быть использована как отдельная граница.HTML:
<div class="box">
<p>box-shadow</p>
</div>
CSS:
.box {
background: white;
border-radius: 20px;
box-shadow:
0 0 0 10px #002700,
0 0 0 20px #005227,
0 0 0 30px #ff7223,
0 0 0 40px #ffd531,
0 0 0 50px #ffff88;
}Синтаксис
box-shadow:box-shadow: offset-x offset-y blur-radius spread-radius color;
Для создания границы, мы задаем смещения по осям X и Y равным нулю, третье значение — радиус размытия тоже 0, четвертое значение — радиус распространения (spread radius) — задаёт толщину "границы", пятое — цвет.
Тени перечисляются от внутренней к внешней. Чтобы каждая последующая "граница" была видна, её радиус распространения должен быть больше, чем у предыдущей.
Также нужно помнить, что:
■
box-shadow не влияет на макет элемента, то есть не добавляет элементу физическую ширину/высоту.■ Эти "границы" не реагируют на события мыши.
Такой вот незамудренный способ)
Пример здесь.
👍16🔥7❤3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Вкладки с анимацией скольжения
Сегодня давайте рассмотрим еще один классный эффект — плавно скользящие вкладки на CSS.
Основа — радио-кнопки:
Используем обычные радио-кнопки. Атрибут
Прячем
Инпуты скрыты, клик по
Добавляем скользящий фон:
Это просто цветной прямоугольник под текстом.
Двигаем
Когда выбран второй инпут,
Меняем цвет текста:
Когда
Готово, получаем крутую анимацию скольжения без JS)
Код как всегда лежит здесь.
Сегодня давайте рассмотрим еще один классный эффект — плавно скользящие вкладки на CSS.
Основа — радио-кнопки:
<input type="radio" id="radio-1" name="tabs" checked>
<label for="radio-1">Upcoming</label>
Используем обычные радио-кнопки. Атрибут
name="tabs" группирует их — можно выбрать только одну. checked делает первую активной по умолчанию.Прячем
input, стилизуем label:input { display: none; }
label {
width: 200px;
height: 54px;
cursor: pointer;
z-index: 2;
}Инпуты скрыты, клик по
label переключает связанный input. z-index: 2 нужен чтобы текст был поверх фона.Добавляем скользящий фон:
<span class="glider"></span>
.glider {
position: absolute;
width: 200px;
height: 54px;
background: #e6eef9;
z-index: 1;
transition: 0.25s ease-out;
}Это просто цветной прямоугольник под текстом.
transition сделает движение плавным.Двигаем
glider при клике:#radio-1:checked ~ .glider { transform: translateX(0); }
#radio-2:checked ~ .glider { transform: translateX(100%); }
#radio-3:checked ~ .glider { transform: translateX(200%); }Когда выбран второй инпут,
glider сдвигается на 100% — это его собственная ширина (200px). Получается ровно на одну вкладку вправо. Для третьей — на 200% (две вкладки).Меняем цвет текста:
input:checked + label { color: #185ee0; }Когда
input выбран (:checked), селектор + применяет стили к label, который идёт сразу за ним. Так активная вкладка красится.Готово, получаем крутую анимацию скольжения без JS)
Код как всегда лежит здесь.
1👍30🔥10❤7
Шпаргалка по Flexbox
Если все никак не получается запомнить принцип работы и основные свойства Flexbox, то вот вам годная шпаргалка - https://darekkay.com/flexbox-cheatsheet/flexbox-cheatsheet.pdf
Можно даже распечатать, чтоб под рукой всегда была и не гуглить каждый раз)
Ну а тем, кто хочет более подробно — https://yoksel.github.io/flex-cheatsheet/
Это интерактивная шпаргалка, можно кликать, экспериментировать и сразу видеть, как меняется поведение элементов. Отлично подходит для визуалов и тех, кто учится на практике.
Пользуйтесь на здоровье)
Если все никак не получается запомнить принцип работы и основные свойства Flexbox, то вот вам годная шпаргалка - https://darekkay.com/flexbox-cheatsheet/flexbox-cheatsheet.pdf
Можно даже распечатать, чтоб под рукой всегда была и не гуглить каждый раз)
Ну а тем, кто хочет более подробно — https://yoksel.github.io/flex-cheatsheet/
Это интерактивная шпаргалка, можно кликать, экспериментировать и сразу видеть, как меняется поведение элементов. Отлично подходит для визуалов и тех, кто учится на практике.
Пользуйтесь на здоровье)
1❤12🔥10👍7👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект подсветки ссылок
Давайте разберём интересный hover-эффект для ссылок, при наведении на ссылку текст плавно заполняется золотым фоном, создавая эффект маркера-выделителя.
HTML:
Стилизация ссылок:
■
■
■
■
■
Анимация при наведении:
При наведении мы сдвигаем фон так, чтобы показывалась золотая половина. Благодаря
Теперь даже простые ссылки засияют новыми красками)
Пример кода здесь.
Давайте разберём интересный hover-эффект для ссылок, при наведении на ссылку текст плавно заполняется золотым фоном, создавая эффект маркера-выделителя.
HTML:
<p>
Lorem Ipsum is simply <a href="#">dummy text</a> of the printing
and typesetting industry.
</p>
Стилизация ссылок:
a {
color: black;
text-decoration: none;
background: linear-gradient(to bottom, white 50%, gold 50%);
background-size: 100% 200%;
background-position: 0 0;
transition: background-position 400ms ease;
border-bottom: 2px solid gold;
font-weight: 500;
}■
text-decoration: none — убираем стандартное подчёркивание.■
linear-gradient(to bottom, white 50%, gold 50%) — создаем градиент, где верхняя половина белая, а нижняя золотая.■
background-size: 100% 200% — растягиваем фон в два раза по высоте.■
background-position: 0 0 — изначально показываем только верхнюю (белую) половину.■
border-bottom: 2px solid gold — золотая линия снизу как индикатор ссылки.Анимация при наведении:
a:hover {
background-position: 0 100%;
}При наведении мы сдвигаем фон так, чтобы показывалась золотая половина. Благодаря
transition это происходит плавно.Теперь даже простые ссылки засияют новыми красками)
Пример кода здесь.
1👍22❤6🔥6
Основные способы скрыть элемент в CSS
Иногда при верстке нужно скрыть элемент на странице. В CSS существует несколько способов это сделать — каждый из них имеет свои особенности и сценарии применения. Давайте разберём самые популярные способы.
1. display: none
Самый радикальный способ — элемент полностью удаляется из потока документа.
■ Элемент не занимает места на странице.
■ Не доступен для скринридеров.
■ Не учитывается в layout.
■ Используется для полного скрытия элементов.
2. visibility: hidden
Элемент становится невидимым, но продолжает занимать место.
■ Резервирует пространство в layout
■ Не доступен для взаимодействия.
■ Полезен, когда нужно сохранить размеры блока.
3. opacity: 0
Делает элемент прозрачным через управление непрозрачностью.
■ Элемент остается в потоке и занимает место.
■ Доступен для взаимодействия.
4. position: absolute с выносом за экран
Физически перемещает элемент за пределы видимой области.
■ Доступен для скринридеров.
■ Не влияет на layout.
5. clip-path
Обрезает видимую область элемента до нуля.
■ Элемент остается в DOM
■ Доступен для скринридеров.
6. width и height = 0
Схлопывает размеры элемента.
■ Не занимает места.
■ Содержимое скрыто через
7. transform: scale(0)
Масштабирует элемент до нулевого размера.
■ Отлично анимируется.
■ Резервирует исходное пространство.
Выбирайте способ в зависимости от задачи: нужна ли вам анимация, сохранение места или полное исчезновение элемента)
Иногда при верстке нужно скрыть элемент на странице. В CSS существует несколько способов это сделать — каждый из них имеет свои особенности и сценарии применения. Давайте разберём самые популярные способы.
1. display: none
Самый радикальный способ — элемент полностью удаляется из потока документа.
.hidden {
display: none;
}■ Элемент не занимает места на странице.
■ Не доступен для скринридеров.
■ Не учитывается в layout.
■ Используется для полного скрытия элементов.
2. visibility: hidden
Элемент становится невидимым, но продолжает занимать место.
.invisible {
visibility: hidden;
}■ Резервирует пространство в layout
■ Не доступен для взаимодействия.
■ Полезен, когда нужно сохранить размеры блока.
3. opacity: 0
Делает элемент прозрачным через управление непрозрачностью.
.transparent {
opacity: 0;
}■ Элемент остается в потоке и занимает место.
■ Доступен для взаимодействия.
4. position: absolute с выносом за экран
Физически перемещает элемент за пределы видимой области.
.offscreen {
position: absolute;
left: -9999px;
}■ Доступен для скринридеров.
■ Не влияет на layout.
5. clip-path
Обрезает видимую область элемента до нуля.
.clipped {
clip-path: inset(100%);
}■ Элемент остается в DOM
■ Доступен для скринридеров.
6. width и height = 0
Схлопывает размеры элемента.
.collapsed {
width: 0;
height: 0;
overflow: hidden;
}■ Не занимает места.
■ Содержимое скрыто через
overflow.7. transform: scale(0)
Масштабирует элемент до нулевого размера.
.scaled {
transform: scale(0);
}■ Отлично анимируется.
■ Резервирует исходное пространство.
Выбирайте способ в зависимости от задачи: нужна ли вам анимация, сохранение места или полное исчезновение элемента)
100🔥19✍6❤5👍4
Отображаем структуру файлов на веб-странице
Если вам вдруг когда-нибудь понадобится показать структуру проекта на сайте — есть простое и элегантное решение: ASCII-графика.
Всего три символа позволяют построить визуальное дерево файлов:
Оборачиваем всё в тег
HTML:
CSS:
Добавляем моноширинный шрифт + немного стилизации и все, нормальная наглядная структура проекта готова)
Пример можно глянуть здесь.
Если вам вдруг когда-нибудь понадобится показать структуру проекта на сайте — есть простое и элегантное решение: ASCII-графика.
Всего три символа позволяют построить визуальное дерево файлов:
├── — ответвление (не последний элемент)└── — последнее ответвление│ — вертикальная линия (связь с родителем)Оборачиваем всё в тег
<pre> — и готово.HTML:
<div class="card">
<pre>
project/
├── src/
│ ├── js/
│ │ └── main.js
│ ├── scss/
│ │ └── styles.scss
│ └── index.html
├── package-lock.json
├── package.json
└── webpack.config.js
</pre>
</div>
CSS:
pre {
font-family: monospace;
font-size: 18px;
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
color: #2d3748;
}Добавляем моноширинный шрифт + немного стилизации и все, нормальная наглядная структура проекта готова)
Пример можно глянуть здесь.
👍23🔥5❤4👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Расширяющийся сайдбар с помощью :has() и Grid
Давайте сегодня разберем еще один интересный пример использования псевдокласса
HTML:
CSS:
Контейнер изначально имеет две колонки:
Ключевая фишка — селектор
При наведении курсора на сайдбар срабатывает
Добавляем плавность и появление текста:
Отличный пример того возможностей современного CSS)
Код, как всегда здесь.
Давайте сегодня разберем еще один интересный пример использования псевдокласса
:has(), сделаем сайдбар с плавным раскрытием.HTML:
<div class="grid">
<nav class="sidebar">…</nav>
<div class="content">…</div>
</div>
CSS:
.grid {
display: grid;
grid-template-columns: 60px 1fr;
transition: grid-template-columns 400ms;
}Контейнер изначально имеет две колонки:
60px (узкий сайдбар) и 1fr (основной контент).Ключевая фишка — селектор
:has():.grid:has(.sidebar:hover) {
grid-template-columns: clamp(250px, 25%, 400px) 1fr;
}При наведении курсора на сайдбар срабатывает
:has(), который меняет ширину колонки с помощью функции clamp() - минимум 250px, максимум 400px, но не более 25% от ширины окна.Добавляем плавность и появление текста:
.sidebar .text {
opacity: 0;
transition: opacity 200ms;
}
.grid:has(.sidebar:hover) .sidebar .text {
opacity: 1;
transition-delay: 100ms;
}Отличный пример того возможностей современного CSS)
Код, как всегда здесь.
1👍24🔥11❤5
Крутой учебник по JS
Нашел книгу "JavaScript для тупых", необычное название, конечно)
Но суть в том, что это не про IQ, а про то, что стандартная академическая подача материала работает далеко не для всех.
Вот выдержка с первой страницы:
В общем, если вы:
■ только начинаете и засыпаете над толстыми талмудами;
■ уже что-то знаете, но чувствуете, что в голове каша;
■ просто цените неформальный и живой подход в обучении;
то попробуйте — этот учебник может стать для вас отличным глотком свежего воздуха)
Книга бесплатная и лежит здесь.
Нашел книгу "JavaScript для тупых", необычное название, конечно)
Но суть в том, что это не про IQ, а про то, что стандартная академическая подача материала работает далеко не для всех.
Вот выдержка с первой страницы:
Материал будет подаваться жестко.
Знаешь почему?
Потому что ты пришёл на курс "JavaScript для тупых", следовательно, обычная подача материала тебе не подходит по одной из нижеприведенных причин:
1. ты реально тупой, как угол в 179°, что не вывозишь то, что вывозит большинство адекватных людей;
2. для тебя обычная подача скучна и от этого материал не усваивается, либо усваивается на весьма короткий срок;
3. при обычной подаче не понимаешь, что происходит, и что от тебя требуется и зачем;
4. тебе просто-напросто лень читать огромные мануалы.
В общем, если вы:
■ только начинаете и засыпаете над толстыми талмудами;
■ уже что-то знаете, но чувствуете, что в голове каша;
■ просто цените неформальный и живой подход в обучении;
то попробуйте — этот учебник может стать для вас отличным глотком свежего воздуха)
Книга бесплатная и лежит здесь.
🔥23😁14❤12👍7✍1
Flexbox Defense
Нашел еще одну классную игру-тренажер, похожа на Flexbox Froggy, но эта отлично зайдет тем, кто любит игры в жанре Tower Defense)
Нужно с помощью свойств flexbox правильно располагать башни, чтобы успешно отражать атаки.
Ссылка на игру - http://www.flexboxdefense.com/
Проводим выходные с пользой)
Нашел еще одну классную игру-тренажер, похожа на Flexbox Froggy, но эта отлично зайдет тем, кто любит игры в жанре Tower Defense)
Нужно с помощью свойств flexbox правильно располагать башни, чтобы успешно отражать атаки.
Ссылка на игру - http://www.flexboxdefense.com/
Проводим выходные с пользой)
❤12👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытая кнопка поиска
Давайте сегодня разберем интересный прием с псевдоклассом
HTML:
CSS:
Изначально:
■ Кнопка скрыта
■ Не реагирует на клики
При вводе текста:
■ Псевдокласс
■ Кнопка плавно появляется
■ Становится кликабельной
Теперь кнопка будет появляться, когда она действительно нужна)
Затестить код можно здесь.
Давайте сегодня разберем интересный прием с псевдоклассом
:placeholder-shown — анимированную кнопку поиска, которая появляется только когда пользователь начинает вводить текст.HTML:
<form>
<input type="text" placeholder="Поиск...">
<input type="submit" value="Поиск">
</form>
CSS:
input[type="submit"] {
opacity: 0;
pointer-events: none;
transition: .3s;
}
input:not(:placeholder-shown) + input[type="submit"] {
opacity: 1;
pointer-events: auto;
}Изначально:
■ Кнопка скрыта
opacity: 0■ Не реагирует на клики
pointer-events: noneПри вводе текста:
■ Псевдокласс
:not(:placeholder-shown) определяет, что поле не пустое■ Кнопка плавно появляется
transition: .3s■ Становится кликабельной
pointer-events: autoТеперь кнопка будет появляться, когда она действительно нужна)
Затестить код можно здесь.
👍21❤8🔥8👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Заголовок с анимированным градиентом
Мы уже разбирали, как сделать заголовок с градиентом, давайте теперь разберем, как сделать заголовок с анимированным градиентом.
HTML:
CSS:
■ Создаем линейный градиент с четырьмя цветами.
■
■
С помощью
Как говорится — простенько, но со вкусом)
Код можно посмотреть здесь.
Мы уже разбирали, как сделать заголовок с градиентом, давайте теперь разберем, как сделать заголовок с анимированным градиентом.
HTML:
<h1>Формошлёп</h1>
CSS:
h1 {
background: linear-gradient(90deg, #00f5a0, #00d2ff, #7b61ff, #ff4d6d);
background-size: 200% 100%;
background-clip: text;
color: transparent;
animation: glide 2s linear infinite alternate;
}
@keyframes glide {
0% { background-position: 0% 50%; }
100% { background-position: 100% 50%; }
}■ Создаем линейный градиент с четырьмя цветами.
■
background-size: 200% растягивает градиент в два раза, чтобы цвета могли "скользить" по тексту. ■
background-clip: text обрезает фон по контуру текста, а color: transparent делает сам текст прозрачным.С помощью
@keyframes мы анимируем background-position, перемещая градиент слева направо и обратно. infinite делает цикл бесконечным, alternate заставляет анимацию воспроизводиться в обратном порядке.Как говорится — простенько, но со вкусом)
Код можно посмотреть здесь.
🔥16👍10❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Перемещаем выбранный тег в начало списка без JS
Сегодня разберем интересную фишку на чистом CSS, которая позволяет динамически перемещать выбранный элемент в начало списка.
Ключ к этому эффекту — свойство
HTML:
Чекбокс спрятан внутри
Скрываем чекбокс:
Располагаем теги в ряд:
Динамическое изменение порядка:
Селектор
Так просто с помощью
Пример кода здесь.
Сегодня разберем интересную фишку на чистом CSS, которая позволяет динамически перемещать выбранный элемент в начало списка.
Ключ к этому эффекту — свойство
order внутри Flexbox-контейнера, но давайте по порядку)HTML:
<label class="tag">
<input type="checkbox">
HTML5/CSS3
</label>
<label class="tag">
<input type="checkbox">
JavaScript
</label>
Чекбокс спрятан внутри
<label>, что позволяет кликать по всему тегу.Скрываем чекбокс:
.tag input {
display: none;
}Располагаем теги в ряд:
.tags-wrapper {
display: flex;
flex-wrap: wrap;
gap: 10px;
}Динамическое изменение порядка:
.tag:has(:checked) {
background: #007bff;
color: white;
order: -1;
}Селектор
:has(:checked) определяет, отмечен ли чекбокс внутри тега. Свойство order: -1 перемещает элемент в начало.Так просто с помощью
:has() и Flexbox мы получаем крутой интерактивный интерфейс)Пример кода здесь.
1🔥25👍16😐2❤1