DEMOs

导航页
.emoji-toggles {
  $togglesHeight: torem(20px);

  position: relative;
  width: torem(60px);
  margin: $togglesHeight torem(60px);

  .well {
    display: block;
    height: $togglesHeight;
    background-color: var(--bg);
    border-radius: torem(10px);
    cursor: pointer;
  }

  .toggle {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    background-color: transparent;
    border: 0;
    margin: 0;
    opacity: 0;
    z-index: 100;
    cursor: pointer;

    ~ .emoji::before {
      content: '';
      position: absolute;
      left: 0;
      top: 0;
      font-size: torem(40px);
      line-height: $togglesHeight;
      transition: 0.2s;
    }

    &:checked {
      ~ .emoji::before {
        content: '';
        left: 100%;
        margin-left: -1em;
      }
    }

    ~ .well {
      white-space: nowrap;

      &::before {
        position: absolute;
        top: 0;
        right: 100%;
        margin-right: torem(5px);
      }

      &::after {
        position: absolute;
        top: 0;
        left: 100%;
        margin-left: torem(5px);
      }
    }
  }
}

@mixin emojiType($leftEmoji, $rightEmoji, $leftLabel, $rightLabel) {
  .toggle {
    ~ .emoji::before {
      content: $leftEmoji;
    }

    &:checked {
      ~ .emoji::before {
        content: $rightEmoji;
      }
    }

    ~ .well {
      &::before {
        content: $leftLabel;
      }

      &::after {
        content: $rightLabel;
      }
    }
  }
}

.emoji-monkey {
  @include emojiType('\01F638', '\01F63F', 'Happy', 'Sad');
}