# data[].attributes.attachment_link.title
Awesome Screenshot -- Screen recorder and Screen capture

# data[].attributes.attachment_link.description
Awesome Screenshot is the highest-rated screen capture & screen recorder tool with over 2 million users! Screen sharing, fast and easy! Share screen with video and screenshot.

# data[].attributes.attachment_link.title
Favicon.io - The Ultimate Favicon Generator (Free)

# data[].attributes.attachment_link.description
The only favicon generator you need for your next project. Quickly generate your favicon from text, image, or choose from hundreds of emojis.

# data[].attributes.attachment_link.description
Download the best Free Themes & Templates developed by Creative Tim.

# data[].attributes.attachment_link.description
Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice.

# data[].attributes.attachment_link.description
Test your HTML code with this simple tool by tiiny.host.

# data[].attributes.attachment_link.description
Acá vas a encontrar conceptos de tecnología, programación y otras cosas, en español y ¡Explicados con gatitos!

# data[].attributes.attachment_link.description
Archivo de fuentes de descarga gratuita. Búsqueda por orden alfabético, por estilo, por autor o por popularidad.

# data[].attributes.attachment_link.title
Tailwind CSS - Rapidly build modern websites without ever leaving your HTML.

# data[].attributes.attachment_link.description
Tailwind CSS is a utility-first CSS framework for rapidly building modern websites without ever leaving your HTML.

# data[].attributes.attachment_link.authors[].name
Mark Otto, Jacob Thornton, and Bootstrap contributors

# data[].attributes.attachment_link.description
Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes.

# data[].attributes.attachment_link.description
Your job is to stop the incoming enemies from getting past your defenses. Unlike other tower defense games, you must position your towers using CSS!

# data[].attributes.attachment_link.readable_text
Grid is the best thing to ever happen to CSS. It makes building modern layouts a snap.

But learning Grid is hard work

Despite all the time you've spent studying Grid, you can never remember how to actually use it.

What does justify-content do again?!

 .life_is_pain { display: grid; justify-content: ???; align-items: ???; grid-auto-flow: ???; grid-gap: ???; }

You constantly have to interrupt your work to go look things up. You're sick of being dependent on a cheat sheet.

What would change for you if you were a Grid expert?

You could build anything

From scratch. Effortlessly. You'd just imagine the grid layout and bust it out, all on your own.

 .life_is_dope { display: grid; grid-template-columns: 200px 2fr; grid-template-rows: 100px repeat(2, 1fr); grid-gap: 5%; grid-auto-rows: minmax(auto, 300px); }

CSS would actually be fun

You'd live in your code editor, not needing cheat sheets or anybody else's help. Just you-blissfully enjoying the sweet state of flow as you create incredible things.

Grid Critters gently guides you to master CSS Grid in the most effective, thorough, playful and fun way possible.

Learn by doing

In this course you code actual CSS. You'll gain a deep understanding of how Grid layout works. You'll gradually become a CSS Grid expert - one concept at a time.

Make it stick

Grid can only become second nature through deliberate practice. We'll cement Grid into your brain through spaced repetition while you enjoy a course that feels like a video game.

To really understand CSS Grid, you need to go deep and you need to practice. This course is gamification done right. It works. It uses proven techniques like spaced repetition to drive well explained concepts home. It's an incredibly enjoyable way to learn the future of frontend layout. I loved it.

Director of Engineering - Google Chrome

Grid Critters is sprinkled with humor, teaches and guides you with hints, and has a ton of lessons that gradually build up a solid understanding on how to use CSS grids. I've found it to be especially helpful!

Data Manager - Churchill Downs

Play ten jam-packed chapters over ten fun days, getting a ton of actual Grid coding practice. By game end you'll know CSS Grid inside and out!

Chapter One: Grideros

Learn to layout perfect grid-template-rows andgrid-template-columns

Build flexible, responsive designs with the brand new fr unit

Lay down the grid faster using the repeat shorthand

Chapter Two: Mind the Gap

Get just the right amount of spacing with grid-row-gaps andgrid-column-gaps

Set both quickly using the grid-gap shorthand

Visualize the difference between % andfr tracks

Chapter Three: Life on the Line

Size and position anything withgrid-row-start|end andgrid-column-start|end

Balance designs by spanning items across multiple tracks

Learn how and why to name your grid lines

Make short work of positioning with the grid-row andgrid-column shorthands

Chapter Four: Grid Devils

Use grid-template-areas for your content to fit perfectly into

Size and position items more efficiently using grid-areas

Learn the purpose of auto layout

Create whitespace in your layout with empty grid areas

Chapter Five: Ancient Runes

Create highly flexible tracks using minmax

Adapt the grid to its content with min-content andmax-content

Make the best use of available space with auto-fill andauto-fit

Chapter Six: Fill the Pockets

Understand exactly how items flow into a grid

Setup your grids faster with the grid-template shorthand

Control the direction plusdense orsparse flow withgrid-auto-flow

Chapter Seven: Out the Airlock

Understand why your grid automatically createsimplicit rows and columns

Control the width of implicit columns with grid-auto-columns

Control the height of implicit rows with grid-auto-rows

Chapter Eight: Sentient

Perfectly center or position a grid's items with justify-items andalign-items

Override these for any grid item using justify-self andalign-self

Grasp when to use start,end,center, orstretch

Chapter Nine: Deception

Control the positioning of the grid itself using justify-content andalign-content

Space out tracks using space-around,space-between, andspace-evenly

Chapter Ten: Central Command

Review what you've learned

Enjoy the epic story ending

Combine everything into the ultimate grid shorthand

Fantastic course. It's so much fun and you actually learn CSS Grid. It's worth every single penny!

Senior Architect - FourTheorem

Become a CSS Grid expert

👾 be guided from zero to hero on CSS Grid

🏗️ learn by doing- practicing literally hundreds of CSS layouts

🔑 internalize all the Grid attributes and shorthands

🧠 make it click and make it stick

🛸 enjoy the interactive story experience

🐙 become a master of CSS layout

Lifetime access. 100% satisfaction guarantee. You'll be shipping perfect CSS layouts to production in no time!

$149

# data[].attributes.attachment_link.description
Grid is the best thing to ever happen to CSS. It makes building modern layouts a snap. Despite all the time you've spent studying Grid, you can never remember how to actually use it. What does justify-content do again?!

