1. Web Design
  2. HTML/CSS
  3. Animation

AniJS: Easy CSS Animations Without Coding

Scroll to top

Many people want to add subtle animations to their website in response to clicks or other actions by their visitors. However, not everyone is well versed in using CSS or JavaScript. Some just know how to modify the HTML and have the change reflect on the website.

Generally, this is the part where developers take over and add the necessary JavaScript and CSS to make your website stand out. However, if you want to be able to build an animated site yourself, without coding, a library called AniJS would help a great deal.

AniJS lets you create animated styling for your website without any JavaScript or CSS coding! You can specify all your animations with HTML using a simple If-On-Do-To syntax.

Installation

Before you can begin animating the elements on your webpage using data-anijs attributes, you will have to include the necessary files. Three different files are needed to access all the functionality of AniJS. These files are the core JS library, the CSS file for the animations, and another helper JavaScript file for using special AniJS syntax like $addClass, $toggleClass, and $removeClass.

You can also install the library using Bower by running the following command:

1
bower install anijs --save

Once you have included all the necessary files, the elements on your webpage will be ready for animation.

Getting Started With AniJS Syntax

In its basic form, AniJS uses the following syntax to animate particular elements based on any event.

1
If (any event happens), On (any element), Do (something like animate, add/remove class), To (this or any other element)

Here, the If part specifies the event which will trigger the animation or class manipulation. The On part specifies the element whose events AniJS should be listening to. This can be different from the element on which you have set up the data-anijs attribute. The Do part specifies the action to take. Here, you can specify the name of the animation that you want to apply, etc. Finally, the To part is used to specify the element which needs to be animated or manipulated.

The If part is necessary for the AniJS statement that you add to animate any element. The On part is optional and, if left unspecified, uses the current element as the default value. The Do part is also necessary as it tells the browser what to do when the specified event happens. The To part is also optional and defaults to the current element when not specified.

You can also use the Before and After hooks to specify what should happen before and after AniJS does the thing mentioned inside the Do part.

Animating Different Elements

AniJS allows you to run an animation by triggering it on any applicable event listed on the MDN page. Similarly, you can use on and to to target any element you want using CSS selectors. For example, you could specify that you want to listen to an event on div.promotion or section div p.first, etc. The do part can be used to specify the animation that you want to apply to different elements. AniJS has a lot of animations which can be applied to any element you want.

The following HTML snippet will show you how to apply some animations on elements which will be triggered on certain events.

1
<div class="orange box" data-anijs="if: mouseover, do: swing animated"></div>
2
<div class="pink box" data-anijs="if: click, do: tada animated"></div>
3
<div class="red box" data-anijs="if: dblclick, do: rubberBand animated"></div>
4
<div class="purple box" data-anijs="if: mousemove, do: shake animated"></div>
5
<div class="black box" data-anijs="if: mouseover, on: body div.green, do: flash animated"></div>
6
<div class="green box" data-anijs="if: mouseover, on: div.brown, do: fadeIn animated"></div>
7
<div class="yellow box" data-anijs="if: dblclick, on: body, do: bounce animated"></div>
8
<div class="brown box" data-anijs="if: click, on: div, do: wobble animated"></div>

In each case, all you have to do is write the statements inside the data-anijs attribute, and the library will take care of the rest. (We have skipped the to part in all these animations so the animation is applied to the element inside which we have specified the data-anijs attribute.)

The last four boxes have different values for the on part. This, for example, means that the animation on the green box will happen only when the mouse moves over the brown box. Similarly, the bounce animation on the yellow box will start playing whenever a user double-clicks anywhere inside the body.

You can try these animations out yourself in the embedded CodePen demo.

Manipulating Classes and HTML Elements

AniJS allows you to do more than simply animate different elements. For example, you can use it to add, remove or toggle classes applied to different elements. Similarly, you can also remove HTML elements or clone them without adding a single line of JavaScript. The library also allows you to traverse the DOM using special reserved keywords.

