Hover underline animation
CSS, Animation, Intermediate

Creates an animated underline effect when the text is hovered over.

  • display: inline-block makes the block p an inline-block to prevent the underline from spanning the entire parent width rather than just the content (text).
  • position: relative on the element establishes a Cartesian positioning context for pseudo-elements.
  • :after defines a pseudo-element.
  • position: absolute takes the pseudo element out of the flow of the document and positions it in relation to the parent.
  • width: 100% ensures the pseudo-element spans the entire width of the text block.
  • transform: scaleX(0) initially scales the pseudo element to 0 so it has no width and is not visible.
  • bottom: 0 and left: 0 position it to the bottom left of the block.
  • transition: transform 0.25s ease-out means changes to transform will be transitioned over 0.25 seconds with an ease-out timing function.
  • transform-origin: bottom right means the transform anchor point is positioned at the bottom right of the block.
  • :hover:after then uses scaleX(1) to transition the width to 100%, then changes the transform-origin to bottom left so that the anchor point is reversed, allowing it transition out in the other direction when hovered off.
<p class="hover-underline-animation">Hover this text to see the effect!</p>
.hover-underline-animation {
                                                                    display: inline-block;
                                                                    position: relative;
                                                                    color: #0087ca;
                                                                  }
                                                                  
                                                                  .hover-underline-animation:after {
                                                                    content: '';
                                                                    position: absolute;
                                                                    width: 100%;
                                                                    transform: scaleX(0);
                                                                    height: 2px;
                                                                    bottom: 0;
                                                                    left: 0;
                                                                    background-color: #0087ca;
                                                                    transform-origin: bottom right;
                                                                    transition: transform 0.25s ease-out;
                                                                  }
                                                                  
                                                                  .hover-underline-animation:hover:after {
                                                                    transform: scaleX(1);
                                                                    transform-origin: bottom left;
                                                                  }

Ⓒ Repository by Code Honchos