# data[].attributes.attachment_link.readable_text
In an ancient Elvish prophecy, it was said that one day a man would be born with an incredible power that predicts the future - "Marketi Predictori." And another will come to take this power. But the years went by and nothing happened. Until one day, a little elf was born. He was named Luke.

From an early age, he surprised his parents and his sister Rey by guessing the price of apples at the farmer's market before they even reached it. Every year his power rose and his predictions became more and more accurate. But there was one thing Luke could not predict. The coming of the demon Valcorian. It was the one from the prophecy that was to come and take Luke's power. One day Valcorian and his army attacked the town where Luke had lived and kidnapped him to make a ritual of stealing his power.

Go on a dangerous quest with Luke's sister Rey and find her brother. Defeat Valcorian and all his demons using a secret weapon - CSS Grid.

# data[].attributes.attachment_link.title
Play Grid Attack - CSS Game to learn CSS Grid

# data[].attributes.attachment_link.description
In an ancient Elvish prophecy, it was said that one day a man would be born with an incredible power that predicts the future - "Marketi Predictori." And another will come to take this power. But the years went by and nothing happened. Until one day, a little elf was born.

# data[].attributes.attachment_link.title
CodeCombat: Learn to Code by Playing a Game

# data[].attributes.attachment_link.description
Learn typed code through a programming game. Learn Python, JavaScript, and HTML as you solve puzzles and learn to make your own coding games and websites.

# data[].attributes.attachment_link.description
The MDN Web Docs site provides information about Open Web technologies including HTML, CSS, and APIs for both Web sites and progressive web apps.

# data[].attributes.attachment_link.description
A fun game to help you learn and practice CSS selectors.

# data[].attributes.attachment_link.description
CSS Reference is a free visual guide to CSS. It features the most popular properties, and explains them with illustrated and animated examples.

# data[].attributes.attachment_link.description
Create and share color palettes. Color inspiration for creatives around the world.

# data[].attributes.attachment_link.title
Coolors - The super fast color palettes generator!

# data[].attributes.attachment_link.description
Generate or browse beautiful color combinations for your designs.

# data[].attributes.attachment_link.readable_text
The HTML Table Body Element (<tbody>) defines one or more <tr> element data-rows to be the body of its parent <table> element (as long as no <tr> elements are immediate children of that table element.) In conjunction with a preceding <thead> and/or <tfoot> element, <tbody> provides additional semantic information for devices such as printers and displays. Of the parent table's child elements, <tbody> represents the content which, when longer than a page, will most likely differ for each page printed; while the content of <thead> and <tfoot> will be the same or similar for each page printed. For displays, <tbody> will enable separate scrolling of the <thead>, <tfoot>, and <caption> elements of the same parent <table> element. Note that unlike the <thead>, <tfoot>, and <caption> elements however, multiple <tbody> elements are permitted (if consecutive), allowing the data-rows in long tables to be divided into different sections, each separately formatted as needed.
https://developer.mozilla.org/en/docs/Web/HTML/Element/tbody
The HTML <rtc> Element embraces semantic annotations of characters presented in a ruby of <rb> elements used inside of <ruby> element. <rb> elements can have both pronunciation (<rt>) and semantic (<rtc>) annotations.
https://developer.mozilla.org/en/docs/Web/HTML/Element/rtc

# data[].attributes.attachment_link.description
The HTML <body> element (or Sectioning root element) represents the root of all Sectioning elements in document. All other Sectioning elements must be descendants of this element.

# data[].attributes.attachment_link.description
A free guide to all HTML elements and attributes.

# data[].attributes.attachment_link.readable_text
Siempre me ha parecido que, una de las cosas más agradecidas de los documentos HTML de la web, aparte de poder insertar imágenes o vídeos, está en la posibilidad de crear hipervínculos o enlaces entre ellos.

De hecho, creo que esta es una de las características que más puede emocionar y motivar a los novatos que jamás han tocado código ni con un palo y que deciden adentrarse en el mundo del desarrollo web.

De repente, escribes cuatro líneas de HTML y, ¡zas!, eres capaz de añadir interactividad a un simple texto. Dado que estás viendo este post, deduzco que ahora mismo estás dando tus primeros pasos con HTML, así que seguro que entiendes lo que te quiero decir.

¿Cómo se ponen los enlaces?

Los enlaces en HTML se crean principalmente con la etiqueta <a>, que tiene su correspondiente etiqueta de cierre </a>. Pero, pero... ni "enlace", ni "link", ni "hipervínculo comienzan por "a". ¿De dónde viene esto?

Pues viene del inglés "anchor", que literalmente significa "ancla". Así que, cada vez que pongas un enlace en tu página web, imagínate que estás lanzando un ancla con una cuerda hacia otra página web, y así quedan enganchadas ambas. Vinculadas.

El atributo href de los enlaces

El atributo más importante más importante en los enlaces es href, ¿qué significa? Pues es la abreviatura de Hipertext Reference, o lo que es lo mismo Referencia de Hipertexto. En este atributo es donde indicamos el URL a la que apuntaremos con el enlace. O sea, la página a donde irá el navegador al hacer clic en el enlace.

Así que, si quieres enlazar al blog de recursos de campusMVP, desde tu página pondrías:

 <a href="https://www.campusmvp.es/recursos/" title="Al blog de recursos de campusMVP">Ir al blog de campusMVP</a>

Y se vería así:
Ir al blog de campusMVP
Fíjate en el atributo title, sirve para mostrar en el navegador un tooltip (deja quieto el cursor sobre el enlace) que normalmente aporta información sobre la página de destino. Utilízalo. Mejorarás la accesibilidad y experiencia de usuario en tus páginas, aparte de resultar muy útil para optimizar tu página para los buscadores, ya que les ayudas a entender mejor tu contenido.

Por cierto. Como puedes ver, el texto del enlace es lo que va entre <a> y </a>. Si en vez de texto quieres que el enlace sea una imagen, tendrías que ponerle ahí la correspondiente etiqueta <img>:

Y, entonces, se vería así:

Enlaces con rutas absolutas

Pero si quisieras enlazar una página concreta tendrías que poner una dirección más detallada:

<a href="https://www.campusmvp.es/directorio1/directorio2/archivo.htm">Ir al post de los enlaces</a>

