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
Заголовок с обводкой и тенью
Сегодня хочу поделиться простым, но эффектным приёмом, отлично подойдет для заголовков на лендосах или просто для создания визуального акцента на странице.
HTML:
Здесь просто заголовок.
CSS:
Итого:
■
■
■
Так, с помощью простого трюка, получаем стильный и запоминающийся заголовок)
Код можно глянуть здесь.
Сегодня хочу поделиться простым, но эффектным приёмом, отлично подойдет для заголовков на лендосах или просто для создания визуального акцента на странице.
HTML:
<h1 class="outline-text">ФОРМОШЛЁП</h1>
Здесь просто заголовок.
CSS:
.outline-text {
color: transparent;
-webkit-text-stroke: 1.5px black;
text-stroke: 1.5px black;
text-shadow: 5px 5px #6C757D;
}Итого:
■
color: transparent — делаем основной цвет букв прозрачным.■
-webkit-text-stroke: 1.5px black — добавляем чёрную обводку толщиной 1.5px.■
text-shadow: 5px 5px #6C757D — добавляем тень, смещённую на 5px вправо и 5px вниз.Так, с помощью простого трюка, получаем стильный и запоминающийся заголовок)
Код можно глянуть здесь.
1👍14🔥6❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Аккордеон со скрывающимся заголовком
Недавно попался на глаза аккордеон без заголовков, это не очень удобно на мой взгляд, но у дизайнеров свое мнение) Давайте разберем, как это реализуется.
HTML:
Для скрытия заголовка нужно только одно CSS-правило:
Просто прячем весь
Но обязательно нужно использовать атрибут
Он группирует все аккордеоны. Когда открываешь один — остальные автоматически закрываются.
Без него все открытые секции останутся открытыми одновременно, и закрыть их будет невозможно, ведь заголовок мы скрыли)
Код из примера здесь.
Недавно попался на глаза аккордеон без заголовков, это не очень удобно на мой взгляд, но у дизайнеров свое мнение) Давайте разберем, как это реализуется.
HTML:
<details name="accordion">
<summary>Заголовок</summary>
<div class="content">
<p><strong>Заголовок.</strong> Подробное описание...</p>
</div>
</details>
Для скрытия заголовка нужно только одно CSS-правило:
details[open] summary {
display: none;
}Просто прячем весь
<summary> когда аккордеон открыт.Но обязательно нужно использовать атрибут
name:<details name="accordion">
Он группирует все аккордеоны. Когда открываешь один — остальные автоматически закрываются.
Без него все открытые секции останутся открытыми одновременно, и закрыть их будет невозможно, ведь заголовок мы скрыли)
Код из примера здесь.
1👍20🔥9❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Анимация меняющихся слов
Наверняка вы видели, особенно на лендосах такой эффект, когда текст динамически меняется. Это простой, но очень эффектный способ привлечь внимание и показать несколько преимуществ продукта или услуги в одном месте.
Давайте разберём, как реализовать такую анимацию.
HTML:
Добавляем четвёртый элемент — дубликат первого слова. Это ключ к плавному зацикливанию анимации. Когда анимация дойдёт до последнего слова (которое выглядит как первое), она мгновенно вернётся к началу, и переход будет незаметен.
Контейнер для слов:
Стили для слов:
■
■
Keyframes:
■ 0%-25% — показываем первое слово (HTML).
■ 33%-58% — сдвигаем на -100% (CSS).
■ 66%-91% — сдвигаем на -200% (JavaScript).
■ 100% — сдвигаем на -300% (HTML).
Когда анимация доходит до конца (100%), она мгновенно возвращается к 0%.
Поскольку четвёртое слово идентично первому, переход незаметен!
Классный и довольно простой способ оживить страницу)
Потестить можно здесь.
Наверняка вы видели, особенно на лендосах такой эффект, когда текст динамически меняется. Это простой, но очень эффектный способ привлечь внимание и показать несколько преимуществ продукта или услуги в одном месте.
Давайте разберём, как реализовать такую анимацию.
HTML:
<div class="container">
<p>Я ❤️</p>
<div class="words">
<span class="word">HTML</span>
<span class="word">CSS</span>
<span class="word">JavaScript</span>
<span class="word">HTML</span>
</div>
</div>
Добавляем четвёртый элемент — дубликат первого слова. Это ключ к плавному зацикливанию анимации. Когда анимация дойдёт до последнего слова (которое выглядит как первое), она мгновенно вернётся к началу, и переход будет незаметен.
Контейнер для слов:
.words {
overflow: hidden;
height: 60px;
}overflow: hidden и height — это основа эффекта. Мы создаем «окошко», через которое видно только одно слово.Стили для слов:
.word {
display: block;
height: 60px;
line-height: 60px;
animation: animate 6s infinite;
}■
height и line-height по 60px — каждое слово занимает ровно высоту контейнера.■
animation: animate 6s infinite — запускаем бесконечную анимацию длительностью 6 секунд.Keyframes:
@keyframes animate {
0%, 25% {
transform: translateY(0);
}
33%, 58% {
transform: translateY(-100%);
}
66%, 91% {
transform: translateY(-200%);
}
100% {
transform: translateY(-300%);
}
}■ 0%-25% — показываем первое слово (HTML).
■ 33%-58% — сдвигаем на -100% (CSS).
■ 66%-91% — сдвигаем на -200% (JavaScript).
■ 100% — сдвигаем на -300% (HTML).
Когда анимация доходит до конца (100%), она мгновенно возвращается к 0%.
Поскольку четвёртое слово идентично первому, переход незаметен!
Классный и довольно простой способ оживить страницу)
Потестить можно здесь.
1👍27❤10🔥9
Наглядная демонстрация значений width
Давайте разберём, как работают и в чём отличие четырёх значений
Поведение по умолчанию. Блок всегда занимает всю доступную ширину родителя.
Блок расширяется до полной длины всего контента в одну строку, игнорируя границы родителя. Может вызвать горизонтальный скроллинг.
Блок сжимается до ширины самого длинного неразрывного элемента (обычно самого длинного слова). Весь остальной текст будет перенесен.
Блок ведет себя как
Короче,
Демка кода здесь.
Давайте разберём, как работают и в чём отличие четырёх значений
width — auto, fit-content, max-content и min-content.width: auto
Поведение по умолчанию. Блок всегда занимает всю доступную ширину родителя.
width: max-content
Блок расширяется до полной длины всего контента в одну строку, игнорируя границы родителя. Может вызвать горизонтальный скроллинг.
width: min-content
Блок сжимается до ширины самого длинного неразрывного элемента (обычно самого длинного слова). Весь остальной текст будет перенесен.
width: fit-content
Блок ведет себя как
max-content, но не может превысить ширину родителя. Если контент слишком длинный, он переносится, а блок сжимается до ширины родителя.Короче,
max-content — элемент, который никогда не переносится, min-content — ширина самого длинного слова, а fit-content — умный блок, который занимает столько места, сколько нужно, но не выходит за рамки родителя)Демка кода здесь.
1👍36❤11🔥9
Лоботомированная сова — * + *
Давайте сегодня разберем CSS-паттерн, который автоматически делает отступы между элементами.
Автор этого приёма — Heydon Pickering. Он придумал этот селектор
HTML:
CSS:
Этот селектор добавляет отступ сверху для любого элемента, у которого есть соседний элемент перед ним. Первый элемент остаётся без отступа, а все последующие получают
Также есть еще более точный вариант:
Выбирает только прямые дочерние элементы, которые являются соседями (кроме первого) внутри
Пример кода здесь.
Давайте сегодня разберем CSS-паттерн, который автоматически делает отступы между элементами.
Автор этого приёма — Heydon Pickering. Он придумал этот селектор
* + * { margin-top: 1em; } как простое, универсальное решение для отступов между элементами и назвал его "Lobotomized Owl".HTML:
<div class="content">
<h2>Lorem Ipsum</h2>
<p>Lorem ipsum dolor..</p>
<p>Ut enim ad minim veniam..</p>
<img src="image.jpg">
<p>Duis aute irure dolor..</p>
</div>
CSS:
.content * + * {
margin-top: 24px;
}Этот селектор добавляет отступ сверху для любого элемента, у которого есть соседний элемент перед ним. Первый элемент остаётся без отступа, а все последующие получают
margin-top.Также есть еще более точный вариант:
.content > * + * {
margin-top: 24px;
}Выбирает только прямые дочерние элементы, которые являются соседями (кроме первого) внутри
.content. Отступы будут только между основными блоками контента и не будут нарушать макеты вложенных элементов.Пример кода здесь.
1🔥27👍15❤2
Стилизация скроллбара в браузере
Бывает такое, что дизайнеры просят покрасить скролл браузера в свои цвета, я не особый любитель таких затей, но давайте разберем, как в целом это можно делать.
Единого стандарта для стилизации скроллбаров нет. Webkit-браузеры (Chrome, Safari, Edge) используют свои псевдоэлементы, а Firefox использует свойства
Для Firefox:
Для Webkit-браузеров:
Ну и собственно, объединяем оба кода, чтобы работало во всех браузерах)
Пример кода здесь.
Бывает такое, что дизайнеры просят покрасить скролл браузера в свои цвета, я не особый любитель таких затей, но давайте разберем, как в целом это можно делать.
Единого стандарта для стилизации скроллбаров нет. Webkit-браузеры (Chrome, Safari, Edge) используют свои псевдоэлементы, а Firefox использует свойства
scrollbar-width и scrollbar-color. В итоге для кроссбраузерной совместимости нужно использовать оба подхода.Для Firefox:
* {
scrollbar-width: auto; /* auto, thin, none */
scrollbar-color: #5AC2FF #266D98; /* цвет ползунка и трека */
}Для Webkit-браузеров:
::-webkit-scrollbar {
width: 12px; /* ширина вертикального скроллбара */
}
::-webkit-scrollbar-track {
background: #266D98; /* фон трека */
}
::-webkit-scrollbar-thumb {
background: #5AC2FF; /* цвет ползунка */
}
::-webkit-scrollbar-thumb:hover {
background: #98D8EC; /* цвет при наведении */
}Ну и собственно, объединяем оба кода, чтобы работало во всех браузерах)
Пример кода здесь.
1👍18🔥3❤2
Распределение элементов с 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