DEV Community

Stanley
Stanley

Posted on

CSS TRANSITIONS

OUTLINE
Here is a comprehensive outline for a CSS transition tutorial:

  1. Introduction to CSS Transitions:

    • Definition of CSS transitions
    • How CSS transitions work
    • Examples of CSS transitions
  2. Properties of CSS Transitions:

    • transition-property: specifies the name or names of the CSS properties to which transitions should be applied
    • transition-duration: specifies the duration over which transitions should occur
    • transition-timing-function: specifies a function to define how intermediate values for properties are computed
    • transition-delay: specifies a delay (in seconds) for the transition effect
  3. Using CSS Transitions:

    • How to create a transition effect
    • How to specify the speed curve of the transition
    • How to delay the transition effect
    • How to change several property values
  4. Browser Support for Transitions:

    • Overview of browser support for CSS transitions
    • How to ensure cross-browser compatibility
  5. Advanced Topics:

    • Using cubic-bezier functions to define custom easing functions
    • Combining CSS transitions with other CSS techniques, such as transforms and animations
  6. Conclusion and Further Resources:

    • Summary of key points
    • Links to further resources for learning about CSS transitions

Introduction to CSS Transitions

Definition of CSS transitions
CSS transitions provide a way to control animation speed when changing CSS properties. Instead of having property changes take effect immediately, you can cause the changes in a property to take place over a period of time¹. For example, if you change the color of an element from white to black, usually the change is instantaneous. With CSS transitions enabled, changes occur at time intervals that follow an acceleration curve, all of which can be customized¹.

How CSS transitions work
CSS transitions let you decide which properties to animate (by listing them explicitly), when the animation will start (by setting a delay), how long the transition will last (by setting a duration), and how the transition will run (by defining an easing function, e.g., linearly or quick at the beginning, slow at the end)¹. The Web author can define which property has to be animated and in which way. This allows the creation of complex transitions. However, some properties are not animatable as it doesn't make sense to animate them¹.

Examples of CSS transitions
Here are some examples of CSS transitions:

Simple example: A div element with a specified transition effect for the width property, with a duration of 2 seconds. The transition effect will start when the specified CSS property (width) changes value.

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s;
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

Multiple animated properties example: A div element with a transition effect for both the width and height property, with a duration of 2 seconds for the width and 4 seconds for the height.

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s, height 4s;
}

div:hover {
  width: 300px;
  height: 300px;
}
Enter fullscreen mode Exit fullscreen mode

Using transitions when highlighting menus: A common use of CSS is to highlight items in a menu as the user hovers over them. This can be achieved using CSS transitions.

ul li {
    display: inline-block;
    margin-right: -4px;
    position: relative;
    padding: 15px 20px;
    background-color: #eee;
    cursor: pointer;
    transition: all .2s ease-in-out; 
}

ul li:hover {
    background-color: #ddd;
    transform: scale(1.3);
}
Enter fullscreen mode Exit fullscreen mode

Properties of CSS Transitions

CSS transitions provide a way to control animation speed when changing CSS properties. Instead of having property changes take effect immediately, you can cause the changes in a property to take place over a period of time¹. The transition is the combination of four properties which are listed below:

  1. transition-property: It specifies the CSS properties to which a transition effect should be applied. Only properties listed here are animated during transitions; changes to all other properties occur instantaneously as usual². For example, if you want to apply a transition effect to the width property of an element, you can specify it like this:
div {
  transition-property: width;
}
Enter fullscreen mode Exit fullscreen mode
  1. transition-duration: It specifies the length of time a transition animation should take to complete. You can specify a single duration that applies to all properties during the transition, or multiple values to allow each property to transition over a different period of time². For example, if you want the width transition to take 2 seconds, you can specify it like this:
div {
  transition-duration: 2s;
}
Enter fullscreen mode Exit fullscreen mode
  1. transition-timing-function: It specifies a function to define how intermediate values for properties are computed. Easing functions determine how intermediate values of the transition are calculated². For example, if you want the width transition to have an ease-in-out timing function, you can specify it like this:
div {
  transition-timing-function: ease-in-out;
}
Enter fullscreen mode Exit fullscreen mode
  1. transition-delay: It defines how long to wait between the time a property is changed and the transition actually begins². For example, if you want the width transition to start after a delay of 1 second, you can specify it like this:
div {
  transition-delay: 1s;
}
Enter fullscreen mode Exit fullscreen mode

All these properties can be combined into one shorthand property – transition. The syntax is:

div {
  transition: <transition-property> <transition-duration> <transition-timing-function> <transition-delay>;
}
Enter fullscreen mode Exit fullscreen mode

For example, if you want to apply a transition effect to the width property of an element, with a duration of 2 seconds, an ease-in-out timing function, and a delay of 1 second, you can specify it like this:

div {
  transition: width 2s ease-in-out 1s;
}
Enter fullscreen mode Exit fullscreen mode

Using CSS Transitions

