Вы можете использовать Svelte и TailwindCSS для создания стильных и динамичных элементов построения веб-сайтов, таких как аккордеон.
Рано или поздно мне придется найти время, чтобы сообщить о том, чему я научился за эти месяцы. Например, что очень сложно предсказать, сколько времени потребуется для выполнения задачи.
Моя последняя идея (создание автоматической системы для документирования компонентов Svelte) оказалась длиннее, чем я ожидал. Техника не очень сложная, но слишком много деталей, которые я не предусмотрел.
Кроме того, мое желание понять, как все работает, заставляет меня тратить много времени на воссоздание некоторых основных элементов. Последним в хронологическом порядке является аккордеон: элемент, который можно открывать и закрывать одним щелчком мыши.
Что я хочу построить
Что-то простое, не зависящее от других библиотек. Что-то довольно легкое и настраиваемое. Svelte позволяет очень легко создавать. А TailwindCSS позволяет управлять стилями CSS.
Начнем со структуры
Базовая структура очень проста, всего 2 части:
- один для использования в качестве заголовка компонента для вставки заголовка раздела;
- другой — простой слот: вы можете скрывать и показывать содержимое.
Конечно, без добавления каких-либо стилей или действий CSS результат весьма разочаровывает:
Добавим несколько стилей
Я добавляю несколько стилей, чтобы выделить заголовок элемента и его поля. Для этого компонента я хочу использовать монохромный стиль. Меня привлекает такое использование цветов, но это уже другая история.
Итак, я начинаю с раскрашивания заголовка:
Я не могу добавить стиль css в slot. Но я могу поместить его в div и стилизовать:
Открыть и закрыть
Svelte позволяет очень просто скрыть и отобразить элемент страницы. Используя простое условие if...then...else
, привязанное к prop, я могу проверить его статус:
Добавим вращающуюся иконку
Мне нужен способ открыть элемент одним щелчком мыши. Для этого мне нужна кнопка и анимация, чтобы выделить клик. Я нашел видео от Johnny Magrippis (How to: Svelte Hamburger Menu Animation 🍔):
Рекомендую посмотреть видео. Для начала мне нужен еще один компонент, Chevron.svelte, в который нужно вставить изображение svg
:
Я хотел бы добавить несколько стилей, чтобы интегрировать его в заголовок основного компонента:
Назначение этого значка — быть кнопкой: при нажатии он открывает или закрывает основную часть аккордеона. Поэтому я помещаю его в элемент button
и добавляю к нему два props
:
Я использую реквизит open
в качестве класса CSS. Таким образом, когда элемент открыт, я могу изменить значок. Я хочу повернуть его на 180 градусов. Поэтому я добавляю несколько стилей CSS, полезных для этой цели:
Добавим действие к компоненту
Теперь, когда значок выполняет свою работу, я могу вернуться к основному компоненту и вставить действие:
Щелкнув по значку, я наконец-то могу открыть и закрыть аккордеон:
Добавим переход
Компонент работает, но не очень приятно видеть, как часть страницы внезапно появляется и исчезает. Чтобы исправить это, я могу использовать одну из функций Svelte, переходы:
И вот окончательный результат:
Как всегда, код доступен и загружается с GitHub:
Спасибо за прочтение! Оставайтесь с нами, чтобы узнать больше.
Не пропустите мою следующую статью — подпишитесь на мой Список адресов электронной почты среднего уровня
Первоначально опубликовано на https://blog.stranianelli.com 28 ноября 2021 г.