Let's begin with class manipulation. AniJS has three reserved keywords for manipulating classes. These are $addClass, $removeClass, and $toggleClass. As the name suggests, you can use them to add, remove, and toggle one or multiple classes of an element respectively. All you have to do is specify the class names after the reserved keywords.

Similarly, you can use reserved keywords like $parent, $ancestors, $closest, $find, and $children to traverse the DOM.

You can use these two sets of reserved keywords together to do something like adding a certain class to all the children of an element after a visitor double-clicks that particular element. 

However, which children you are referring to can be ambiguous in certain cases. For example, you might have applied the data-anijs attribute to one element but set the value of the On part to something else using CSS selectors. In this situation, AniJS will have no way of knowing if the class has to be added to the children of the element referred by the CSS selector or the element to which you have applied the data-anijs attribute. 

In such cases, you can remove the ambiguity by using another reserved keyword called target. Here, target refers to the element pointed to by the CSS selector.

Consider the following three examples in which AniJS has been used to toggle classes of different elements:

1
<div class="box" 
2
     data-anijs="if: click,

3
                 do: $toggleClass orange"></div>
4
5
<div class="box second" 
6
     data-anijs="if: click,

7
                 do: $toggleClass red,

8
                 to: $children">
9
  <span class="shells"></span>
10
  <!-- Many more span tags -->
11
  <span class="shells"></span>
12
</div>
13
14
<div class="box" 
15
     data-anijs="if: click, 

16
                 on: .shells,

17
                 do: $toggleClass yellow, 

18
                 to: $parent target;

19
                 if: click,

20
                 on: .shells,

21
                 do: $toggleClass yellow,

22
                 to: $parent"></div>

In the above example, I have reformatted the HTML to make it easier to read and see what's going on.

Let's begin with the first div. In this case, we have omitted both the on and to parts of the data-anijs attribute value. Therefore, they both default to the current div itself. If you try to click on this particular div, it will toggle the orange class, which in turn changes the box to orange.

In the case of the second div, we are telling AniJS to toggle the class called red for all elements which are children of that particular div. This will rotate all the children span elements and change their color to red, while setting the border-radius to zero.

We have supplied two different statements inside the data-anijs attribute of the third div. Both these statements toggle the same yellow class. However, the effects are completely different due to the use of the target keyword.

In the first case, we have added the target keyword after the $parent keyword. This tells AniJS that we want to toggle the class for the parent of the elements pointed to by the shells class. In the second case, we have skipped the target keyword, so AniJS changes the background of the parent of the current div. Since the parent of the div is the body itself, the whole page turns yellow.

You can try clicking on different elements and seeing how they affect the page in the embedded CodePen demo.

One more thing worth noticing is that even though the data-anijs attribute for the third box has two statements, clicking the box itself does not have any effect. This is because we have instructed AniJS to listen to the click events on the span elements with class shells in both the cases.

Other Ways to Manipulate HTML

Another way to manipulate HTML elements on a webpage using AniJS would be to clone or remove them. The library has reserved the keywords $remove and $clone which will tell it whether you want to remove an element or clone it.

You can pass multiple selectors to $remove in order to remove multiple elements from the webpage. Keep in mind that different CSS selectors need to be separated with the pipe | character.

The $clone keyword also accepts two parameters. The first one is the CSS selector to specify the element you want to clone. The second one is a number to specify how many copies you want to make. For instance, $clone .shells|10 will make 10 copies of the elements with class shells and append them as children of the element on which the data-anijs attribute has been specified. If the copies have to be appended to a different element, you can point AniJS to it by specifying the appropriate CSS selector after to in the AniJS statement.

Conclusion

The aim of this tutorial was to help you get started with AniJS as quickly as possible. As you might have noticed, the library is very easy to use. All you have to do is specify the right attribute values and AniJS will take care of everything else like changing classes, manipulating the DOM, and animating any changes.

The library offers a lot of other features that we have not covered in this tutorial. You should go through the official documentation to learn more about it and use it to its full potential.

Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.