Awesome Hover the text...
Forked from Tiffany Rayside's Pen Bubbly....
Awesome Hover the text...
Forked from Tiffany Rayside's Pen Bubbly....
<svg class="overlay text" viewBox="0 0 900 300"> | |
<symbol id="main"> | |
<text text-anchor="middle" x="50%" y="50%" dy="0.25em" class="txt">BUBBLY</text> | |
</symbol> | |
<mask id="msk" maskunits="userSpaceOnUse" maskcontentunits="userSpaceOnUse"> | |
<rect width="100%" height="100%" class="wrap"> | |
</rect> | |
<use xlink:href="#main" class="mtxt"></use> | |
</mask> | |
</svg> | |
<section> | |
<h4>⇩ Hover ⇩</h4> | |
<h1 href="#"> | |
<div class="fill"> | |
<canvas id="canv" style=background: hsla(350, 95%, 5%, 1);> | |
</canvas> | |
</div> | |
<svg viewBox="0 0 100% 100%" class="inv"> | |
<rect width="100%" height="100%" mask="url(#msk)" | |
class="rect" /> | |
<use xlink:href="#main" class="clear"></use> | |
</svg> | |
</h1> | |
</section> |
/* | |
This is my Cherry Fizz pen: | |
http://codepen.io/tmrDevelops/pen/mJELXj | |
*/ | |
var c = document.getElementById('canv'); | |
var $ = c.getContext('2d'); | |
var w = c.width = 900; | |
var h = c.height = 300; | |
var num = 425, | |
rad = 20; | |
var s = [20, 15, 10, 5, 3]; | |
function _S() { | |
var curr = s.length; | |
var cur_ = Math.floor(Math.random() * curr); | |
return s[cur_]; | |
} | |
function FizzBuzz(c) { | |
this.c = c; | |
this.$ = c.getContext('2d'); | |
this.b = {}; | |
this.go(); | |
} | |
FizzBuzz.prototype.go = function() { | |
this.x = this.b.x = Math.random() * (this.c.width - rad); | |
this.y = this.b.y = Math.random() * (this.c.width - rad); | |
this.radi = _S(); | |
this.xPos = Math.random() * 9; | |
this.draw(); | |
}; | |
FizzBuzz.prototype.draw = function() { | |
this.$.globalCompositeOperation = 'source-over'; | |
this.$.fillStyle = "hsla(350, 90%, 40%, 1)"; | |
this.$.globalCompositeOperation = 'lighter'; | |
this.$.save(); | |
this.$.beginPath(); | |
this.$.arc(this.x, this.y, this.radi, 0, Math.PI * 2, false); | |
this.$.fill(); | |
this.$.restore(); | |
}; | |
FizzBuzz.prototype.disp = function() { | |
this.x = (Math.sin(this.xPos -= 0.35) * this.radi * 0.16 + 6) + this.b.x; | |
this.y -= this.radi * 0.33; | |
if (this.y <= -100) { | |
this.y = this.c.height + rad; | |
} | |
this.draw(); | |
}; | |
function Fizz(c) { | |
this.c = c; | |
this.$ = c.getContext('2d'); | |
this.arr = []; | |
} | |
Fizz.prototype.add = function(buzz) { | |
this.arr.push(buzz); | |
}; | |
Fizz.prototype.upd = function() { | |
this.$.clearRect(0, 0, this.c.width, this.c.height); | |
for (var i in this.arr) { | |
this.arr[i].disp(); | |
} | |
}; | |
window.addEventListener('resize', function() { | |
c.width = w = 900; | |
c.height = h = 300; | |
}); | |
var fb = new Fizz(c); | |
for (var i = 0, u = num; i < u; i++) { | |
var buzz = new FizzBuzz(c); | |
fb.add(buzz); | |
} | |
_t(); | |
function _t() { | |
fb.upd(); | |
window.requestAnimationFrame(_t); | |
} |
@import url(https://fonts.googleapis.com/css?family=Fascinate); | |
* { box-sizing: border-box; } | |
html, body { | |
background: hsla(350, 95%, 5%, 1); | |
width:100%; | |
min-height:100%; | |
font-weight: bold; | |
font-size: 1em; | |
display:flex; | |
justify-content:center; | |
flex-direction:column; | |
font-family: 'Fascinate', cursive; | |
user-select:none; | |
} | |
.text .wrap { | |
fill: #FFF; | |
} | |
.overlay { | |
height: 0; | |
width: 0; | |
overflow: hidden; | |
position: absolute; | |
& .txt { | |
font-size: 16rem; | |
text-transform: uppercase; | |
font-weight: 900; | |
letter-spacing:-2.5rem; | |
} | |
} | |
section{ | |
align-self:center; | |
& h4{ | |
text-align:center; | |
color:hsla(350, 95%, 50%, 1); | |
font-size:1.5rem; | |
} | |
} | |
h1{ | |
position: relative; | |
font-size: 8em; | |
font-weight:bold; | |
line-height: 1; | |
display: inline-block; | |
width: 900px; | |
height: 300px; | |
transition:all .2s ease; | |
text-shadow: 0 -3px 0 hsla(350, 95%, 50%, 1), | |
0 6px 8px hsla(350, 95%, 5%, .55), | |
0 9px 10px hsla(350, 95%, 5%, .25), | |
0 30px 10px hsla(350, 95%, 5%, .15), | |
0 15px 10px hsla(350, 95%, 5%, .31); | |
&:hover { | |
color: #fff; | |
} | |
& .fill { | |
position: relative; | |
width: 100%; | |
height: 100%; | |
overflow: hidden; | |
} | |
& .inv { | |
position: absolute; | |
width: 900px; | |
height: 300px; | |
top: 0; | |
left: 0; | |
} | |
& .rect { | |
fill:hsla(350, 95%, 5%, 1); | |
} | |
& .clear { | |
stroke-width:1; | |
fill:hsla(350, 95%, 15%, .95); | |
transition: fill 0.3s ease; | |
&:hover{ | |
fill: transparent; | |
text-shadow: 0 -3px 0 hsla(350, 95%, 50%, .95), | |
0 6px 8px hsla(350, 95%, 0%, .55), | |
0 9px 10px hsla(350, 95%, 0%, .25), | |
0 30px 10px hsla(350, 95%, 5%, .15), | |
0 15px 10px hsla(350, 95%, 5%, .31); | |
stroke:hsla(350, 95%,12%, .95); | |
stroke-width:3; | |
} | |
} | |
} | |
@media (max-width:800px){ | |
.overlay{ | |
& .txt { | |
font-size: 14rem; | |
letter-spacing:-2rem; | |
} | |
} | |
} | |
@media (max-width:620px){ | |
.overlay{ | |
& .txt { | |
font-size: 12rem; | |
letter-spacing:-1.5rem; | |
} | |
} | |
} | |
@media (max-width:500px){ | |
.overlay{ | |
& .txt { | |
font-size: 10rem; | |
letter-spacing:-1rem; | |
} | |
} | |
} |