CSS transitions provide a way to control animation speed when changing CSS properties. Instead of having property changes take effect immediately, you can cause the changes in a property to take place over a period of time¹.

How to create a transition effect
To create a transition effect, you must specify two things: the CSS property you want to add an effect to and the duration of the effect³. For example, if you want to apply a transition effect to the width property of an element, with a duration of 2 seconds, you can specify it like this:

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s;
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

How to specify the speed curve of the transition
The transition-timing-function property specifies the speed curve of the transition effect. This property can have several values, including ease, linear, ease-in, ease-out, and ease-in-out³. For example, if you want the width transition to have an ease-in-out timing function, you can specify it like this:

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s ease-in-out;
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

How to delay the transition effect
The transition-delay property specifies a delay (in seconds) for the transition effect[^10^]. For example, if you want the width transition to start after a delay of 1 second, you can specify it like this:

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s ease-in-out;
  transition-delay: 1s;
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

How to change several property values
You can change several property values at once by specifying multiple properties in the transition shorthand property. For example, if you want to apply a transition effect to both the width and height properties of an element, with a duration of 2 seconds for the width and 4 seconds for the height, you can specify it like this:

div {
    width: 100px;
    height: 100px;
    background-color: red;
    transition: width 2s, height 4s;
}

div:hover {
    width:300px;
    height:300px;
}
Enter fullscreen mode Exit fullscreen mode

Browser Support for Transitions

Overview of browser support for CSS transitions
CSS transitions are widely supported in modern browsers. According to Can I use, CSS transitions are supported by 97.4% of global users¹. This includes support in all major browsers such as Chrome, Firefox, Safari, Edge, and Opera¹. However, it is important to note that older versions of some browsers may require vendor prefixes to use CSS transitions. For example, older versions of Chrome and Safari may require the -webkit- prefix³.

How to ensure cross-browser compatibility
To ensure cross-browser compatibility with CSS transitions, you can follow these steps:

  1. Determine your target browsers: It is important to determine which browsers your target audience is likely to use. This will help you focus your testing efforts on the most relevant browsers⁵.
  2. Use vendor prefixes: Vendor prefixes are a way for browser makers to add support for new CSS features before those features are fully supported in all browsers. By using vendor prefixes, developers can use new CSS features in the browsers that support them, instead of waiting for all browsers to catch up. For example, if you need to support older versions of Chrome and Safari, you may need to use the -webkit- prefix for the transition property¹.

Here is an example of how to use vendor prefixes for the transition property:

