.underline.outline
.underline.background

a href="http://bennettfeely.com/image-effects" Trump Inaugural Address Generator
a href="http://bennettfeely.com/image-effects" CSS Image Effects
a href="http://bennettfeely.com/scales" CSS Scales
a href="http://saintsoftheweek.com" Saints of the Week
a href="http://bennettfeely.com/clippy" Clippy
a href="http://bennettfeely.com/gradients" Gradients
a href="https://bennettfeely.com/air2048" air2048
a href="http://bennettfeely.com/cssynth" CSSynth
a href="http://bennettfeely.com/image-effects" CSS Creatures
a href="http://bennettfeely.com/flexplorer" Flexplorer
a href="http://bennettfeely.com/filters" Filters Playground
View Compiled
@import url('https://fonts.googleapis.com/css?family=Cabin:400,500');

$duration : .5s;
$bounce : cubic-bezier(.33,1.61,0,.83);

body {
	font: 2em Cabin;
	margin: 1em;
	text-align: center;
	background: seashell;
}

a {
	position: relative;
	display: inline-block;
	padding: .25em;
	text-decoration: none;
	color: mediumblue;
	mix-blend-mode: multiply
}

.underline {
	position: absolute;
	top: 0;
	left: 0;
	width: 1px;
	height: 1px;
	transition: transform $duration $bounce;
	
	&.background {
		background: skyblue;
	}
}

View Compiled
$('a').hover(function(){
	var link = $(this)[0].getBoundingClientRect();

	var x_pos = link.width/2 + link.left;
	var y_pos = link.top + link.height/2;
	
	var translate = 'translate(' + x_pos + 'px,' + y_pos + 'px)';
	var scale = 'scale(' + link.width + ', ' + link.height + ')';
	
	console.log(translate + ' ' + scale);

	$('.underline').css({
		'transform' : translate + ' ' + scale
	});	
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js