<div class="cartoon hb">
  <div class="hat-triangle"></div>
  <div class="hat-top"></div>
  <div class="hat-lace"></div>
  <div class="hat-bottom back"></div>
  <div class="hair-back ha hb"></div>
  <div class="body"></div>
  <div class="neck"></div>
  <div class="ear r"></div>
  <div class="ear r"></div>
  <div class="face">
    <div class="eyebrow r"></div>
    <div class="eyebrow r"></div>
    <div class="eye ha hb"></div>
    <div class="eye ha hb"></div>
    <div class="nose r"></div>
    <div class="bottom-lip"></div>
    <div class="mouth r ha hb"></div>
    <div class="hair-front r ha"></div>
  </div>
  <div class="hat-bottom front"></div>
  <div class="broom ha"></div>
</div>

<a id="youtube" href="https://www.youtube.com/watch?v=cjt-EK4m3JA" target="_blank">
  <span>See how this video was made</span>
</a>
html, body {
  --bg: #bdb;
  overflow: hidden;
  background: var(--bg);
}

.cartoon {
  position: absolute;
  bottom: 10vmin;
  left: 50%;
  transform: translate(-50%, 0%);
  width: 80vmin;
  height: 80vmin;
}

.cartoon div {
  position: absolute;
  box-sizing: border-box;
}

.b {
  border: 0.5vmin solid;
}

.r {
  border-radius: 100%;
}

.hb::before,
.ha::after {
  content: "";
  display: block;
  position: absolute;
  box-sizing: border-box;
}

/****/
.cartoon {
  --skin: #7c6;
}

.face {
  width: 44%;
  height: 60%;
  border-radius: 100% / 50% 50% 125% 125%;
  background: var(--skin);
  top: 20%;
  left: 50%;
  transform: translate(-50%, 0);
  background: linear-gradient(transparent 16%, var(--skin) 0)
}

.hat-bottom {
  width: 90%;
  height: 12%;
  border-radius: 50%;
  left: 5%;
  top: 31%;
}

.hat-bottom.back {
  border: 0.5vmin solid #222;
  background: #1f1f1f;
}

.hat-bottom.front {
  border-top: 0.5vmin solid #222;
  box-shadow: 0 -1.1vmin 0 1vmin #444;
}

.eye {
  width: 28%;
  height: 19%;
  background: white;
  border-radius: 4% 100% 10% 100%;
  transform: rotate(-30deg);
  top: 34%;
  left: 10%;
  box-shadow: inset 1vmin 1.5vmin, 0.75vmin -1.25vmin 1vmin 1vmin #0803;
}

.eye + .eye {
  transform: scaleX(-1) rotate(-30deg);
  left: auto;
  right: 10%;
}

.eye::before {
  width: 1.5vmin;
  height: 1.5vmin;
  background: #111;
  border-radius: 50%;
  left: 50%;
  top: 50%;
  box-shadow: 0 0 1.5vmin 0.5vmin #fff3, 0 0 0 1.5vmin green, 0 0 0 1.75vmin #262;
}

.eye::after {
  width: 0.75vmin;
  height: 0.75vmin;
  background: white;
  left: 55%;
  top: 45%;
  border-radius: 50%;
  box-shadow: 0.5vmin 0.5vmin 0 -0.125vmin white;
}

.eye + .eye::after {
  box-shadow: -0.5vmin -0.25vmin 0 -0.125vmin white;
}

.eyebrow {
  width: 45%;
  height: 15%;
  top: 30%;
  left: 0%;
  box-shadow: 0.5vmin -1.5vmin 0 -1vmin #111;
  transform: rotate(-5deg);
}

.eyebrow + .eyebrow {
  left: 55%;
  transform: scaleX(-1) rotate(-8deg);
}

.nose {
  width: 18%;
  height: 12%;
  top: 58%;
  left: 50%;
  transform: translate(-50%, 0);
  box-shadow: inset 0 -5vmin 0 -4vmin #0a0, inset 0 -5.25vmin 0 -4vmin #080, 0 -0.5vmin var(--skin), 0 -2vmin 0 -1.25vmin #0807;
  border: 0.5vmin solid transparent;
  border-top: 0.25vmin solid #0807;
}

.mouth {
  width: 37%;
  height: 3%;
  border: 0.25vmin solid transparent;
  border-bottom: 0.5vmin solid #222;
  top: 76%;
  left: 50%;
  transform: translate(-50%, 0) rotate(-4deg);
  background: green;
}

.mouth::before {
  width: 20%;
  height: 250%;
  border: 0.15vmin solid transparent;
  border-right: 0.3vmin solid;
  border-radius: 50%;
  right: -3%;
  top: -20%;
  transform: rotate(-10deg);
}

