<link rel="stylesheet"
      href="https://fonts.googleapis.com/css2?family=Fira+Mono:wght@700&family=Fira+Sans:wght@400;500;700&display=swap" />

<header>
  <h1>Justin Bishop</h1>
  <h3>My Periodic Table of Elements</h3>
</header>

<div class="periodic-table">
  <a class="periodic-element personal-info"
     data-description="All about me. 🤓"
     href="about-me.html">
    <div class="periodic-element-inner">
      <div class="title">Ab</div>
      <div class="description">About Me</div>
    </div>
  </a>
  <a class="periodic-element personal-info"
     data-description="My Resume. 😬"
     href="resume.html">
    <div class="periodic-element-inner">
      <div class="title">Rs</div>
      <div class="description">Resume</div>
    </div>
  </a>
  <img class="periodic-element-image"
       src="https://graph.facebook.com/688626964/picture?type=large"
       alt="My profile pic" />
  <div class="empty-space"></div>
  <a class="periodic-element social-media"
     data-description="Facebook. 👨‍👩‍👦"
     href="https://facebook.com/ju">
    <div class="periodic-element-inner">
      <div class="title">Fb</div>
      <div class="description">Facebook</div>
    </div>
  </a>
  <a class="periodic-element personal-info"
     data-description="me@jubishop.com 👋"
     href="mailto:me@jubishop.com">
    <div class="periodic-element-inner">
      <div class="title">Ct</div>
      <div class="description">Contact Me</div>
    </div>
  </a>
  <a class="periodic-element software-projects"
     data-description="My Blog. ✍️"
     href="https://www.artisanalsoftware.com/">
    <div class="periodic-element-inner">
      <div class="title">Ar</div>
      <div class="description">Artisanal</div>
    </div>
  </a>
  <a class="periodic-element software-projects"
     data-description="Discord RL Bot. 🤖"
     href="TuskBot">
    <div class="periodic-element-inner">
      <div class="title">Tb</div>
      <div class="description">TuskBot</div>
    </div>
  </a>
  <a class="periodic-element software-projects"
     data-description="CodePen profile. ✏️"
     href="https://codepen.io/jubishop">
    <div class="periodic-element-inner">
      <div class="title">Cp</div>
      <div class="description">CodePen</div>
    </div>
  </a>
  <a class="periodic-element social-media"
     data-description="My LinkedIn. 👨‍💻"
     href="https://www.linkedin.com/in/jubishop/">
    <div class="periodic-element-inner">
      <div class="title">Li</div>
      <div class="description">LinkedIn</div>
    </div>
  </a>
  <div class="empty-space"></div>
  <a class="periodic-element software-projects"
     data-description="Github profile. 😱"
     href="https://github.com/jubishop">
    <div class="periodic-element-inner">
      <div class="title">Gh</div>
      <div class="description">Github</div>
    </div>
  </a>
  <a class="periodic-element software-projects"
     data-description="LeetCode profile. 🧩"
     href="https://leetcode.com/jubishop/">
    <div class="periodic-element-inner">
      <div class="title">Lc</div>
      <div class="description">LeetCode</div>
    </div>
  </a>
  <a class="periodic-element social-media"
     data-description="Steam account. 🕹"
     href="https://steamcommunity.com/id/jubishop">
    <div class="periodic-element-inner">
      <div class="title">St</div>
      <div class="description">Steam</div>
    </div>
  </a>
  <a class="periodic-element social-media"
     data-description="Reddit profile. 😹"
     href="https://www.reddit.com/user/jubishop">
    <div class="periodic-element-inner">
      <div class="title">Rd</div>
      <div class="description">Reddit</div>
    </div>
  </a>
</div>

<div class="legend">
  <div class="legend-element">
    <span class="legend-marker personal-info"></span>
    <span class="legend-text">Personal Info</span>
  </div>
  <div class="legend-element">
    <span class="legend-marker software-projects"></span>
    <span class="legend-text">Software Projects</span>
  </div>
  <div class="legend-element">
    <span class="legend-marker social-media"></span>
    <span class="legend-text">Social Media</span>
  </div>
</div>
:root {
  --main-bg-color: #111;
  --main-text-color: #eee;
}

