// Animate the size, inside .fill:hover, .fill:focus { box-shadow: inset 0 0 0 2em var(--hover); } // Animate the size, outside .pulse:hover, .pulse:focus { animation: pulse 1s; box-shadow: 0 0 0 2em transparent; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 var(--hover); } } // Stack multiple shadows, one from the left, the other from the right .close:hover, .close:focus { box-shadow: inset -3.5em 0 0 0 var(--hover), inset 3.5em 0 0 0 var(--hover); } // Size can also be negative; see how it's smaller than the element .raise:hover, .raise:focus { box-shadow: 0 0.5em 0.5em -0.4em var(--hover); transform: translateY(-0.25em); } // Animating from the bottom .up:hover, .up:focus { box-shadow: inset 0 -3.25em 0 0 var(--hover); } // And from the left .slide:hover, .slide:focus { box-shadow: inset 6.5em 0 0 0 var(--hover); } // Multiple shadows, one on the outside, another on the inside .offset { box-shadow: 0.3em 0.3em 0 0 var(--color), inset 0.3em 0.3em 0 0 var(--color); &:hover, &:focus { box-shadow: 0 0 0 0 var(--hover), inset 6em 3.5em 0 0 var(--hover); } } //=== Set button colors // If you wonder why use Sass vars or CSS custom properties... // Make a map with the class names and matching colors $colors: ( fill: #a972cb, pulse: #ef6eae, close: #ff7f82, raise: #ffa260, up: #e4cb58, slide: #8fc866, offset: #19bc8b ); // Sass variables compile to a static string; CSS variables are dynamic and inherited // Loop through the map and set CSS custom properties using Sass variables @each $button, $color in $colors { .#{$button} { --color: #{$color}; --hover: #{adjust-hue($color, 45deg)}; } } // Now every button will have different colors as set above. We get to use the same structure, only changing the custom properties. button { color: var(--color); transition: 0.25s; &:hover, &:focus { border-color: var(--hover); color: #fff; } } //=== Pen styling, ignore body { color: #fff; background: hsl(227, 10%, 10%); font: 300 1em 'Fira Sans', sans-serif; // Center everything ever justify-content: center; align-content: center; align-items: center; text-align: center; min-height: 100vh; display: flex; } // Basic button styles button { background: none; border: 2px solid; font: inherit; line-height: 1; margin: 0.5em; padding: 1em 2em; } h1 { font-weight: 400; } code { color: #e4cb58; font: inherit; }