added alt idea of doing typing text from Kevin Powell
This commit is contained in:
parent
68dbbf3229
commit
a42a248f29
|
@ -0,0 +1,27 @@
|
||||||
|
<!-- A big thank you to Prantham for the inspiration: https://twitter.com/Prathkum/status/1392434632935841793
|
||||||
|
|
||||||
|
This is from Kevin Powell. Its an interesting idea. I'd prefer
|
||||||
|
the animation to end when you get to the end of the line.
|
||||||
|
|
||||||
|
Video is called Customizable typewriter animation with CSS [w1nhwUGsG6M]
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Document</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Hello, my name is Kevin.</h1>
|
||||||
|
<p class="subtitle">Welcome to my website!</p>
|
||||||
|
|
||||||
|
<a href="https://www.youtube.com/watch?v=w1nhwUGsG6M" id="yt-link">See how Kevin created this over on YT</a>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,153 @@
|
||||||
|
:root {
|
||||||
|
--bg-color: hsl(49 37% 94%);
|
||||||
|
--typewriterSpeed: 6s;
|
||||||
|
/* this is a pure HTML/CSS approach. If you want it to
|
||||||
|
be more dynamic then you would need JavaScript to grab
|
||||||
|
the H1 calculate its size and then have it update this
|
||||||
|
variable
|
||||||
|
|
||||||
|
You would need to use querySelector to grab the :root
|
||||||
|
and put it in a variable, then use that variable (say r)
|
||||||
|
and do r.style.setProperty('--typewriterCharacters', h1.length)
|
||||||
|
assuming you've grabbed the h1
|
||||||
|
*/
|
||||||
|
--typewriterCharacters: 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Source Sans Pro", sans-serif;
|
||||||
|
min-height: 100vh;
|
||||||
|
display: grid;
|
||||||
|
place-content: center;
|
||||||
|
text-align: center;
|
||||||
|
background: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
/* for increasing and decreasing the font size depending on
|
||||||
|
device size */
|
||||||
|
font-size: clamp(1rem, 3vw + 1rem, 4rem);
|
||||||
|
position: relative;
|
||||||
|
/* MUST BE A MONOSPACE FONT or the idea collapses per Kevin */
|
||||||
|
font-family: "Source Code Pro", monospace;
|
||||||
|
/* position: relative; */
|
||||||
|
width: -webkit-max-content;
|
||||||
|
width: -moz-max-content;
|
||||||
|
width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
color: hsl(0 0% 0% / 0.7);
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 400;
|
||||||
|
/* Below makes the subtitle appear to fade onto the page */
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(3rem);
|
||||||
|
animation: fadeInUp 2s ease calc(var(--typewriterSpeed) + 0.5s) forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1::before,
|
||||||
|
h1::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1::before {
|
||||||
|
/* a mask font color, needs to be the same color as the page
|
||||||
|
or container background color */
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
/* the number of steps is equal to the number of characters
|
||||||
|
that the h1 is. However in CSS you can see length of h1 so
|
||||||
|
you need to do this manually. */
|
||||||
|
animation: typewriting var(--typewriterSpeed)
|
||||||
|
steps(var(--typewriterCharacters)) 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1::after {
|
||||||
|
/* em so it can respond to font size change */
|
||||||
|
width: 0.125em;
|
||||||
|
background: black;
|
||||||
|
/* the number of steps is equal to the number of characters
|
||||||
|
that the h1 is. However in CSS you can see length of h1 so
|
||||||
|
you need to do this manually. */
|
||||||
|
animation: typewriting var(--typewriterSpeed)
|
||||||
|
steps(var(--typewriterCharacters)) 1s forwards,
|
||||||
|
blink 500ms steps(var(--typewriterCharacters)) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriting {
|
||||||
|
to {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeInUp {
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
h1::before {
|
||||||
|
background: var(--bg-color);
|
||||||
|
-webkit-animation: typewriter var(--typewriterSpeed) steps(var(--typewriterCharacters)) 1s forwards;
|
||||||
|
animation: typewriter var(--typewriterSpeed) steps(var(--typewriterCharacters)) 1s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1::after {
|
||||||
|
width: 0.125em;
|
||||||
|
background: black;
|
||||||
|
-webkit-animation: typewriter var(--typewriterSpeed) steps(var(--typewriterCharacters)) 1s forwards, blink 750ms steps(var(--typewriterCharacters)) infinite;
|
||||||
|
animation: typewriter var(--typewriterSpeed) steps(var(--typewriterCharacters)) 1s forwards, blink 750ms steps(var(--typewriterCharacters)) infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
color: rgba(0, 0, 0, 0.7);
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 400;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(3rem);
|
||||||
|
-webkit-animation: fadeInUp 2s ease calc(var(--typewriterSpeed) + 2s) forwards;
|
||||||
|
animation: fadeInUp 2s ease calc(var(--typewriterSpeed) + 2s) forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes typewriter {
|
||||||
|
to {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes blink {
|
||||||
|
to {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes fadeInUp {
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
#yt-link {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 2em;
|
||||||
|
width: 100%;
|
||||||
|
color: rgba(0, 0, 0, 0.7);
|
||||||
|
}
|
||||||
|
#yt-link:hover,
|
||||||
|
#yt-link:focus {
|
||||||
|
color: teal;
|
||||||
|
}
|
Loading…
Reference in New Issue