div {
  width: 100px;
  height: 100px;
  background: red;
  -webkit-transition: width 2s; /* For older versions of Chrome and Safari */
  transition: width 2s;
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use the -webkit- prefix for the transition property to ensure that the transition effect works in older versions of Chrome and Safari. We also include the unprefixed version of the transition property to ensure that the transition effect works in other browsers that support CSS transitions.

  1. Test on multiple browsers: It is important to test your website on multiple browsers to ensure that the transitions work as expected. You can use tools such as LambdaTest or BrowserStack to test your website on a range of different browsers and devices.
  2. Provide fallbacks: In case some users are using a browser that does not support CSS transitions, it is a good idea to provide fallbacks. For example, you can use JavaScript animations as a fallback for browsers that do not support CSS transitions.

Advanced Topics

  1. Using cubic-bezier functions to define custom easing functions Cubic-BezieBeziertions are a powerful tool for creating custom easing functions in CSS transitions. These functions allow you to define the speed curve of a transition, giving you precise control over how the animation progresses over time.

A cubic-bezier function is defined by four values, which represent the x and y coordinates of two control points on a cubic bezier curve. The first and last points of the curve are fixed at (0, 0) and (1, 1), respectively. By adjusting the position of the two control points, you can create a wide variety of easing functions.

Here are some examples of how to use cubic-bezier functions in CSS transitions:

Example 1: Bounce effect

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: all 2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a cubic-bezier function to create a bounce effect when the width of the div element changes. The transition starts quickly, slows down in the middle, and then speeds up again towards the end.

Example 2: Elastic effect

div {
  width: 100px;
  height: 100px;
  background: red;
  transition: all 2s cubic-bezier(0.7, -0.75, 0.3, 1.75);
}

div:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a cubic-bezier function to create an elastic effect when the width of the div element changes. The transition starts slowly, speeds up in the middle, and then overshoots its target before settling back to its final value.

Example 3: Custom ease-in-out effect

div {
    width:100px;
    height:100px;
    background-color:red;
    transition: all 2s cubic-bezier(0.86,0,0.07,1);
}

div:hover {
    width:300px;
}
Enter fullscreen mode Exit fullscreen mode

In this example we use a cubic-bezier function to create a custom ease-in-out effect when the width of the div element changes. The transition starts slowly and ends slowly with a fast change in between.

These are just a few examples of how you can use cubic-bezier functions to create custom easing functions in CSS transitions. By adjusting the values of the cubic-bezier function, you can create an almost infinite variety of easing effects to suit your needs.

  1. Combining CSS transitions with other CSS techniques, such as transforms and animations

Combining CSS transitions with other CSS techniques, such as transforms and animations, can create truly immersive and engaging web experiences. Transforms allow you to modify an element's position, rotation, scale, and other properties, while transitions enable you to animate those changes smoothly over a specified duration. Here are some examples of how to combine CSS transitions with other CSS techniques:

Example 1: Rotating an element continuously

div {
  width: 100px;
  height: 100px;
  background-color: red;
  animation: rotate 4s linear infinite;
}

@keyframes rotate {
  from {transform: rotate(0deg);}
  to {transform: rotate(360deg);}
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a CSS animation to continuously rotate a div element. The animation property specifies the name of the animation (rotate), the duration of the animation (4s), the timing function (linear), and the number of times the animation should repeat (infinite). The @keyframes rule defines the start and end states of the animation, with the transform property being used to specify the rotation.

Example 2: Creating a hover effect with a 3D perspective

div {
    width:200px;
    height:200px;
    margin:50px;
    background-color:red;
    transition: transform 1s;
    transform-style: preserve-3d;
}

div:hover {
    transform: perspective(500px) rotateY(180deg);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a CSS transition to create a hover effect with a 3D perspective. When the user hovers over the div element, it rotates around its Y-axis, giving the impression of a 3D flip. The transition property specifies that the transform property should be animated over a duration of 1s. The transform-style property is set to preserve-3d to enable 3D transformations. On hover, the transform property is updated to specify a perspective and a rotation.

Example 3: Creating a card flip animation

.container {
    width:200px;
    height:260px;
    position:relative;
    border:1px solid #ccc;
    perspective:800px;
}

.card {
    width:100%;
    height:100%;
    position:absolute;
    transform-style:preserve-3d;
    transition:transform 1s;
}

.card:hover {
    transform:rotateY(180deg);
}

.front,.back {
    width:100%;
    height:100%;
    position:absolute;
    backface-visibility:hidden;
}

.front {
    background-color:red;
}

.back {
    background-color:green;
    transform:rotateY(180deg);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a CSS transition to create a card flip animation. The .container element has a perspective property set to give the impression of depth. The .card element has a transition property set to animate changes to the transform property over a duration of 1s. The .front and .back elements represent the front and back of the card, respectively. When the user hovers over the .card element, its transform property is updated to rotate it around its Y-axis, giving the impression of a card flip.

Here are some more examples of combining CSS transitions with other CSS techniques:

Example 4: Creating a smooth scrolling effect

html {
  scroll-behavior: smooth;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use the scroll-behavior property to create a smooth scrolling effect when the user clicks on an anchor link. The scroll-behavior property specifies whether the scrolling should be smooth or instant. By setting the value to smooth, the browser will automatically animate the scrolling when the user clicks on an anchor link.

Example 5: Creating a fade-in effect

.fade {
  opacity: 0;
  transition: opacity 2s;
}

.fade:hover {
  opacity: 1;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a CSS transition to create a fade-in effect when the user hovers over an element. The transition property specifies that changes to the opacity property should be animated over a duration of 2s. When the user hovers over the element, its opacity is updated from 0 to 1, creating a smooth fade-in effect.

Example 6: Creating a slide-in effect

.slide {
  position: relative;
  left: -300px;
  transition: left 2s;
}

.slide:hover {
  left: 0;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use a CSS transition to create a slide-in effect when the user hovers over an element. The transition property specifies that changes to the left property should be animated over a duration of 2s. When the user hovers over the element, its left property is updated from -300px to 0, creating a smooth slide-in effect.

Summary of key points

  • CSS transitions provide a way to control animation speed when changing CSS properties.
  • The transition is the combination of four properties: transition-property, transition-duration, transition-timing-function, and transition-delay.
  • You can create a wide variety of transition effects by combining these properties in different ways.
  • CSS transitions are widely supported in modern browsers, but you may need to use vendor prefixes to ensure cross-browser compatibility.
  • You can combine CSS transitions with other CSS techniques, such as transforms and animations, to create truly immersive and engaging web experiences.

Links to further resources for learning about CSS transitions

(1) Using CSS transitions - CSS: Cascading Style Sheets | MDN - MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions.
(2) CSS Transitions - W3Schools. https://www.w3schools.com/css/css3_transitions.asp.
(3) CSS transitions - CSS: Cascading Style Sheets | MDN - MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions.
(4) CSS Transitions and Transforms for Beginners - thoughtbot. https://thoughtbot.com/blog/transitions-and-transforms.
(5) transition - CSS: Cascading Style Sheets | MDN - MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/CSS/transition.
(6) CSS Transition Property | How does Transition Property Work in CSS - EDUCBA. https://www.educba.com/css-transition-property/.
(7) CSS Transitions - GeeksforGeeks. https://www.geeksforgeeks.org/css-transitions/.
(8) CSS Transition: Cheat Sheet & Examples for 2023 - CatsWhoCode. https://catswhocode.com/css-transition/.

Top comments (0)