sparkletown/sparkle

View on GitHub
src/components/molecules/NavBar/NavBar.scss

Summary

Maintainability
Test Coverage
@import "scss/constants.scss";

$photobooth-button-margin: 140px 0px 0px;
$photobooth-button-text-margin: 38px 0px 0px;
$photobooth-button-background-size: 35px;
$nav-bar-title-width: 120px;

.navbar-links-user-avatar {
  cursor: pointer;
}

.navbar-container {
  background: $content--under;
  display: flex;
  justify-content: space-between;
  align-items: center;

  .logout-span {
    cursor: pointer;
  }

  .tickets-icon,
  .private-chat-icon {
    position: relative;
    cursor: pointer;
  }

  .notification-card {
    background: var(--danger--under);
    color: $content--over;
    position: absolute;
    bottom: 0;
    right: 0;
    padding: 2px;
    border-radius: 50%;
    width: 20px;
    height: 20px;
    font-size: 10px;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .icons-container {
    display: flex;
    align-items: center;
  }

  .button-container {
    .about-button {
      border: 2px solid #ebebeb;
      border-radius: 2em;
      margin-left: 1em;
      margin-right: -1em;
      padding: 0.2em 1em;
      text-transform: uppercase;
      text-decoration: none;
      font-weight: 700;
      letter-spacing: 1.5px;
      vertical-align: middle;
      transition: all 0.2s ease-in-out;

      &:hover {
        background: #ebebeb;
        color: $secondary--live;
      }
    }
  }

  .counter {
    margin-right: 1em;
  }
}

.navbar {
  display: flex;
  height: $navbar-height;
  padding: 0 15px;
  background-color: $secondary--live;

  #sound-cloud-player {
    border: none;
  }
}

.custom-dialog {
  width: 700px;
  max-width: none !important;
}

.nav-logos {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 100%;
}

.nav-location-title {
  display: flex;
  width: $nav-bar-title-width;
  border-left: $border-width--slim solid $lighter-intermediate-grey;
  border-right: $border-width--slim solid $lighter-intermediate-grey;
  height: 100%;
  justify-content: center;
  align-items: center;
  margin-right: $spacing--sm;
}

.nav-sparkle-logo,
.nav-sparkle-logo_small {
  position: relative;
  margin-right: 12px;

  &:hover {
    width: 120px;
  }

  &.nav-sparkle-logo_small {
    display: none;
  }

  div {
    position: relative;
    display: block;
    width: 25px;
    height: 35px;
    background-image: url(/assets/icons/sparkle-nav-logo.png);
    background-size: 25px 35px;

    &:before {
      position: absolute;
      content: "";
      opacity: 0;
      pointer-events: none;
      left: 22px;
      width: 108px;
      height: 35px;
      background-image: url(/assets/icons/sparkle-nav-logo-text.png);
      background-size: 108px 35px;
      transform: translateX(-40px) scale(0.75);
      transition: opacity 200ms, transform 400ms $transition-function;
    }

    @keyframes sparklelogoanimate {
      100% {
        background-position: -75px;
      }
    }

    &:hover {
      opacity: 1;
      background-image: url(/assets/icons/sparkle-nav-logo-animate.png);
      background-size: 75px 35px;
      background-position: 0 0;
      animation: sparklelogoanimate 0.4s steps(3) infinite;

      &:before {
        opacity: 1;
        pointer-events: all;
        transform: translateX(0px) scale(1);
      }
    }

    &:active {
      opacity: 0.7;
    }
  }
}

.nav-party-logo {
  position: relative;
  background-color: opaque-white(0.08);
  height: 60px;
  padding: 0 50px 0 20px;
  text-align: center;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  transition: transform 400ms $transition-function;
  border: none;
  appearance: none;
  color: $content--over;

  img {
    height: 40px;
  }

  &:hover,
  &:focus {
    border: none;
    background-color: opaque-white(0.14);

    &:after {
      opacity: 0.7;
    }
  }

  &:after {
    content: "";
    position: absolute;
    right: 20px;
    top: 20px;
    height: 20px;
    width: 20px;
    background-image: url(/assets/icons/nav-party-logo-icon.png);
    background-size: 20px;
    opacity: 0.4;
    transform: rotate(0deg);
    transition: transform 400ms $transition-function;
  }

  &.clicked {
    &:after {
      transform: rotate(180deg);
    }
  }

  &.slide {
    transform: translateX(110px);
  }
}

.schedule-text {
  background-color: $accent--under;
  border-radius: 10px;
  margin-left: 8px;
  padding: 0px 10px;
  display: inline-block;
  text-shadow: 0 2px 3px rgb(0 0 0 / 35%);
}

.schedule-dropdown-backdrop {
  position: fixed;
  left: 0;
  top: 0;
  z-index: z(navbar-schedule-backdrop);
  width: 100%;
  height: 100%;
  cursor: pointer;
  transition: opacity 600ms $transition-function,
    transform 600ms $transition-function;
  opacity: 0;
  pointer-events: none;

  &.show {
    opacity: 1;
    pointer-events: all;
  }
}

@media (max-width: $media-breakpoint--md) {
  .schedule-text {
    display: none;
  }
}

@media (max-width: 900px) {
  .nav-search-links {
    display: none;
  }
}

.NavBar {
  &__home-icon {
    cursor: pointer;
    font-size: 24px;
    color: $content--over;

    margin-right: $spacing--md;

    &:hover {
      font-size: 27px;
      margin-right: $spacing--sm;
    }
  }

  &__profile-popover {
    height: 100%;
  }

  &__photobooth-button {
    position: absolute;
    top: 130px;
    left: -($spacing--lg);
    border-radius: 0px $border-radius--md $border-radius--md 0px;
    padding: $spacing--xs $spacing--md;
    cursor: pointer;
    background-color: $lighter-intermediate-grey;
    background-image: url(/assets/icons/photobooth-icon.png);
    background-size: $photobooth-button-background-size;
    background-position: 50% 10%;
    background-repeat: no-repeat;

    &:hover {
      background-color: $light-grey;
    }
  }

  &__photobooth-title {
    text-decoration: none;
    margin: $photobooth-button-text-margin;
    font-size: $font-size--sm;
  }

  @media (max-width: $media-breakpoint--sm) {
    .NavSearchBar {
      display: none;
    }
  }

  @media (max-width: $media-breakpoint--md) {
    .VenuePartygoers {
      display: none;
    }
  }
}