CSS Смещение элементов с position:absolute и position: sticky;

Есть вот такой пример Timeline элементов

.timeline-wrapper {
  position: relative;
}

.timeline-line-animation {
  position: absolute;
  top: 0;
  left: 50%;
  width: 4px;
  height: 100%;
  transform-origin: top;
  transform: scaleY(1);
  will-change: transform;
  z-index: 1;
  background-color: #f00;
}

.timeline-line-animation-green {
  background-color: #0f0;
}

.timeline img {
  border: 0;
  max-width: 100%;
}

.timeline {
  list-style: none;
  position: relative;
  padding: 0;
}

.timeline:before {
  position: absolute;
  content: "";
  top: 0;
  bottom: 0;
  width: 4px;
  left: 50%;
}

.timeline-panel {
  width: 50%;

  border: 1px solid #f6f6f8;
  padding: 15px;
  position: relative;
  border-radius: 5px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
}

.timeline-item {
  position: relative;
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: 10px;
  justify-content: center;
}

.timeline-item:not(:first-child) {
  margin-top: 40px;
}

li.timeline-left {
  flex-direction: row-reverse;
}

.timeline-side strong {
  font-weight: 600;
}

.timeline-side p:not(:last-child) {
  margin-bottom: 10px;
}

.tl-desc-short strong {
  font-weight: bold;
}

.tl-circ {
  position: absolute;
  top: 0;
  left: calc(50% - 11px);
  align-self: self-start;
  transition: background 0.2s;
  min-width: 26px;
  height: 26px;
  border-radius: 50%;
  background-color: #f00;
  z-index: 1;
}

.is-stuck .tl-circ {
  transition: background 0.2s;
}

.tl-trigger {
  position: absolute;
  top: 50vh;
  height: 1px;
  width: 100%;
  pointer-events: none;
}

.timeline-side {
  width: 50%;
  line-height: 1.3em;
  text-align: center;
}

.timeline-side p {
  margin-top: 0;
  margin-bottom: 0;
}

.timeline-side .min {
  font-size: 12px;
}

.tl-body p,
.tl-body ul {
  margin-bottom: 0;
}

.tl-body>p+p {
  margin-top: 5px;
}

.timeline .timeline_pic {
  position: relative;
  padding: 0;
}

.tl-title {
  margin: 0;
}

.tl-content p {
  margin-bottom: 5px;
}

@media (min-width: 701px) {
  /*.timeline-side {*/
  /*    position: sticky;*/
  /*    top: 0;*/
  /*}*/

  .timeline-inverted .timeline-panel {
    margin-left: 60px;
  }

  .timeline-left .timeline-panel {
    margin-right: 60px;
  }

  .timeline-animation-marker .tl-circ {
    position: sticky;
  }

  .elementor-widget-container .timeline-item:nth-child(2n) .tl-circ {
    left: calc(50% - 11px);
  }

  .timeline-animation-marker .timeline-panel {
    width: calc(50% + 2px);
    margin: 0;
  }
}

@media (max-width: 700px) {
  .timeline-item {
    flex-wrap: wrap;
    gap: 20px;
  }

  .tl-title,
  .timeline-side p {
    text-align: left;
  }

  .tl-circ {
    transform: none;
    left: 8px;
  }

  .timeline-line-animation {
    left: 20px;
  }

  .timeline:before {
    left: 20px;
    margin-left: 0;
  }

  .timeline-panel,
  .timeline-side {
    width: calc(100% - 60px);
    margin-left: 35px;
  }

  .timeline-item>.timeline-panel:before {
    border-left-width: 0;
    border-right-width: 15px;
    left: -15px;
    right: auto;
  }

  .timeline-item>.timeline-panel:after {
    border-left-width: 0;
    border-right-width: 14px;
    left: -14px;
    right: auto;
  }
}
<div class="wp-block-za-timeline-full-widget timeline-wrapper " style="--timeline-color:#F6F6F8;--timeline-color-animation:#F37321">
  <div class="timeline-line-animation timeline-line-animation-green"></div>
  <ul class="timeline-animation-marker timeline">
    <li class="wp-block-za-timeline-item timeline-item timeline-left is-stuck">
      <div class="timeline-side">
        <p class="t-text-align-left">ываыва ываываыва</p>
      </div>
      <div class="tl-trigger"></div>
      <div class="tl-circ"></div>
      <div class="timeline-panel">
        <div class="tl-content">
          <div class="tl-desc">
            <h3 class="t-text-align-left tl-title">Timeline Item #1</h3>
            <div class="tl-desc-short">
              <p>ываыв аыва ыва ыва</p>
            </div>
          </div>
        </div>
      </div>
    </li>

    <li class="wp-block-za-timeline-item timeline-item timeline-inverted is-stuck">
      <div class="timeline-side">
        <p class="t-text-align-left">ываыва ыва ыва</p>
      </div>
      <div class="tl-trigger"></div>
      <div class="tl-circ"></div>
      <div class="timeline-panel">
        <div class="tl-content">
          <div class="tl-desc">
            <h3 class="t-text-align-left tl-title">Timeline Item #2</h3>
            <div class="tl-desc-short">
              <p>ыва ыва ыва ыва ываы ваыва</p>
            </div>
          </div>
        </div>
      </div>
    </li>

    <li class="wp-block-za-timeline-item timeline-item timeline-left is-stuck">
      <div class="timeline-side">
        <p class="t-text-align-left"></p>
      </div>
      <div class="tl-trigger"></div>
      <div class="tl-circ"></div>
      <div class="timeline-panel">
        <div class="tl-content">
          <div class="tl-desc">
            <h3 class="t-text-align-left tl-title"></h3>
            <div class="tl-desc-short"></div>
          </div>
        </div>
      </div>
    </li>
  </ul>
</div>

<div class="wp-block-za-timeline-full-widget timeline-wrapper" style="--timeline-color:#F6F6F8;--timeline-color-animation:#F37321">
  <div class="timeline-line-animation"></div>
  <ul class="timeline">
    <li class="wp-block-za-timeline-item timeline-item timeline-left is-stuck">
      <div class="timeline-side">
        <p class="t-text-align-left"></p>
      </div>
      <div class="tl-trigger"></div>
      <div class="tl-circ"></div>
      <div class="timeline-panel">
        <div class="tl-content">
          <div class="tl-desc">
            <h3 class="t-text-align-left tl-title">
              Timeline Item #1 bez Marker
            </h3>
            <div class="tl-desc-short"></div>
          </div>
        </div>
      </div>
    </li>

    <li class="wp-block-za-timeline-item timeline-item timeline-inverted is-stuck">
      <div class="timeline-side">
        <p class="t-text-align-left"></p>
      </div>
      <div class="tl-trigger"></div>
      <div class="tl-circ"></div>
      <div class="timeline-panel">
        <div class="tl-content">
          <div class="tl-desc">
            <h3 class="t-text-align-left tl-title">Timeline Item #2</h3>
            <div class="tl-desc-short"></div>
          </div>
        </div>
      </div>
    </li>
  </ul>
</div>

Оба компонента взяты из плагина и отличаються по сути наличием класса timeline-animation-marker который в первом случае меняет значения позиционирования .timeline-animation-marker .tl-circ {position: sticky;} для кругов а во втором - нет. Остаеться position:absolute.

Мой вопрос состоит в том, как правильно задать значения для элементов .tl-circ что б они всегда были по центру относительно линии ? * Я не понимаю, почему происходят эти смещения и как их фиксировать? При чем почему-то в зависимости от элементов обберток эти круги могут смещаться в совершенно разные стороны и я не понимаю почему так.


Ответы (0 шт):