Avatar of Zachary

Zachary Bear

Use any element as border(CSS)

Use mask and mask-composite to create a border effect on any element in CSS

Preview on MDN Playground

<main>
  <div class="masked">
    <div class="glow"></div>
  </div>
</main>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
main {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: black;
}

.masked {
  position: relative;
  width: 100px;
  height: 100px;
  padding: 2px;
  /* border: 1px solid #0000; */
  border-radius: 1rem;

  mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0) border-box;
  mask-composite: exclude;

  .glow {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 200%;
    height: 200%;
    background: conic-gradient(
      from 0deg,
      #fff0,
      #f00,
      #ff0,
      #0f0,
      #0ff,
      #00f,
      #fff0
    );
    transform: translate(-50%, -50%);
    animation: spin 3s linear infinite;
  }
}
@keyframes spin {
  from {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  to {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}