How to create a dynamic shadow using CSS.

Table of contents

You can create a shadow similar to box-shadow but based on the colors of the element itself.

Brief Explanations:

  • position: relative on the element establishes a Cartesian positioning context for psuedo-elements.

  • z-index: 1 establishes a new stacking context.

  • ::after defines a pseudo-element.

  • position: absolute takes the pseudo element out of the flow of the document and positions it in relation to the parent.

  • width: 100% and height: 100% sizes the pseudo-element to fill its parent's dimensions, making it equal in size.

  • background: inherit causes the pseudo-element to inherit the linear gradient specified on the element.

  • top: 0.5rem offsets the pseudo-element down slightly from its parent.

  • filter: blur(0.4rem) will blur the pseudo-element to create the appearance of a shadow underneath.

  • opacity: 0.7 makes the pseudo-element partially transparent.

  • z-index: -1 positions the pseudo-element behind the parent but in front of the background.

Code Sample:

HTML

<div class="dynamic-shadow"></div>

CSS

.dynamic-shadow {
  position: relative;
  width: 10rem;
  height: 10rem;
  background: linear-gradient(75deg, #6d78ff, #00ffb8);
  z-index: 1;
}
.dynamic-shadow::after {
  content: '';
  width: 100%;
  height: 100%;
  position: absolute;
  background: inherit;
  top: 0.5rem;
  filter: blur(0.4rem);
  opacity: 0.7;
  z-index: -1;
}

Happy Coding!