HTML
<button>
<span>🎁</span>
Открыть
</button>
Как писать стили для скроллбара в CSS
Пишем стили для скроллбара (полоски прокрутки) на странице с помощью Webkit. Также покажу несколько более менее готовых вариантов в конце. Подробный гайд с фотографиями и ссылками на песочницу.
Приятные шрифт от Vercel - Geist Sans и Geist Mono
"Geist действительно олицетворяет дух программирования и дизайна в творческом сообществе Vercel" - заявляют в Vercel.
Шрифты в Next и Tailwind
Расскажу о любимом способе использовать шрифты на проектах с Next и Tailwind
Tailwind - лучший CSS инструмент?
Писать стили в 5 раз быстрее, не покидая файл с разметкой? Используй utility first классы Tailwind и экономь свое время.
Нужно создать кнопку с текстом по центру а также добавить иконку (слева или справа), которая не будет сдвигать текст из-за своего присутствия.
Мы используем следующую разметку...
<button>
<span>🎁</span>
Открыть
</button>
И хотим, чтобы результат был таким:
Если с текстом по центру все понятно, ведь это неотъемлемая часть кнопки и его можно отцентрировать через стиль самой кнопки...
<button class="text-center">
<span>🎁</span>
Открыть
</button>
..., то с 🎁 сложнее. Помимо того, что 🎁 должен существовать внутри кнопки, он также не должен влиять на позиционирование ее текста. Для решения этой задачи существует следующий традиционный подход:
relative
контейнером.absolute
позицию.top
и left
, а также translate-x
и translate-y
.Выглядеть это будет следующим образом:
<button class="relative text-center">
<span class="absolute left-4 top-1/2 -translate-y-1/2">🎁</span>
Открыть
</button>
Так мы получаем желаемый результат:
Но можно проще.
В первую очередь, необходимо сделать и текст кнопки и 🎁 самостоятельными элементами:
<button>
<span>🎁</span>
<span>Открыть</span>
</button>
Далее необходимо дать кнопке класс grid
а также для свойства grid-template-areas
необходимо указать 'stack'
. Так как grid-template-areas
является нестандартным для Tailwind классом, его можно добавить как произвольное свойство:
<button class="grid [grid-template-areas:'stack']">
<span>🎁</span>
<span>Открыть</span>
</button>
И так как элементы внутри кнопки теперь самостоятельные, мы можем дать им класс [grid-area:stack]
, который поместит их в ту самую единственную клетку:
<button class="grid [grid-template-areas:'stack']">
<span class="[grid-area:stack]">🎁</span>
<span class="[grid-area:stack]">Открыть</span>
</button>
Теперь разукрасим кнопку...
<button class="grid h-10 w-full rounded-md bg-gradient-to-r from-amber-400 to-orange-500 px-4 font-medium text-white shadow-xl shadow-orange-500/50 [grid-template-areas:'stack']">
<span class="[grid-area:stack]">🎁</span>
<span class="[grid-area:stack]">Открыть</span>
</button>
...и посмотрим что получилось:
Дело за малым. Каждому из элементов нужно объяснить, где они должны находиться. Так как это grid
элементы, то нужно использовать соответствующие классы self-{...}
, justify-self-{...}
и даже place-self-{...}
:
<button class="grid h-10 w-full rounded-md bg-gradient-to-r from-amber-400 to-orange-500 px-4 font-medium text-white shadow-xl shadow-orange-500/50 [grid-template-areas:'stack']">
<span class="self-center justify-self-start [grid-area:stack]">🎁</span>
<span class="self-center [grid-area:stack]">Открыть</span>
</button>
Готово!
Время пройти тест
Проверьте свои знания по текущей теме
translate
к элементу, когда нам нужно отцентрировать элемент (а это почти всегда). Если мы захотим использовать translate
для анимации в будущем, то оно будет свободно и анимания не сломает позицию элемента.Grid Template Areas Stack это еще один способ убрать элемент из "общей раскладки" и указать ему индивидуальную позицию. Этот занятный способ можно использовать как альтернативу Position Absolute.
Посмотрите на сегодняшнюю подопытную кнопку своими глазами на Tailwind Play, добавьте в нее новый элемент, опробуйте Grid Template Areas Stack, пока прочитанное в свежей памяти.