body {
  background: var(--main-bg-color);
  color: var(--main-text-color);
  font-family: "Fira Sans", sans-serif;
	white-space: nowrap;
}
a {
  text-decoration: none;
}

h1 {
  font-size: 3em;
  font-weight: 700;
  margin-bottom: 0;
  margin-top: 1em;
}
h3 {
  font-size: 2em;
  font-weight: 500;
  margin-bottom: 1em;
  margin-top: 0.25em;
}
h1, h3 {
  text-align: center;
}

.periodic-table {
  --animation-time: 0.5s;
  --border-radius: 0.5em;
  --cubic-bezier: cubic-bezier(0.25, 0.75, 0.5, 1.5);
  --delay-time: 0.1s;
  --element-border: 0.33em;
  --element-size: 8em;

  display: grid;
  grid-gap: 1em;
  grid-template-columns: repeat(5, var(--element-size));
  grid-template-rows: repeat(3, var(--element-size));
  justify-content: center;
}

.social-media {
  --start-color: #ff616d;
  --end-color: #ffc171;
}
.personal-info {
  --start-color: #37cfdc;
  --end-color: #5a88e5;
}
.software-projects {
  --start-color: #58ac30;
  --end-color: #a7df62;
}
.social-media,
.personal-info,
.software-projects {
  background: linear-gradient(
      to bottom right,
      var(--start-color) 0%,
      var(--end-color) 100%);
}

.periodic-element-image {
  border: var(--element-border) solid #fff;
  height: calc(100% - var(--element-border) * 2);
  transition: all var(--animation-time) ease;
  width: calc(100% - var(--element-border) * 2);
  z-index: 2;
}
@media (hover: hover) {
  .periodic-element-image:hover {
    border: 0.1em solid #fff;
    border-radius: var(--border-radius);
    transform: scale(1.6);
    z-index: 10;
  }
}

.periodic-element {
  padding: var(--element-border);
  position: relative;
  transition: all var(--animation-time) ease;
  z-index: 1;
}
.periodic-element .periodic-element-inner {
  background: var(--main-bg-color);
  height: 100%;
}

.periodic-element .title {
  font: 700 4em "Fira Mono", monospace;
  padding-top: 0.25em;
  text-align: center;
}
.periodic-element .description {
  font-weight: 500;
  padding-top: 0.1em;
  text-align: center;
}
.periodic-element .title,
.periodic-element .description {
  background: -webkit-linear-gradient(var(--start-color), var(--end-color));
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

@media (hover: hover) {
  .periodic-element:hover {
    transform: scale(1.10);
    z-index: 10;
  }
  .periodic-element:hover .periodic-element-inner {
    background: transparent;
  }
  .periodic-element:hover .title,
  .periodic-element:hover .description {
    -webkit-text-fill-color: var(--main-bg-color);
  }

  .periodic-element::after {
    --description: 1em;
    --horizontal-padding: 1em;
    --width: 10em;

    background: var(--main-text-color);
    border: 1px solid var(--main-bg-color);
    border-radius: var(--border-radius);
    color: var(--main-bg-color);
    content: attr(data-description);
    font-size: var(--description);
    height: auto;
    left: calc(((var(--element-size) - var(--width)) / 2) - var(--horizontal-padding));
    opacity: 0;
    padding: 0.5em var(--horizontal-padding);
    pointer-events: none;
    position: absolute;
    text-align: center;
    top: 50%;
    transition: opacity var(--animation-time) ease var(--delay-time),
                top var(--animation-time) var(--cubic-bezier) var(--delay-time);
    width: var(--width);
    z-index: 10;
  }
  .periodic-element:hover::after {
    opacity: 1;
    pointer-events: auto;
    top: 100%;
  }
}

.legend {
  display: inline-flex;
  font-size: 1.5em;
  justify-content: center;
  margin: 1em auto 0;
  text-align: center;
  width: 100%;
}
.legend-element {
  margin: 0 0.75em;
}
.legend-marker {
  --marker-size: 1.5em;

  display: inline-block;
  height: var(--marker-size);
  vertical-align: middle;
  width: var(--marker-size);
}
.legend-text {
  vertical-align: middle;
}

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.