Почему img позиционируется относительно элемента у которого не задан position

У меня есть слайдер, в котором я хочу сделать увеличение картинки при удержании, но картинка позиционируется относительно .slider__line, а не .slider

let body = document.querySelector('body')
let sliderLines = document.querySelectorAll('.slider__line')
let sliderImgs = document.querySelectorAll('.slider img')
let sliderBtns = document.querySelectorAll('.slider__btn')

// --------------------------

// Ширина sliderLine
sliderLines.forEach(el => {
  el.style.width = `${el.children.length * 100}%`
})

// Ширина sliderImgs
sliderImgs.forEach(el => {
  el.style.width = `${getComputedStyle(el.parentNode.parentNode)
    .getPropertyValue('width')}`
})

// Алгоритм работы slider
sliderLines.forEach(el => {
  el.style.transform = 'translateX(0)'
})
body.addEventListener('click', (e) => {
  if (e.target.classList.contains('slider__btnNext')){
    let transform = parseInt((e.target.previousElementSibling.style.transform).replace(/[^\d.]/g, ''))
    let sliderWidth = parseInt(getComputedStyle(e.target.
    parentNode).getPropertyValue('width'))
    if(transform > (e.target.parentNode.firstElementChild.children.length-2)*sliderWidth){
      transform = -sliderWidth
    }

    e.target.previousElementSibling.style.transform = 
    `translateX(-${transform+sliderWidth}px)`
  } else if (e.target.classList.contains('slider__btnPrevious')){
    let transform = parseInt((e.target.previousElementSibling.previousElementSibling.style.transform).replace(/[^\d.]/g, ''))
    let sliderWidth = parseInt(getComputedStyle(e.target.
    parentNode).getPropertyValue('width'))

    if (transform == 0){
      transform = (e.target.parentNode.firstElementChild.children.length)*sliderWidth
    }

    e.target.previousElementSibling.previousElementSibling.style.transform = 
    `translateX(-${transform-sliderWidth}px)`
  }
})

// ---------------------------------

body.addEventListener('mousedown', (e) => {
  if(e.target.classList.contains('slider__img')){
    let timeout = setTimeout(() => {
      e.target.classList.add('imgBigger')
    }, 500);
  
    body.addEventListener('mouseup', (e) => {
      clearTimeout(timeout)
      
      e.target.classList.remove('imgBigger')
    })
  }
})
body.addEventListener('touchstart', (e) => {
  if(e.target.classList.contains('slider__img')){
    let timeout = setTimeout(() => {
      e.target.classList.add('imgBigger')
    }, 500);
  
    body.addEventListener('touchend', (e) => {
      clearTimeout(timeout)
      
      e.target.classList.remove('imgBigger')
    })
  }
})
.slidersWrapper{
  width: 100%;

  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  align-items: flex-end;
}


.slider__block{
  width: 45vw;
  height: fit-content;
  margin-bottom: 3vw;
}

.slider__title{
  font-size: 2em;
}

.slider{
  width: 100%;
  height: 70vh;
  margin: 1vw auto;
  position: relative;
  overflow: hidden;
}
.slider__line{
  height: 100%;
  display: flex;

  transition: all .3s ease-out;
}
.slider__img{
  height: 100%;
  object-fit: contain;

  background-color: rgb(200, 200, 200);
  transition: all .2s ease;
}
.imgBigger{
  position: absolute;
  top: 0;
  right: 0;
  z-index: 3;
  
  object-fit: cover;
}

.slider__btn{
  width: 15%;
  height: 100%;
  position: absolute;
  top: 50%;
  transform: translate(0, -50%);

  display: flex;
  justify-content: center;
  align-items: center;

  font-size: 3em;
  font-weight: 900;

  background-color: rgba(255, 255, 255, 0.2);
  cursor: pointer;
  user-select: none;
}
.slider__btnNext{
  right: 0;
}
.slider__btnPrevious{
  left: 0;
}
<div class="slider__block slider__block2">
  <h2 class="slider__title">Волонтерство</h2>
  <div class="slider">
    <div class="slider__line">
      <img class="slider__img" src="01.jpg" alt="">
      <img class="slider__img" src="02.jpg" alt="">
      <img class="slider__img" src="01.jpg" alt="">
      <img class="slider__img" src="02.jpg" alt="">
    </div>
    <div class="slider__btnNext slider__btn">></div>
    <div class="slider__btnPrevious slider__btn"><</div>
  </div>
</div>

. Весь вечер бьюсь и не могу понять ,что не так. Умоляю помогите.


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