.bottom-lip {
  width: 39%;
  height: 18%;
  top: 65%;
  left: 30.5%;
  border-radius: 50%;
  background: linear-gradient(transparent 70%, #090 0);
  transform: rotate(-4deg);
}

.neck {
  width: 11%;
  height: 16%;
  background: var(--skin);
  top: 75%;
  left: 50%;
  transform: translate(-50%, 0);
  background-image: linear-gradient(rgba(0,0,0,0.2), transparent 50%);
  border-radius: 100% / 0 0 20% 20%;
}

.hat-top {
  width: 110%;
  height: 70%;
  border-radius: 50%;
  background: #f007;
  top: 19.25%;
  left: 50%;
  transform: translate(-50%, 0);
  background: linear-gradient(#222, #333 21%, transparent 0)
}

.hat-lace {
  width: 48%;
  height: 7%;
  background: purple;
  background-image: linear-gradient(transparent, rgba(0,0,0,0.2));
  left: 26%;
  top: 15.75%;
  transform: skew(2deg);
  clip-path: polygon(3% 0%, 97% 0%, 100% 100%, 0% 100%);
}

.hat-triangle {
  width: 36vmin;
  height: 60vmin;
  box-sizing: border-box;
  bottom: 83%;
  left: 27.5%;
  border-left: 15vmin solid transparent;
  border-right: 19vmin solid transparent;
  border-bottom: 60vmin solid #333;
}

.ear {
  width: 10%;
  height: 25%;
  background: var(--skin);
  transform: rotate(-13deg);
  top: 42%;
  left: 26%;
  box-shadow: inset 0 0 0 10vmin rgba(0,0,0,0.075);
}

.ear + .ear {
  transform: scaleX(-1) rotate(-11deg);
  left: auto;
  right: 26%;
}

.hair {
  width: 150%;
  height: 150%;
  top: 17%;
  left: -25%;
  overflow: hidden;
}

.body {
  width: 70%;
  height: 100%;
  background: #222;
  top: 87.5%;
  left: 50%;
  transform: translate(-50%, 0);
  border-radius: 100% / 40% 40% 120% 120%;
}

.broom {
  width: 10%;
  height: 150%;
  background: #963;
  border-radius: 100% / 3vmin 3vmin 0 0; 
  transform: rotate(10deg);
  top: 50%;
  left: 80%;
  overflow: hidden;
}

.broom::after {
  width: 100%;
  height: 2vmin;
  background: #fff7;
  border-radius: 50%;
}

.hair-front {
  width: 23%;
  height: 12%;
  top: 14%;
  left: 45%;
  transform: translate(-50%,0);
  box-shadow: inset -2.5vmin 0 #111
}

.hair-front::after {
  width: 60%;
  height: 80%;
  border-radius: 50%;
  top: 88%;
  left: 30%;
  box-shadow: inset -1.25vmin 0.5vmin 0 0.25vmin; , inset -1.5vmin -1vmin
}

.hair-back {
  width: 60%;
  height: 100%;
  top: 31%;
  left: 50%;
  transform: translate(-50%, 0);
  overflow: hidden;
}

.hair-back::before {
  width: 40%;
  height: 50%;
  background: #111;
  border-radius: 50%;
  top: -25%;
  left: 5%;
  box-shadow: 
    24vmin 10vmin,
    25vmin 25vmin,
    -2vmin 39vmin, 
    10vmin 39vmin, 
    22.25vmin 48vmin 0vmin 3vmin;
}

.hair-back::after {
  width: 20%;
  height: 40%;
  border-radius: 50%;
  left: -12%;
  transform: rotate(1deg);
  box-shadow: 
    5vmin 0 0 -3vmin, 
    48.125vmin 8.5vmin 0 -2vmin var(--bg);
}



/***/

#youtube {
  z-index: 2;
  display: block;
  width: 100px;
  height: 70px;
  position: absolute;
  bottom: 20px;
  right: 20px;
  background: red;
  border-radius: 50% / 11%;
  transition: transform 0.5s;
}

#youtube:hover,
#youtube:focus {
  transform: scale(1.1);
}

#youtube::before {
  content: "";
  display: block;
  position: absolute;
  top: 7.5%;
  left: -6%;
  width: 112%;
  height: 85%;
  background: red;
  border-radius: 9% / 50%;
}

#youtube::after {
  content: "";
  display: block;
  position: absolute;
  top: 20px;
  left: 40px;
  width: 45px;
  height: 30px;
  border: 15px solid transparent;
  box-sizing: border-box;
  border-left: 30px solid white;
}

#youtube span {
  font-size: 0;
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.