Omawiamy kolejne rozwiązanie znalezione w internecie. Tym razem – efekt wypełnienia tekstu innym kolorem po najechaniu myszą. Nie jest to najlepsze rozwiązanie do efektu text-fill, ale pokazuje kilka ciekawych konceptów, więc je sobie omówimy.

Autor dodaje nagłówek z pewnym tekstem i duplikuje ten tekst do data-setu:

<h1 class="text" data-text="text">Text</h1>

Następnie dodaje klasę CSS:

.text {
  position: relative;
  font-size: 20px;
  font-weight: bold;
  color: #111;
  margin: 0;
  padding: 0;
  line-height: 1;
}

Nie widzimy tutaj nic wykraczającego poza podstawy, aby to komentować. Następnie klasa z pseudo-elementem before:

.text::before {
  content: attr(data-text);
  position: absolute;
  z-index: 1;
  color: #0ea5e9;
  pointer-events: none;

  width: 0;
  overflow: hidden;
}

Tutaj jako 'content’ użyto funkcji 'attr’, która pobiera tekst z data-setu. O takich rozwiązaniach mówi się „hacky”. Ciekawe, warto znać. Właściwość 'width” ustawiona na 0 powinna przypominać nam wszystkie animowane podkreślenia jadące z jednej strony (lewej lub prawej) i rozciągające się na całe 100% podczas hovera.

Tutaj natomiast mamy de facto drugi tekst innego koloru, zatem musimy go ukryć – overflow: hidden.

Teraz tylko odpowiedni selektor (.text:hover::before) i rozciągnięcie naszego pseudo-elementu na całe 100% długości plus transition na animowanym elemencie:

.text::before {
  content: attr(data-text);
  position: absolute;
  z-index: 1;
  color: #0ea5e9;
  pointer-events: none;
  width: 0;
  overflow: hidden;

  transition: 0.4s ease-out width;
}

.text:hover::before {
  width: 100%;
}

Oczywiście przy wielowyrazowych tekstach to nie będzie działać idealnie. Jak zrobić text-fill najlepiej według mnie napiszę niedługo. Tym niemniej jest tutaj kilka ciekawych rozwiązań, które warto sobie w głowie odnotować.

Ponadto dodam, że animacja pokazująca działanie tej animacji na blogu autora jest ciekawsza niż sam omawiany przypadek.

Odsyłam na bloga autora: https://tahazsh.com/blog/text-fill-animation.