Nota: en la jerga de Internet a las direcciones únicas de un recurso, como la que acabamos de colocar en nuestro enlace, se les denomina URL, del inglés Uniform Resource Locator o Localizador Uniforme de Recursos. Un URL es una dirección única que identifica un recurso en Internet, no solo en la Web. Lo más habitual es que escuches hablar de URLs y no tanto de direcciones, pero es lo mismo.

Fíjate en el URL. Ahora, aparte del dominio, en la ruta aparecen varios directorios separados por una barra inclinada hacia delante "/", también llamada slash , más el nombre del archivo completo con su extensión. Este tipo de URL que incluye el dominio (más la estructura de carpetas y/o archivo, si procede) es una "ruta absoluta".

Enlaces con rutas relativas

Pero si yo quiero enlazar este archivo desde otra página dentro del dominio de campusMVP, me bastaría con poner esto (y funcionaría igual):

<a href="/directorio1/directorio2/pagina.html">Ir a mi archivo</a>

Si estoy en otro documento HTML del mismo directorio también lo podría hacer así:

<a href="./pagina.html">Ir al post de los enlaces</a>

O así:

<a href="../directorio2/pagina.html">Ir a mi archivo</a>

Los tres casos son ejemplos de rutas relativas, esto es, relativas a la página en la que estoy ahora mismo, y tienen la ventaja de que son independientes del dominio. Si el día de mañana le cambias el dominio a tu página web, seguirán funcionando igual de bien.

1. En el primer caso, la dirección empieza por un slash "/". Esto significa que empezará a buscar la ruta a partir de la raíz del dominio.

2. En el segundo caso empieza por "./". Esto significa que empezará a buscar la ruta a partir del nivel de la carpeta actual.

3. Y en el tercero, empieza por "../". Esto significa que empezará a buscar la ruta a partir del nivel inmediatamente superior al de la carpeta actual. Podrías anidar varios "../" para subir varios niveles, pero no te recomiendo usar más de dos o tres.

El atributo name y los enlaces dentro de la misma página

El atributo name sirve para crear enlaces vacíos que indicarán puntos concretos de la página. Estos se podrán visitar al hacer clic en otros enlaces dentro de la misma. Por ejemplo, el típico enlace de "Volver al principio" que se pone al final de una página y que, al hacer clic, el navegador hace scroll hacia el principio. Otro uso muy habitual es en índices o tablas de contenidos en páginas muy largas.

Por ejemplo. Al principio de tu página pones esto:

Y al final un enlace que apunte a ahí. Se hace con el símbolo "almohadilla" seguido del valor de name

<a href="#principio">Ir al principio de la página</a>

También lo podríamos hacer usando el id de cualquier elemento. ¿No te lo crees? Haz clic en este enlace.

Te ha llevado al primer párrafo del post, ¿verdad?. Eso es porque el enlace apunta al atributo id que le he puesto al primer párrafo del post a propósito para que pudieras ver este ejemplo.

De hecho, aunque esta técnica con name se usa mucho, en la recomendación de HTML5 se considera obsoleto usar el atributo name en los elementos <a> y se desaconseja su uso en favor de la técnica de usar el id:

Y el enlace para ir a allí quedaría exactamente igual:

<a href="#principio">Ir al principio de la página</a>

Otros atributos interesantes

Aparte de los dos atributos mencionados, hay más atributos que puedes usar en los enlaces:

De tipo de contenido: type

Estos son solo algunos ejemplos

text/html : documentos HTML

image/jpg: imágenes JPG

text/css: hojas de estilo CSS

application/rss+xml: archivos XML para feeds RSS

Indica relaciones entre documentos, rel indica la relación entre la página que enlaza y la enlazada y rev indica la relación inversa.

alternate: indica que es una versión alternativa al documento actual (en otro idioma, una versión para imprimir)

stylesheet: indica que el archivo enlazado es una hoja de estilos

start: informa que el documento enlazado es el primero de un conjunto o secuencia

next: el documento enlazado es la continuación del actual dentro de una secuencia lógica (un post de un blog o un libro)

prev: el documento enlazado es el anterior del actual dentro de una secuencia lógica (un post de un blog o un libro)

bookmark: indica que el enlace es un "marcador" o "favorito", esto significa que es importante.

contents: el elemento enlazado contiene una tabla de contenidos

nofollow: indica a los spiders de los buscadores, que no sigan ese link

noindex: indica a los spiders de los buscadores, que no muestren ese link en los resultados de búsqueda

external: indica que la página enlazada pertenece a un sitio web externo

¿A dónde apuntamos?: target

El atributo target se utiliza para especificar dónde vamos a abrir el URL enlazado. Parte del ámbito en el que estamos (una ventana, un marco) y, en función de este, se designa dónde abrimos el recurso. El valor de target puede ser el nombre de un <iframe> o de un <frame> (aunque está obsoleto en HTML5 y se desaconseja su uso) o alguno de los siguientes valores:

_self: carga el recurso en el mismo contexto en el que estamos, ya sea una ventana o un iframe.

_blank: el atributo más utilizado. Sirve para abrir el recurso en una pestaña nueva. Cuando los navegadores no disponían de pestañas, se abría en una ventana nueva, aunque los navegadores modernos se pueden configurar por parte del usuario para que se abra en una ventana nueva en lugar de en una pestaña.

_parent: se abre en la página "madre" desde la que se ha abierto la actual o que contiene a esta (normalmente es un frameset). Si no existe un elemento "padre", se comporta como _self.

_top: se abre en el contexto de navegación más alto, que suele ser un ancestro y que no tiene padre. Si no hay un elemento que sea padre del contexto actual, entonces funciona como _self.

Lenguaje de la página de destino: hreflang

Indica, con su correspondiente código ISO, el idioma de la página enlazada. Es especialmente útil para sitios web multiidioma usándola conjuntamente con rel="alternate" para que los buscadores ( o sea, Google) no se hagan un lío con las diferentes versiones e idiomas.

Estos son solo unos pocos atributos, pero hay más. Si te pica la curiosidad, puedes seguir indagando en la página del W3C o en la de recursos para desarrolladores de la Fundación Mozilla.

Y si estas aprendiendo HTML, o simplemente quieres asentar mejor tus conocimientos, échale un vistazo nuestro curso de HTML y CSS. Aprenderás de una forma mucho más estructurada y ordenada que si vas por libre, y en poco tiempo verás grandes progresos en tu dominio de la maquetación web.

