В этой статье я поделюсь с вами двумя эффектами, которые я получил, когда я играл с 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) для создания и рендеринга веб-страниц и поддерживается всеми текущими версиями всех основных браузеров. И даже если это не так широко используется, как это должно быть, это набирает обороты с каждым днем.