Анимация фона текста (SVG и CSS3)

В этой статье я поделюсь с вами двумя эффектами, которые я получил, когда я играл с SVG и CSS3 анимациями. Мы создадим 2 анимированных фона для текста , первый пример, текст с радужным цветом фона анимированные при наведении. И второй пример, в котором текст будет иметь постоянно анимированный фон  (диско-эффект).

Идея проста, мы создадим Div с анимированным фоном, используя CSS3 сделаем фоновый рисунок и применим CSS3 анимацию. Затем, внутри этой Div мы размещаем объект SVG, содержащий текст-маску.

В конечном итоге, анимация фона будет видна в только пределах текста.

1 пример (эффект радуги при наведении ):

Html разметка:

<div id="bkDiv">
  <svg width="100%" height="100%">
    <defs>
      <mask id="theMask">
        <rect width="100%" height="100%" fill="#fff" />
        <text x="15" y="65" id="theText" fill="#000">Welcome to Codicode</text>
      </mask>
    </defs>
    <rect width="100%" height="100%" mask="url(#theMask)" fill="#fff" />
  </svg>
</div>

Объект SVG состоит из прямоугольника, к которому мы будем применять маску (theMask), содержащий два объекта: прямоугольник и наш отображаемый текст. Чтобы изменить цвет фона достаточно изменить основной цвет заливки.

Обратите внимание, что объект SVG будет заполнять весь размер DIV,  потому, что мы должны скрыть всю фоновую графику и анимацию CSS3.

CSS верстка:

/* by Chtiwi Malek */
/* http://www.codicode.com */
body
{
  background-color:#fff;
}

#bkDiv
{
  cursor:pointer;
  margin:0px auto 0px auto;
  background: linear-gradient(0deg, transparent 0%, #31009c 10%, #000084 25%,#009cff 37%,#00bd00 50%,#fff700 62%,#ff6331 75%,#de0000 90%,transparent 100%);
  background-color: #333;
  background-size: 10px 125px;
  background-repeat:repeat;
  height:100px;
  width:650px;
  
  background-position:center -65px;
  transition: background-position 1s;
}
#bkDiv:hover
{
  background-position:center 0px;
}
#theText
{
  font-family:Impact, Charcoal, sans-serif;
  font-size:65px;
  stroke:#000;
  stroke-width:3px;
  fill-opacity:0.5;
}

Если на DIV наведён указатель мыши, CSS3 фон сместится, и вернётся в первоначальную позицию после того, как указатель уберут. Продолжительность перехода здесь установлена в 1 секунду.
Также текст содержит 50% прозрачности и 3px подложку (100% непрозрачна), чтобы получить эффект контура.

Пример 2 (Disco-эффект):

Html разметка:

<div id="bkDiv">
  <svg width="100%" height="100%">
    <defs>
      <mask id="theMask">
        <rect width="100%" height="100%" fill="#fff" />
        <text x="20" y="120" id="theText" fill="#000">Night CLUB</text>
      </mask>
    </defs>
    <rect width="100%" height="100%" mask="url(#theMask)" fill="#fff" />
  </svg>
</div>

HTML разметка точно такая же, как и в первом примере.

CSS верстка:

/* by Chtiwi Malek */
/* http://www.codicode.com */
body
{
  background-color:#fff;
}
#bkDiv
{
  margin:-2px auto 0px auto;
  background: linear-gradient(-45deg, #036 30%,transparent 45%,transparent 55%,#036 70%), linear-gradient(45deg, #036 30%,transparent 45%,transparent 55%,#036 70%);
  background-color: #f00;
  background-size: 15px 15px;
  background-position:0px 0px;
  height:100%;
  width:580px;
  
  animation: cAnim 1s linear 0s infinite;
}

@keyframes cAnim
{
  100% {background-position:15px 0px;}
}

#theText
{
  font-family:Impact, Charcoal, sans-serif;
  font-size:120px;
  stroke:#000;
  stroke-width:5px;
  fill-opacity:0.1;
  stroke-opacity:1;
  animation: cAnim1 0.5s linear 0s infinite;
}
@keyframes cAnim1
{
  100% {fill-opacity:0.9;stroke-opacity:0.5;}
}

В этом примере одновременно две анимации , первая: красные движущиеся точки, применяется к фону DIV, и вторая: вспышки света, применяется к тексту SVG маски.

SVG (Scalable Vector Graphics) является открытым стандартом технологии HTML, разработанный World Wide Web Consortium (W3C) для создания и рендеринга веб-страниц и поддерживается всеми текущими версиями всех основных браузеров. И даже если это не так широко используется, как это должно быть, это набирает обороты с каждым днем.

Оригинал / Перевод

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.