askvity

# Simple Rotation on Hover (Referenced Method)

Published in CSS Animation 4 mins read

You can make a div rotate in CSS using the transform: rotate() property, often combined with transitions for simple interactive effects or with @keyframes and the animation property for continuous rotation.

Simple Rotation on Hover (Referenced Method)

One straightforward way to make a div rotate is by applying the transform: rotate() property when a user hovers over the element. This method is ideal for creating interactive effects where rotation happens only when the mouse is over the div.

As demonstrated in a CSS tutorial snippet, applying transform: rotate() on the :hover state of an element is a common technique. You combine the :hover pseudo-class with the transform property.

To make the rotation smooth rather than instant, you should also add the transition property to the original state of the element.

Here's a basic example:

.rotate-on-hover {
  width: 100px;
  height: 100px;
  background-color: teal;
  margin: 50px auto;
  /* Add a transition for smooth rotation */
  transition: transform 0.5s ease-in-out;
}

/* Apply rotation on hover */
.rotate-on-hover:hover {
  transform: rotate(360deg); /* Rotate by 360 degrees */
}
<div class="rotate-on-hover"></div>

In this example:

  • The .rotate-on-hover class defines the basic look and applies a transition to the transform property over 0.5 seconds with an ease-in-out timing function.
  • The .rotate-on-hover:hover rule applies transform: rotate(360deg) when the element is hovered, causing it to rotate one full turn smoothly due to the transition.

Continuous Rotation Animation using Keyframes

For animations that run automatically or loop continuously, you use CSS @keyframes and the animation property. This method provides more control over the animation sequence, timing, and repetition.

  1. Define Keyframes: Create an @keyframes rule with a name (e.g., spin). Inside, specify the styles at different points in the animation cycle, usually at 0% (start) and 100% (end). For rotation, you typically change the transform: rotate() value.
  2. Apply Animation: Apply the defined keyframes to your div using the animation property. This property links the element to the @keyframes rule and controls how the animation runs (duration, timing, iteration count, etc.).

Here's an example for continuous rotation:

.rotate-continuous {
  width: 100px;
  height: 100px;
  background-color: navy;
  margin: 50px auto;
  /* Apply the animation */
  animation-name: spin; /* Name of the keyframes rule */
  animation-duration: 2s; /* How long one animation cycle takes */
  animation-iteration-count: infinite; /* How many times it should run (infinite loops it) */
  animation-timing-function: linear; /* Animation speed curve (linear for constant speed) */
}

/* Define the animation */
@keyframes spin {
  0% {
    transform: rotate(0deg); /* Start at 0 degrees */
  }
  100% {
    transform: rotate(360deg); /* End at 360 degrees (one full rotation) */
  }
}
<div class="rotate-continuous"></div>

Key animation properties explained:

Property Description Example Value
animation-name Specifies the name of the @keyframes rule to use. spin
animation-duration Defines how long the animation should take to complete one cycle. 2s
animation-iteration-count Specifies how many times the animation should run. Use infinite for loops. infinite
animation-timing-function Sets the speed curve of the animation. linear is good for constant rotation. linear

You can also use the shorthand animation property:

.rotate-continuous-shorthand {
  /* ... (other styles) ... */
  animation: spin 2s linear infinite; /* name duration timing-function iteration-count */
}

Both the hover method (using transform and transition) and the keyframes method (using @keyframes and animation) are effective ways to create div rotation effects in CSS, catering to different use cases from simple interactivity to continuous loops.

Basic HTML Structure

To see these CSS styles in action, you'll need a basic HTML file with the div elements:

<!DOCTYPE html>
<html>
<head>
<title>CSS Rotate Div Example</title>
<link rel="stylesheet" href="styles.css"> <!-- Link to your CSS file -->
<style>
  /* Paste your CSS code here if not using a separate file */
</style>
</head>
<body>

  <h2>Rotate on Hover Example</h2>
  <div class="rotate-on-hover"></div>

  <h2>Continuous Rotation Example</h2>
  <div class="rotate-continuous"></div>
  <!-- Or if using shorthand -->
  <!-- <div class="rotate-continuous-shorthand"></div> -->

</body>
</html>

By applying these CSS techniques, you can easily add dynamic rotation animations to your div elements.

Related Articles