DEV Community

Cover image for React - how to make animation with CSS transition property
Dirask-React
Dirask-React

Posted on • Originally published at dirask.com

React - how to make animation with CSS transition property

Hi there! πŸ‘‹πŸ˜Š

In this article, I would like to show you how to make an animated rotating square in React using transition property. ⏭

Before we start, I would highly recommend you to check out the runnable example for the solution on our website:
React - how to make animation with CSS transition property

Final effect:
image

Below example presents three style objects:

  • normalStyle which is the default style of our div element,
  • transformedStyle which is transformed style of our div element,
  • buttonStyle which is style of our button element.

The styles of our div have transition value set to '1s'. It means our component will change it's property values smoothly, over a given duration (over 1s). Additional transform parameter describes moving of an element. In our case transform rotates the element during 2s.

Practical example:

import React from 'react';

// --- style objects -------------------------------

const normalStyle = {
  margin: '50px',
  padding: '20px',
  borderRadius: '10px',
  width: '100px',
  height: '100px',
  background: '#06f2ff',
  boxShadow: '5px 5px 5px #04bd57',
  transition: '1s, transform 2s',
};

const transformedStyle = {
  margin: '50px',
  padding: '20px',
  borderRadius: '10px',
  width: '150px',
  height: '150px',
  background: '#06ff76',
  boxShadow: '5px 5px 5px #3085d6',
  transition: '1s, transform 2s',
  transform: 'rotate(180deg)',
};

const buttonStyle = {
  padding: '2px',
  border: '2px solid white',
  background: 'black',
  boxShadow: '5px 5px 5px grey',
  textShadow: '1px 1px 1px black',
  fontWeight: '900',
  color: 'white',
  borderRadius: '10px',
};

// --- component -------------------------------------

const App = () => {
  const [bigSize, setBigSize] = React.useState(false);
  const handleClick = () => setBigSize(!bigSize);
  return (
    <div style={{ height: '300px' }}>
      <div style={bigSize ? transformedStyle : normalStyle}>
        <button style={buttonStyle} onClick={handleClick}>
          Change size
        </button>
      </div>
    </div>
  );
};

export default App;
Enter fullscreen mode Exit fullscreen mode

You can run this example here

πŸ“ Note:
If the duration is not specified, the transition will have no effect, because the default value is 0.

If you found this solution useful you can leave a comment or reaction πŸ’—πŸ¦„πŸ’Ύ.
Thanks for your time and see you in the upcoming posts! 😊


Write to us! βœ‰

If you have any problem to solve or questions that no one can answer related to a React or JavaScript topic, or you're looking for a mentoring write to us on dirask.com -> Questions

You can also join our facebook group where we share coding tips and tricks with others! πŸ”₯

Top comments (1)

Collapse
 
lexlohr profile image
Alex Lohr

Small hint: use the spread selector to make obvious which styles are changed:

const normalStyle = {
  margin: '50px',
  padding: '20px',
  borderRadius: '10px',
  width: '100px',
  height: '100px',
  background: '#06f2ff',
  boxShadow: '5px 5px 5px #04bd57',
  transition: '1s, transform 2s',
};

const transformedStyle = {
  ...normalStyle,
  width: '150px',
  height: '150px',
  background: '#06ff76',
  boxShadow: '5px 5px 5px #3085d6',
  transform: 'rotate(180deg)',
};
Enter fullscreen mode Exit fullscreen mode