Я пытаюсь создать адаптивную округлую 3D-кнопку с видимыми правой и нижней сторонами, используя Tailwind CSS, но она выглядит неправильно. Правая и нижняя стороны не совпадают с белой частью кнопки. Я поделился кодом ниже. Как я могу это исправить? Или есть ли лучший способ достичь этого эффекта? Заранее спасибо!
Вот мой код (также доступен на Tailwind playground):
<script src="https://cdn.tailwindcss.com"></script>
<button class="relative inline-block rounded-lg text-black align-middle no-underline transition-all duration-[0.5s] bg-white px-10 py-5 before:rounded-b-lg before:bottom-[-15px] before:h-[15px] before:w-full before:skew-x-[45deg] before:bg-[#036e15] before:left-2 after:rounded-r-lg after:right-[-15px] after:h-full after:w-[15px] after:skew-y-[45deg] after:bg-[#01370a] after:-bottom-2 active:ml-2.5 active:mt-2.5 active:before:bottom-[-5px] active:before:h-[5px] active:before:left-[3px] active:after:right-[-5px] active:after:w-[5px] active:after:bottom-[-3px] before:absolute before:content-[''] before:transition-all before:duration-[0.5s] after:absolute after:content-[''] after:transition-all after:duration-[0.5s]">
Нажми на меня!
</button>
Вот как кнопка выглядит в спокойном состоянии:
А вот так она выглядит при нажатии:
Ответ
Чтобы создать округлую 3D-кнопку с видимыми правой и нижней сторонами, используя Tailwind CSS, можно внести несколько изменений в вашу исходную разметку и стили. Я объясню текущие проблемы и предложу исправленную версию кода.
Проблемы в вашем коде
- Смещение элементов
before
иafter
: Положение элементов для создания тени не совсем правильно настроено, что приводит к несовпадению теней с основной кнопкой. - Логика переходов: Переходы для состояний кнопки могут не давать ожидаемого эффекта, если они настроены неправильно.
Исправленный код
Вот обновленный код для вашей кнопки:
<script src="https://cdn.tailwindcss.com"></script>
<button class="relative inline-block rounded-lg text-black bg-white px-10 py-5 shadow-md transition-all duration-300 active:translate-y-1 active:shadow-lg">
<span class="relative z-10">Press me!</span>
<span class="absolute top-0 left-0 right-0 bottom-0 rounded-lg bg-[#036e15] transform skew-y-3 -translate-y-1 -translate-x-1"></span>
<span class="absolute top-0 right-0 bottom-0 rounded-lg bg-[#01370a] transform skew-x-3 -translate-y-1 translate-x-1"></span>
</button>
Объяснение изменений
- Создание фона: Я добавил два дополнительных элемента
span
, которые будут создавать эффект тени. Один элемент (bg-[#036e15]
) искажён по оси Y для создания нижней теневой стороны, а другой (bg-[#01370a]
) искажён по оси X для правой стороны. - Классы трансформации: Классы
transform
,skew-y-3
, иskew-x-3
используются для создания наклона, что усиливает эффект глубины. - Изменение стилей при нажатии: Используется
active:translate-y-1
для того, чтобы кнопка немного перемещалась вниз при нажатии, создавая эффект нажатия. - Переходы: Настроен
duration-300
для плавных анимаций.
Примечания
- Вы можете настроить цвета и размеры в соответствии с вашими требованиями.
- Убедитесь, что Tailwind CSS правильно подключен, чтобы стили применялись корректно.
Эти изменения помогут вам добиться желаемого эффекта 3D-кнопки с округлыми краями и видимыми тенями. Если у вас будут дополнительные вопросы или пожелания, не стесняйтесь их задавать!