Fecha de publicación:

Pablo Iglesias es diseñador en campusMVP. Cuenta la leyenda que, anidando listas HTML en busca de la página semánticamente perfecta, provocó un agujero espacio-temporal en IE tan grande, que en Redmond tuvieron que llamar al comando SG1 de Stargate para evitar una invasión alienígena. Puedes seguirlo en twitter ( @piglesias). Ver todos los posts de Pablo Iglesias

# data[].attributes.attachment_link.title
Todo sobre los enlaces en HTML - campusMVP.es

# data[].attributes.attachment_link.description
Siempre me ha parecido que, una de las cosas más agradecidas de los documentos HTML de la web, aparte de porder insertar imágenes o vídeos, está en la posibilidad de crear hipervínculos o enlaces entre ellos.

# data[].attributes.attachment_link.readable_text
Sentimos que hayas cancelado tu suscripción Premium

Aún puede disfrutar de las Colecciones de Flaticon con los siguientes límites:

Sólo puedes mantener 3 colecciones

Puedes añadir hasta 100 iconos por colección

No puedes añadir iconos premium a tu colección

Las ventajas de tus colecciones cambiaron

Sólo puedes mantener 3 colecciones

Puedes añadir hasta 100 iconos por colección

No puedes añadir iconos premium a tu colección

Aproveche al máximo sus iconos y colecciones

Obtén 20% de descuento en nuestro
Plan Premium Anual

Select 3 collections to continue:

Tienes 8 colecciones pero solo puedes desbloquear 3 de ellas

Descarga iconos y stickers gratis para tus proyectos. Recursos hechos por y para diseñadores. Formatos PNG, SVG, EPS, PSD y CSS.

Fuentes de iconos para cualquier proyecto, pequeño o grande

21,600 iconos SVG y fuentes web de iconos vectoriales para web, iOS y aplicaciones Android.

Ver más

Herramientas que ayudan a hacer tus trabajos más profesionales

Accesorios gratuitos que te permiten organizar, crear y ahorrar tiempo en tus diseños

Crea múltiples colecciones para tener tus iconos organizados y descárgalos en el formato que quieras. Ver más

Edita el color de tus iconos, cambia el tamaño y descárgalos en todos los formatos, SVG, PNG, EPS. Ver más

Utiliza los iconos de Google Docs y Slides de forma fácil, rápida y gratuita. Ver más

Crea múltiples colecciones para tener tus iconos organizados y descárgalos en el formato que quieras. Ver más

Edita el color de tus iconos, cambia el tamaño y descárgalos en todos los formatos, SVG, PNG, EPS. Ver más

Utiliza los iconos de Google Docs y Slides de forma fácil, rápida y gratuita. Ver más

Crea imágenes espectaculares para tus historias de instagram, los encabezados de facebook, tus presentaciones, tu blog o sitio web. Ver más

Novedades de Flaticon

No te pierdas las últimas novedades, funcionalidades y herramientas para disfrutar al máximo de la experiencia en Flaticon.

Mostrar todos

Inserta iconos en Figma rápidamente

Ya esta aquí la nueva versión del plugin para Figma con el que puedes añadir millones de iconos directamente a tus proyectos.

Descargar plugin

# data[].attributes.attachment_link.title
Iconos y stickers gratuitos - Millones de recursos para descargar

# data[].attributes.attachment_link.description
Descarga iconos y stickers gratis para tus proyectos. Recursos hechos por y para diseñadores. Formatos PNG, SVG, EPS, PSD y CSS

# data[].attributes.attachment_link.readable_text
Access 14,300+ Animated Icons

Lordicon is a powerful library of carefully crafted animated icons,
ready to use in digital products, presentations, or videos!

6 styles - 2,676 free icons - 11,631 premium icons

Explore Library

# data[].attributes.attachment_link.description
Powerful animated icon library with 14,300+ free and premium animated Lottie animations. Download icons as Lottie JSON, GIF, or static SVG files.

# data[].attributes.attachment_link.title
iconmonstr - Free simple icons for your next project

# data[].attributes.attachment_link.description
1400+ open source free SVG icons. No attribution required - Tabler Icons. Configurable stroke, color and size.

# data[].attributes.attachment_link.description
Free Vectors and Icons in SVG format. ✅ Download free mono or multi color vectors for commercial use. Search in 500.000+ Free SVG Vectors and Icons.

# data[].attributes.attachment_link.title
Free Lottie Animation Files, Tools & Plugins - LottieFiles

# data[].attributes.attachment_link.description
The world's largest online platform for the world's smallest animation format for designers, developers, and more. Access Lottie animation tools and plugins for Android, iOS, and Web.

# data[].attributes.attachment_link.readable_text
Hello! I'm Steve Schoger, a UI designer and illustrator from Kitchener, Ontario. I draw and maintain Hero Patterns. Hero Patterns will always be updating and will always be free. Follow me on Twitter and Dribbble to find out when new updates are available.

Also, check out Zondicons: A set of free premium SVG icons for you to use on your digital products.

# data[].attributes.attachment_link.description
A collection of repeatable SVG background patterns for you to use on your digital projects.

# data[].attributes.attachment_link.title
uiGradients - Beautiful colored gradients

# data[].attributes.attachment_link.description
uiGradients is a handpicked collection of beautiful color gradients for designers and developers.

# data[].attributes.attachment_link.description
Beautiful and simple UI for generating web gradients.

# data[].attributes.attachment_link.description
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

# data[].attributes.attachment_link.readable_text
Animate.css v4 brought some breaking changes, please refer to the migration guide before updating from v3.x and under.

Animate.css is a library of ready-to-use, cross-browser animations for use in your web projects. Great for emphasis, home pages, sliders, and attention-guiding hints.
Edit this on GitHub

Installation and Usage

Installing

Install with npm:

$ npm install animate.css --save

Or install with Yarn (this will only work with appropriate tooling like Webpack, Parcel, etc. If you are not using any tool for packing or bundling your code, you can simply use the CDN method below):

$ yarn add animate.css

Import it into your file:

import 'animate.css';

Or add it directly to your webpage using a CDN:

<head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" /> </head>

Basic usage

