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

Setting up shadowsocks+polipo global proxy in Linux environment

1. Install shadowsocks sudo apt-get install pytho...

Front-end JavaScript thoroughly understands function currying

Table of contents 1. What is currying 2. Uses of ...

How to support full Unicode in MySQL/MariaDB

Table of contents Introduction to utf8mb4 UTF8 by...

Basic operation tutorial of files and permissions in centos

Preface Before we begin, we should briefly unders...

Basic knowledge of MySQL database

Table of contents 1. Understanding Databases 1.1 ...

Several ways to switch between Vue Tab and cache pages

Table of contents 1. How to switch 2. Dynamically...

Talking about the practical application of html mailto (email)

As we all know, mailto is a very practical HTML ta...

How to install php7 + nginx environment under centos6.6

This article describes how to install php7 + ngin...

Example of MySQL auto-increment ID exhaustion

Display Definition ID When the auto-increment ID ...

Implementation of Vue 3.x project based on Vite2.x

Creating a Vue 3.x Project npm init @vitejs/app m...

Issues installing Python3 and Pip in ubuntu in Docker

text 1) Download the Ubuntu image docker pull ubu...

Install MySQL 5.7 on Ubuntu 18.04

This article is compiled with reference to the My...