Как сделать кнопку с эффектом плавного изменения цвета текста при наведении на неё курсора?

Как можно реализовать эффект смены текста на градиент при наведении (hover) с использованием transition, кроме методов, основанных на псевдоэлементе &::before и данных атрибута? Приветствуется предоставление примера для иллюстрации.
  • 10 января 2024 г. 19:18
Ответы на вопрос 2
Вы можете создать кнопку с переходом текста в градиентный цвет при наведении, используя CSS и свойство `background-clip`. С помощью `background-clip: text;` возможно "обрезать" фоновое изображение или градиент по форме текста, но помните, что для этого придется сделать текст прозрачным, используя `color: transparent;`.

Вот пример реализации:

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gradient Hover Effect</title>
<style>
  .gradient-button {
    font-size: 1.5rem;
    padding: 10px 20px;
    border: none;
    cursor: pointer;
    background: white;
    outline: none;
    transition: background 0.5s ease;
    color: black; /* Начальный цвет текста */
    border: 2px solid black; /* Опционально, если нужна рамка */
    overflow: hidden;
    position: relative;
    background-clip: text;
    -webkit-background-clip: text; /* Для лучшей совместимости с WebKit-браузерами */
    -webkit-text-fill-color: transparent; /* Для Safari */
  }

  .gradient-button:hover {
    color: transparent;
    background: linear-gradient(45deg, red, blue); /* Градиент при наведении */
  }
</style>
</head>
<body>

<button class="gradient-button">Hover Me!</button>

</body>
</html>
```

В этом примере кнопка сначала имеет обычный черный цвет текста (`color: black;`), но при наведении курсора (`:hover` псевдо-класс) текст становится прозрачным (`color: transparent;`), а на его месте появляется градиент благодаря `background`. Плавный переход осуществляется с помощью свойства `transition`.

Используя `-webkit-background-clip: text;` и `-webkit-text-fill-color: transparent;`, мы обеспечиваем корректное отображение в браузерах на базе WebKit, таких как Safari. Применением `background-clip: text;` мы определяем, что фон будет отображаться только по форме текста.

Также заметьте, что свойство `background-clip: text;` не совсем стандартизировано и может не работать во всех браузерах. Кроме того, важно помнить, что на момент вашего вопроса такой подход может быть не полностью совместим со всеми браузерами и, возможно, потребуется проверить совместимость или предоставить запасные варианты (fallbacks).
Через кастомные и @property 
https://css-tricks.com/property/
Похожие вопросы