After installing Animate.css, add the class animate__animated to an element, along with any of the animation names (don't forget the animate__ prefix!):

<h1 class="animate__animated animate__bounce">An animated element</h1>

That's it! You've got a CSS animated element. Super!

Animations can improve the UX of an interface, but keep in mind that they can also get in the way of your users! Please read the best practices and gotchas sections to bring your web-things to life in the best way possible.

Using @keyframes

Even though the library provides you a few helper classes like the animated class to get you up running quickly, you can directly use the provided animations keyframes. This provides a flexible way to use Animate.css with your current projects without having to refactor your HTML code.

Example:

.my-element { display: inline-block; margin: 0 0.5rem; animation: bounce; /* referring directly to the animation's @keyframe declaration */ animation-duration: 2s; /* don't forget to set a duration! */ }

Be aware that some animations are dependent on the animation-timing property set on the animation's class. Changing or not declaring it might lead to unexpected results.

CSS Custom Properties (CSS Variables)

Since version 4, Animate.css uses custom properties (also known as CSS variables) to define the animation's duration, delay, and iterations. This makes Animate.css very flexible and customizable. Need to change an animation duration? Just set a new value globally or locally.

Example:

/* This only changes this particular animation duration */ .animate__animated.animate__bounce { --animate-duration: 2s; } /* This changes all the animations globally */ :root { --animate-duration: 800ms; --animate-delay: 0.9s; }

Custom properties also make it easy to change all your animation's time-constrained properties on the fly. It means that you can have a slow-motion or time-lapse effect with a javascript one-liner:

// All animations will take twice the time to accomplish document.documentElement.style.setProperty('--animate-duration', '2s'); // All animations will take half the time to accomplish document.documentElement.style.setProperty('--animate-duration', '.5s');

Even though some aging browsers do not support custom properties, Animate.css provides a proper fallback, widening its support for any browser that supports CSS animations.
Edit this on GitHub

Utility Classes

Animate.css comes packed with a few utility classes to simplify its use.

Delay classes

You can add delays directly on the element's class attribute, just like this:

Animate.css provides the following delays:

The provided delays are from 1 to 5 seconds. You can customize them setting the --animate-delay property to a longer or a shorter duration:

/* All delay classes will take 2x longer to start */ :root { --animate-delay: 2s; } /* All delay classes will take half the time to start */ :root { --animate-delay: 0.5s; }

Slow, slower, fast, and Faster classes

You can control the speed of the animation by adding these classes, as below:

The animate__animated class has a default speed of 1s. You can also customize the animations duration through the --animate-duration property, globally or locally. This will affect both the animations and the utility classes. Example:

/* All animations will take twice as long to finish */ :root { --animate-duration: 2s; } /* Only this element will take half the time to finish */ .my-element { --animate-duration: 0.5s; }

Notice that some animations have a duration of less than 1 second. As we used the CSS calc() function, setting the duration through the --animation-duration property will respect these ratios. So, when you change the global duration, all the animations will respond to that change!

Repeating classes

You can control the iteration count of the animation by adding these classes, like below:

As with the delay and speed classes, the animate__repeat class is based on the --animate-repeat property and has a default iteration count of 1. You can customize them by setting the --animate-repeat property to a longer or a shorter value:

/* The element will repeat the animation 2x It's better to set this property locally and not globally or you might end up with a messy situation */ .my-element { --animate-repeat: 2; }

Notice that animate__infinite doesn't use any custom property, and changes to --animate-repeat will have no effect. Don't forget to read the best practices section to make the best use of repeating animations.
Edit this on GitHub

Best Practices

Animations can greatly improve an interface's UX, but it's important to follow some guidelines to not overdo it and deteriorate the user experience on your web-things. Following the following rules should provide a good start.

Meaningful animations

You should avoid animating an element just for the sake of it. Keep in mind that animations should make an intention clear. Animations like attention seekers (bounce, flash, pulse, etc) should be used to bring the user's attention to something special in your interface and not only as a way to bring "flashiness" to it.

Entrances and exit animations should be used to orientate what is happening in the interface, clearly signaling that it's transitioning into a new state.

It doesn't mean that you should avoid adding playfulness to the interface, just be sure that the animations are not getting in the way of your user and that the page's performance is not affected by an exaggerated use of animations.

Don't animate large elements

Avoid it as it won't bring much value to the user and will probably only cause confusion. Besides that, there is a good chance that the animations will be junky, culminating in bad UX.

Don't animate root elements

Animating the <html/> or <body/> tags is possible, but you should avoid it. There were some reports pointing out that this could trigger some weird browser bugs. Besides, making the whole page bounce would hardly provide good value to your UX. If you indeed need this sort of effect, wrap your page in an element and animate it, like this:

Infinite animations should be avoided

Even though Animate.css provides utility classes for repeating animations, including an infinite one, you should avoid endless animations. It will just distract your users and might annoy a good slice of them. So, use it wisely!

Mind the initial and final state of your elements

All the Animate.css animations include a CSS property called animation-fill-mode, which controls the states of an element before and after animation. You can read more about it here. Animate.css defaults to animation-fill-mode: both, but you can change it to suit your needs.

Don't disable the prefers-reduced-motion media query

Since version 3.7.0 Animate.css supports the prefers-reduced-motion media query which disables animations based on the OS system's preference on supporting browsers (most current browsers support it). This is a critical accessibility feature and should never be disabled! This is built into browsers to help people with vestibular and seizure disorders. You can read more about it here. If your web-thing needs the animations to function, warn users, but don't disable the feature. You can do it easily with CSS only. Here's a simple example:

See the Pen Prefers-reduce-motion media query by Elton Mesquita (@eltonmesquita) on CodePen.

Gotchas

You can't animate inline elements

Even though some browsers can animate inline elements, this goes against the CSS animation specs and will break on some browsers or eventually cease to work. Always animate block or inline-block level elements (grid and flex containers and children are block-level elements too). You can set an element to display: inline-block when animating an inline-level element.

Overflow

Most of the Animate.css animations will move elements across the screen and might create scrollbars on your web-thing. This is manageable using the overflow: hidden property. There's no recipe to when and where to use it, but the basic idea is to use it in the parent holding the animated element. It's up to you to figure out when and how to use it, this guide can help you understand it.

Intervals between repeats

Unfortunately, this isn't possible with pure CSS right now. You have to use Javascript to achieve this result.
Edit this on GitHub

Usage with Javascript

You can do a whole bunch of other stuff with animate.css when you combine it with Javascript. A simple example:

const element = document.querySelector('.my-element'); element.classList.add('animate__animated', 'animate__bounceOutLeft');

You can detect when an animation ends:

const element = document.querySelector('.my-element'); element.classList.add('animate__animated', 'animate__bounceOutLeft'); element.addEventListener('animationend', () => { // do something });

or change its duration:

const element = document.querySelector('.my-element'); element.style.setProperty('--animate-duration', '0.5s');

You can also use a simple function to add the animations classes and remove them automatically:

const animateCSS = (element, animation, prefix = 'animate__') => // We create a Promise and return it new Promise((resolve, reject) => { const animationName = `${prefix}${animation}`; const node = document.querySelector(element); node.classList.add(`${prefix}animated`, animationName); // When the animation ends, we clean the classes and resolve the Promise function handleAnimationEnd(event) { event.stopPropagation(); node.classList.remove(`${prefix}animated`, animationName); resolve('Animation ended'); } node.addEventListener('animationend', handleAnimationEnd, {once: true}); });

And use it like this:

animateCSS('.my-element', 'bounce'); // or animateCSS('.my-element', 'bounce').then((message) => { // Do something after the animation });

If you had a hard time understanding the previous function, have a look at const, classList, arrow functions, and Promises.
Edit this on GitHub

Migration from v3.x and Under

Animate.css v4 brought some improvements, improved animations, and new animations, which makes it worth upgrading. However, it also comes with a breaking change: we have added a prefix for all of the Animate.css classes - defaulting to animate__ - so a direct migration is impossible.

But fear not! Although the default build, animate.min.css, brings the animate__ prefix we also provide the animate.compat.css file which brings no prefix at all, like the previous versions (3.x and under).

If you're using a bundler, update your import:

from:

import 'animate.min.css';

to

import 'animate.compat.css';

Notice that depending on your project's configuration, this might change a bit.

In case of using a CDN, update the link in your HTML:

from:

<head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.min.css" /> </head>

to

<head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.0.0/animate.compat.css" /> </head>

In the case of a new project, it's highly recommended to use the default prefixed version as it'll make sure that you'll hardly have classes conflicting with your project. Besides, in later versions, we might decide to discontinue the animate.compat.css file.
Edit this on GitHub

Custom Builds

Custom builds are not possible from a node_modules folder as we don't ship the building tools in the npm module.

Animate.css is powered by npm, postcss + postcss-preset-env, which means you can create custom builds pretty easily, using future CSS with proper fallbacks.

First of all, you'll need Node and all other dependencies:

$ git clone https://github.com/animate-css/animate.css.git $ cd animate.css $ npm install

Next, run npm start to compile your custom build. Three files will be generated:

animate.css: raw build, easy to read and without any optimization

animate.min.css: minified build ready for production

animate.compat.css: minified build ready for production without class prefix. This should only be used as an easy path for migrations.

For example, if you'll only use some of the "attention seekers" animations, simply edit the ./source/animate.css file, delete every @import and the ones you want to use.

@import 'attention_seekers/bounce.css'; @import 'attention_seekers/flash.css'; @import 'attention_seekers/pulse.css'; @import 'attention_seekers/rubberBand.css'; @import 'attention_seekers/shake.css'; @import 'attention_seekers/headShake.css'; @import 'attention_seekers/swing.css'; @import 'attention_seekers/tada.css'; @import 'attention_seekers/wobble.css'; @import 'attention_seekers/jello.css'; @import 'attention_seekers/heartBeat.css';

Now, just run npm start and your highly optimized build will be generated at the root of the project.

Changing the default prefix

It's pretty straight forward to change animate's prefix on your custom build. Change the animateConfig's prefix property in the package.json file and rebuild the library with npm start:

/* on Animate.css package.json */ "animateConfig": { "prefix": "myCustomPrefix__" },

then:

Easy peasy!
Edit this on GitHub

Accessibility

Animate.css supports the prefers-reduced-motion media query so that users with motion sensitivity can opt out of animations. On supported platforms (currently all the major browsers and OS, including mobile), users can select "reduce motion" on their operating system preferences, and it will turn off CSS transitions for them without any further work required.
Edit this on GitHub

License and Contributing

Animate.css is licensed under the Hippocratic License.

Contributing

Pull requests are the way to go here. We only have two rules for submitting a pull request: match the naming convention (camelCase, categorized [fades, bounces, etc.]) and let us see a demo of submitted animations in a pen. That last one is important.

Code of Conduct

This project and everyone participating in it is governed by the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to animate@eltonmesquita.com.
Edit this on GitHub

# data[].attributes.attachment_link.title
Animate.css | A cross-browser library of CSS animations.

# data[].attributes.attachment_link.description
Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.

# data[].attributes.attachment_link.readable_text
A collection of CSS3 powered hover effects to be applied to links, buttons, logos, SVG, featured images and so on. Easily apply to your own elements, modify or just use for inspiration. Available in CSS, Sass, and LESS.

Like Hover.css? Try out my animation framework for sliders,
presentations, and other step-based applications

# data[].attributes.attachment_link.title
Hover.css - A collection of CSS3 powered hover effects

# data[].attributes.attachment_link.description
A collection of CSS3 powered hover effects to be applied to links, buttons, logos, SVG, featured images and so on. Easily apply to your own elements, modify or just use for inspiration. Available in CSS, Sass, and LESS. Like Hover.css?

# data[].attributes.attachment_link.readable_text
Table of Contents

Usage

Using Hamburgers for your site is easy (well, that was my intention anyway).

Sass

.scss source files are available if you use Sass as your CSS precompiler. It's customizable and modular.

1. Hamburgers is available via npm, yarn and Bower.

npm install hamburgers yarn get hamburgers bower install css-hamburgers

Also available as a Ruby gem to use within your Rails application-see below for more information.

Or to manually install it, download and unzip the source code from Github. Then copy the files from the _sass/hamburgers directory into your project.

2. Import the hamburgers.scss file in your Sass manifest file:

3. Customize your hamburger and/or remove any types you don't want in hamburgers.scss.

4. Compile your Sass*, and voila!

* Be sure to run the CSS through Autoprefixer since the Sass doesn't account for vendor prefixes.
Install for Ruby on Rails
** More information on why Sass's native @import + why you should ditch Sprockets directives altogether.
Customization

To override default settings, declare them before importing Hamburgers:

You can also create a separate file (e.g. hamburgers-settings.scss) with those declarations, then import it along with Hamburgers:

Here is the full list of default settings (found in _sass/hamburgers/hamburgers.scss);

Wanna work with ems or rems instead of px? Just change all the px values to the unit of your choice. Note: Be consistent (all px or all ems), otherwise it may break-the math behind the customization will fail if it attempts to perform operations with values of different units.

Not satisfied?

Dig into _base.scss or types/ and customize to your heart's content. Fair warning: It's pretty delicate and may break, especially if you tweak the animations themselves.

Accessibility

Hamburger menu icons can be useful in the right context, but they're not the most accessible.

ARIA will help make it accessible to people with disabilities.

If you insist on using <div>s, by default they're not focusable (i.e. via keyboard or assistive technology). Add the tabindex attribute alongside ARIA.

A label can help make it more obvious that it toggles a menu.

Browser Support

Animations use CSS3 3D transforms ( translate3d whenever possible for GPU acceleration), which is supported by most browsers (not supported by IE9 and older and Opera Mini). For detailed browser support, check caniuse.com.

# data[].attributes.attachment_link.description
AOS - Animate On Scroll library using CSS3

# data[].attributes.attachment_link.readable_text
Reveal Animations When You Scroll. Very Animate.css Friend :-)
Easily customize animation settings: style, delay, length, offset, iterations...
100% MIT Licensed, not GPL. Keep your code yours.
ES2015+, naturally Caffeine free.

# data[].attributes.attachment_link.title
wow.js - Reveal Animations When Scrolling

# data[].attributes.attachment_link.description
wow.js is a JavaScript plugin that reveals animations when you scroll. Very Animate.css Friend.

# data[].attributes.attachment_link.authors[].name
Nicolai Høeg Pedersen, Dynamicweb Software

# data[].attributes.attachment_link.title
Swiffy Slider - Examples of lightweight vanilla js sliders

# data[].attributes.attachment_link.description
Example of Swiffy Slider usages as seen in the real world.

# data[].attributes.attachment_link.readable_text
A box-shadow CSS generator that helps you quickly generate box-shadow CSS declarations for your website. It comes with many options and it demonstrates instantly. If you want to have cool fonts, please also try our font keyboard to help easily get fonts at Font Keyboard iOS app and Font Keyboard Android app.

# data[].attributes.attachment_link.description
A box-shadow CSS Generator tool to quickly generate box-shadow CSS declarations.

# data[].attributes.attachment_link.readable_text
Generate CSS media queries for hundreds of devices including numerous ipad and iphone models, android devices by Samsung, LG, and many more. There are always occasions where you must target specific devices, it's just an unpleasant fact.

Asus ZenBook UX303U

Microsoft Surface Book

Dell Inspiron 15 7559

Asus Zenbook UX305CA

Microsoft Surface Pro 4

Acer Aspire V3-574G

Microsoft Surface Pro 3

MSI GE62 2QD Apache Pro

Asus Zenfone 5 Lite

Asus ZenBook Pro UX501

Asus ZenBook Pro UX501

Asus ZenBook Pro UX501

Acer Chromebook 14

Dell Inspiron 11 3000 Series

Lenovo ThinkPad 13

Lenovo ThinkPad X1 Carbon

Lenovo ThinkPad X1 Yoga

Razer Blade Stealth

Microsoft Lumia 640 XL

Microsoft Lumia 640

HTC Windows Phone 8S

HTC Windows Phone 8X

Microsoft Surface Pro

13" Macbook Pro Retina

15" Macbook Pro Retina

Samsung Galaxy S6 Edge

Sony Xperia Z5 Premium

Samsung Galaxy S7 Edge

Samsung Notebook 7 Spin

Acer Iconia Tab A1-810

Acer Iconia Tab A100

Acer Iconia Tab A101

Acer Iconia Tab A200

Acer Iconia Tab A500

Acer Iconia Tab A501

Ainol Novo 7 Elf 2

Alcatel Smart Mini 875

Alcatel One Touch 903

Alcatel One Touch Idol X

Alcatel One Touch T10

Amicroe 7 TouchTAB II

Amicroe 9.7 TouchTAB IV

Asus MeMo Pad ME172V

Asus Transformer Pad

Asus Transformer TF101

Barnes & Noble Nook HD

Xiaomi Redmi Note 3

HTC Desire Z (Vision)

HTC MyTouch Slide 4G

HTC Wildfire A3333

Huawei Ascend G510

Huawei Ascend Mate

Huawei U8650 Sonic

Kindle Fire HD 8.9

Lenovo IdeaTab A1000

Lenovo IdeaTab S6000

Lenovo Yoga Tablet 10

Lenovo Yoga Tablet 8

LG Optimus Black P970

LG Optimus L3 E400

LG Optimus L3 II E425f

LG Optimus L7 P700

LG Optimus L9 P760

LG Optimus Pad V900

Motorola Defy Mini

Motorola Droid Bionic

Motorola Droid Razr

Motorola Electrify 2

Motorola Milestone

Motorola RAZR HD 4G

Motorola RAZR M 4G

Motorola RAZR MAXX

Motorola Xoom 2 Media Edition

Panasonic Toughpad FZ-A1

Samsung Galaxy 5/Europa I5500

Samsung Galaxy Ace 2 I8160

Samsung Galaxy Ace Plus S7500

Samsung Galaxy Ace S5830

Samsung Galaxy Beam I8530

Samsung Galaxy Camera GC100

Samsung Galaxy Mini 2 S6500

Samsung Galaxy Note 4

Samsung Galaxy Note 5

Samsung Galaxy Note 10.1 N8010

Samsung Galaxy Note 2 N7100

Samsung Galaxy Note 3 N9005

Samsung Galaxy Note 8.0 N5100

Samsung Galaxy Note 8.0 N5110

Samsung Galaxy Note N700

Samsung Galaxy S Duos S7562

Samsung Galaxy S I9000

Samsung Galaxy S WiFi YPG70CW

Samsung Galaxy S2 I9100

Samsung Galaxy S3 I9300

Samsung Galaxy S3 Mini I8190

Samsung Galaxy S4 Active I9295

Samsung Galaxy S4 I9500

Samsung Galaxy S4 I9505

Samsung Galaxy S4 Mini I9190

Samsung Galaxy S4 Zoom SM-C105

Samsung Galaxy Tab 10.1 P7510

Samsung Galaxy Tab 7.7 P6810

Samsung Galaxy Pocket Neo S5310

Samsung Galaxy Tab 8.9 P7310

Samsung Galaxy Tab P1000

Samsung Galaxy Y S5360

Samsung Galaxy Young S6310

Samsung Infuse 4G I997

Sony Ericcson Xperia Play

Sony Ericsson Xperia Arc

Sony Ericsson Xperia Mini ST15i

Sony Ericsson Xperia Neo

Sony Ericsson Xperia X10

Sony Ericsson Xperia X8

Sony Xperia Tablet Z

Yarvik Xenta Tab 8c

ZTE T22 (Telstra Urbane)

ZTE T28 (Telstra Active Touch)

ZTE T760 (Telstra Smart-Touch 2)

ZTE T790 (Telstra Pulse)

ZTE T81 (Telstra Frontier 4G)

ZTE T83 (Telstra Dave 4G)

# data[].attributes.attachment_link.description
Generate CSS media queries for hundreds of devices including numerous ipad and iphone models, android devices by Samsung, LG, and many more.

# data[].attributes.attachment_link.title
Layoutit Grid - CSS Grids layouts made easy!

# data[].attributes.attachment_link.description
Quickly design web layouts, and get HTML and CSS code. Learn CSS Grid visually and build web layouts with our interactive CSS Grid Generator.

# data[].attributes.attachment_link.readable_text
Flex Container Properties

The following properties affect the flexbox container.
Default values marked with

To create a flexbox, set the display property on the parent container element to flex for a block-level flex container or inline-flex for an inline-level flex container. Both of these values define the element as a "flex container" and its children as "flex items".

The flex-direction property specifies how flex items flow within a flex container by setting the container's main axis either horizontally (like rows) or vertically (like columns).

With the flex-direction set torow, flex items are added from left to right

With the flex-direction set torow-reverse, flex items start on the right and are added on the left.

With the flex-direction set tocolumn, flex items are added from top to bottom

With the flex-direction set tocolumn-reverse, flex items start on the bottom and are added on the top.

This property also defines the cross axis (which is perpendicular to the main axis) which is implemented when the flex-wrap property is set to wrap or wrap-reverse. Note that row and row-reverse are reversed if the direction property is rtl.

In the flex container above, the flex-direction is indicated by a blue arrow in the upper left corner.

By default, flex items are laid out in a single line (row or column). Setting the flex-wrap property allows content to wrap onto multiple lines (rows or columns) while setting the direction of the cross axis in the process.

If the flex-direction is set to row or row-reverse and flex-wrap is set to wrap, flex items will wrap from top to bottom ( wrap-reverse would make flex items wrap from bottom to top).

If the flex-direction is set to column or column-reverse and flex-wrap is set to wrap, flex items will wrap from left to right ( wrap-reverse would make flex items wrap from right to left).

When the flex-wrap property is set to nowrap, flex items will be added to fit the flex container and overflow the container if the flex items can't be shrunk to fit. Note that the wrapping of columns will be reversed if the direction property is rtl.

In the flex container above, the cross axis is indicated by a green arrow in the upper right corner.

The justify-content property specifies how the browser distributes space between and around flex items along the main axis of their container.

flex-start: Pack flex items at the start of the main axis (akin to left justified if the flex-direction was row)

flex-end: Pack items at the end of the main axis (akin to right justified if the flex-direction was row)

center: Pack items around the center (akin to centered)

space-between: Distribute items evenly with the first item at the start and the last at the end

space-around: Distribute items evenly with equal space around each item

Similar to justify-content but for the perpendicular cross axis direction.

flex-start: Align to cross axis start

flex-end: Align to cross axis end

center: Center flex items along the cross axis

baseline: Align the flex items' baselines

stretch: Stretch flex items to fit their container along the cross axis

The align-content property aligns a flex container's lines along the cross axis when there is extra space, similar to how justify-content aligns individual items within the main axis. This property has no effect on single line flexible boxes.

flex-start: Pack lines from the cross-axis start

flex-end: Pack lines from the cross-axis end

center: Pack lines around the cross-axis center

space-between: Distribute lines along the cross-axis, start to end

space-around: Distribute lines along the cross-axis, equally spaced

stretch: Stretch lines to occupy the whole cross-axis

# data[].attributes.attachment_link.description
Learn how the css flexbox properties work by using our CSS Flexbox Generator. Make changes to each property to visually see how the flexbox items reacts. CSS and HTML code is also generated.

# data[].attributes.attachment_link.title
Explore 3000+ Free UI Elements: CSS & Tailwind

# data[].attributes.attachment_link.description
Library of free and customizable UI elements made with CSS or Tailwind. It’s all open-source, and it’s all free. Try it out to save you many hours spent on building & customizing UI components for your next project.

# data[].attributes.attachment_link.readable_text
Blobmaker is a free generative design tool made with 💕 by z creative labs, to help you quickly create random, unique, and organic-looking SVG shapes.

From landing pages to illustrations, blobs are everywhere! Creating smooth, organic-looking shapes can be difficult, especially when you need many different ones. Blobmaker makes it easy to create unique blob shapes based on random data.

Modify the complexity (number of points) and contrast (difference between points) to create different types of organic svg shapes. Press that dice button until you find a blob you like and download it as an SVG or copy the code directly to your clipboard.

# data[].attributes.attachment_link.title
Blobmaker - Make organic SVG shapes for your next design

# data[].attributes.attachment_link.description
Make organic SVG shapes for your next design. Modify the complexity, contrast, and color, to generate unique SVG blobs every time.

# data[].attributes.attachment_link.title
Glassmorphism CSS Generator | SquarePlanet | SquarePlanet

# data[].attributes.attachment_link.description
Glassmorphism is a unified name for the popular Frosted Glass aesthetic.

# data[].attributes.attachment_link.title
Get Waves - Create SVG waves for your next design

# data[].attributes.attachment_link.description
A free SVG wave generator to make unique SVG waves for your next web design. Choose a curve, adjust complexity, randomize!