added alt idea of doing typing text from Kevin Powell

This commit is contained in:
Robert McGovern 2022-04-01 03:38:55 +01:00
parent 68dbbf3229
commit a42a248f29
2 changed files with 180 additions and 0 deletions

View File

@ -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>

View File

@ -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;
}