Litmos Lane

by Maxim_Wolf

HTML

<div class="wolf-lane">
<h1 class="wolf-lane__title">
overdue / not compliant
</h1>
  <button class="move move-left" disabled >
    &lt;
  </button>
  <ul class="wolf-list">
    <li class="wolf-list__item" tabindex=0>l1</li>
    <li class="wolf-list__item" tabindex=0>l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 l2 </li>
    <li class="wolf-list__item" tabindex=0>l3</li>
    <li class="wolf-list__item" tabindex=0>l4</li>
    <li class="wolf-list__item" tabindex=0>l5</li>
  </ul>
  <button class="move move-right">
    &gt;
  </button>

</div>

CSS

:root {
  --litmos-scroll-button-size: 2.5em;
  --litmos-lane-border: rgba(0, 0, 0, 0.5);
  --litmos-lane-backbround: rbga(0, 0, 0, 0.3);
}

html {
  scroll-behavior: smooth;
  font-family: sans-serif;
}

.wolf-lane {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  border-radius: 1em;
  background-color: var(--litmos-lane-backbround);
  border-color: var(--litmos-lane-border);
  border-width: 1px;
  border-style: solid;
  margin-left: calc(var(--litmos-scroll-button-size)/2);
  margin-right: calc(var(--litmos-scroll-button-size)/2);
}

.wolf-lane__title {
  grid-column: 1/-1;
  padding-top: calc(var(--litmos-scroll-button-size)/2);
  padding-left: calc(var(--litmos-scroll-button-size)/2);
  margin: 0;
  font-size: 1.2em;
  text-transform: capitalize;
  color: red;

}

.wolf-lane__title:before {
  content: '';
  display: inline-block;
  width: 7px;
  height: 24px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none'%3E%3Cpath d='M0 0.574718L7 0.574707L5.51669 18.5747H1.47896L0 0.574718Z' fill='red'/%3E%3Cpath d='M1 20.5747H6V24.5747H1V20.5747Z' fill='red'/%3E%3C/svg%3E");
}

.wolf-list {
  list-style: none;

  padding: 0;
  display: flex;
  flex-wrap: nowrap;
  overflow-x: scroll;

  justify-content: start;
  gap: 0.5em;
  scrollbar-width: none;

}

.wolf-list::-webkit-scrollbar {
  display: none;
}

.wolf-list::-moz-scrollbar {
  display: none;
}

.wolf-list__item {
  background-color: #336688;
  overflow: hidden;
  min-width: 12em;
  max-width: 12em;
  min-height: 11em;
  color: #ccccFF;
  padding: 0.5em;
  border-radius: 0.5em;
}

.wolf-list__item:focus {
  box-shadow: 0 0 4px red;
}

.move {
  width: var(--litmos-scroll-button-size);
  height: var(--litmos-scroll-button-size);
  border-radius: 50%;
  display: grid;
  justify-items: center;
  align-items: center;
  padding: 0;
  margin: 0;
}

.move.move-left {
  margin-left: calc(-1*var(--litmos-scroll-button-size)/2);
  /*z-index:...

JavaScript

const forseScroll = (left, container) => (e) => {
  const item = container.querySelector('.wolf-list__item');
  const sibling = item.nextElementSibling;
  const size = sibling.getBoundingClientRect().left - item.getBoundingClientRect().left;
  container.scrollBy({
    top: 0,
    left: (left ? -1 : 1) * size,
    behavior: "smooth",
  });
}

const item = document.querySelector('.wolf-list');
const left = document.querySelector('.move-left');
const right = document.querySelector('.move-right');
const handleLeft = forseScroll(true, item);
const handleRight = forseScroll(false, item);

left.addEventListener('click', handleLeft);
right.addEventListener('click', handleRight);