Adding Dynamic Underline Effects to Links with A Simple CSS Technique


In the realm of web development, creating a dynamic and engaging website is essential. One effective way to achieve this is by adding dynamic environments to links and text.

This technique, which involves creating a moving underline effect when hovering over text, is not only visually appealing but also remarkably simple to implement. Commonly seen in navigation sections of websites, this effect is a testament to the power of CSS in enhancing user experience.

Basic Setup in Visual Studio Code

Creating the HTML File

To start, we use Visual Studio Code as our development environment. Our first step is to create an index.html page. Naming the file and saving it as index.html on the left side of the editor sets the foundation.

We then proceed to write our basic HTML codes, including a simple text within the body tags. It’s important to note that the dynamic underline effect is not limited to links; it can be applied to any text or element as desired.

Integrating CSS

The magic of the dynamic effect lies in the CSS code. After setting up our HTML page, we need to link a CSS file. This is done by inserting a reference to style.css between the head tags. If style.css does not exist yet, we create a new page and save it with this name, thus preparing to define our visual styles.

Styling with CSS

Basic Visual Layout

We begin by defining styles for the body tag, focusing on the overall visual layout. The changes made here are instantly reflected on the right side of the editor, allowing for real-time feedback.

Implementing the Underline Effect

The core of our task is to create the moving underline effect. This involves several steps:

  1. Defining the Text Class: In the index.html file, we assign a class (e.g., ‘text’) to our paragraph (<p>) tags. This class is crucial as it links our HTML to the CSS styles we will define.
  2. CSS Before Pseudo-Element: We use the ::before pseudo-element to create the underline effect. Initially, we set its content to empty, position it absolutely, and specify its starting position (left and bottom) and size (width and height). The color of the line is determined by the background-color property.
  3. Animating the Underline: The key aspect here is the width of the underline. Initially, it’s set to zero. When hovering over the text, we change the width to 100%, creating the expanding effect. This is achieved through the :hover::before selector.
  4. Adding Transition for Smoothness: To make the underline’s appearance and disappearance smooth, we use the transition property, targeting the width and defining the duration and ease of the transition.

Customizations and Variations

Positioning and Direction

The underline effect can be easily customized. For instance, changing the position from the bottom to the top of the text, or altering the direction from left-to-right to right-to-left, can be done with simple modifications in the CSS file.

Application Beyond Paragraphs

This technique is not limited to paragraphs; it can be applied to other elements like links (<a> tags). By referencing the desired tag in the CSS file, you can create dynamic underlines for various elements on your website.


This tutorial demonstrates how a few lines of CSS can significantly enhance the aesthetics and interactivity of a website. The underline animation effect is just one example of the vast potential CSS holds for web development.