Example of how to implement underline effects using Css and JS

Example of how to implement underline effects using Css and JS

This article mainly describes two kinds of underline dynamic effects. The first one is that when hovering, the X-axis expands from the inside to the outside to achieve the animation effect. The second one is automatic display from left to right, or from right to left! !

The main effect is to use pseudo-class tags, hover, and transition to achieve animation effects.

The x-axis expands from inside to outside

The animation of the horizontal line is realized by using the Bezier curve. The specific code is as follows:

ul {
  display: flex;
  padding: 0;
  margin: 0;
  list-style-type: none;
}
ul:hover li:not(:hover) a {
  opacity: 0.2;
}
ul li {
  position: relative;
  padding: 30px 25px 30px 25px;
  cursor: pointer;
}
ul li::after {
  position: absolute;
  content: "";
  top: 100%;
  left: 0;
  width: 100%;
  height: 2px;
  background: #3498db;
  transform: scaleX(0);
  transition: 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
}
ul li:hover::after, ul li.active::after {
  transform: scaleX(1);
}

Left and right horizontal underline animation effect

Mainly use js to determine the position of the mouse when it moves away, and display the animation effect by moving it left and right

The js code is as follows:

document.querySelectorAll('a').forEach(elem => {

  elem.onmouseenter =
  elem.onmouseleave = e => {

    const tolerance = 5;

    const left = 0;
    const right = elem.clientWidth;

    let x = e.pageX - elem.offsetLeft;

    if (x - tolerance < left) x = left;
    if (x + tolerance > right) x = right;

    elem.style.setProperty('--x', `${x}px`);

  };

});

CSS uses pseudo-class tags to implement animation effects
The css code is as follows:

a {
  position: relative;
  font-weight: 600;
  text-decoration: none;
  color: rgba(0, 0, 0, 0.4);
  transition: color .3s ease;
}
a::after {
  --scale: 0;
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  height: 3px;
  background: #4c81c9;
  -webkit-transform: scaleX(var(--scale));
          transform: scaleX(var(--scale));
  -webkit-transform-origin: var(--x) 50%;
          transform-origin: var(--x) 50%;
  transition: -webkit-transform 0.3s cubic-bezier(0.535, 0.05, 0.355, 1);
  transition: transform 0.3s cubic-bezier(0.535, 0.05, 0.355, 1);
  transition: transform 0.3s cubic-bezier(0.535, 0.05, 0.355, 1), -webkit-transform 0.3s cubic-bezier(0.535, 0.05, 0.355, 1);
}
a:hover {
  color: #4c81c9;
}
a:hover::after {
  --scale: 1;
}

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

<<:  Navicat connection MySQL error description analysis

>>:  Analysis of the pros and cons of fixed, fluid, and flexible web page layouts

Recommend

In-depth explanation of MySQL stored procedures (in, out, inout)

1. Introduction It has been supported since versi...

JavaScript flow control (branching)

Table of contents 1. Process Control 2. Sequentia...

How to customize an EventEmitter in node.js

Table of contents Preface 1. What is 2. How to us...

Ubuntu 20.04 sets a static IP address (including different versions)

Because Ubuntu 20.04 manages the network through ...

How to upgrade MySQL 5.6 to 5.7 under Windows

Written in front There are two ways to upgrade My...

How to use ECharts in WeChat Mini Programs using uniapp

Today, we use uniapp to integrate Echarts to disp...

Simple operation of installing vi command in docker container

When using a docker container, sometimes vim is n...

JavaScript Prototype Details

Table of contents 1. Overview 1.1 What is a proto...

Installation and configuration of MySQL 5.7.17 free installation version

MYSQL version: MySQL Community Server 5.7.17, ins...

MySQL 20 high-performance architecture design principles (worth collecting)

Open Source Database Architecture Design Principl...

How to implement responsive layout in vue-cli

When we are doing front-end development, we will ...

Query the data of the day before the current time interval in MySQL

1. Background In actual projects, we will encount...