</p>

.before-after-container {
  position: relative;
  width: 100%;
  max-width: 800px;
  margin: 20px auto;
  overflow: hidden;
  border-radius: 8px;
}

.before-after-container img {
  width: 100%;
  display: block;
  pointer-events: none;
  user-select: none;
}

.before-after-overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 50%;
  height: 100%;
  overflow: hidden;
}

.before-after-overlay img {
  width: 100%;
  height: auto;
}

.before-after-handle {
  position: absolute;
  top: 0;
  left: calc(50% - 15px);
  width: 30px;
  height: 100%;
  background: rgba(255,255,255,0.8);
  border: 2px solid #fff;
  border-radius: 4px;
  cursor: ew-resize;
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
  transition: background 0.2s;
}

.before-after-handle:hover {
  background: rgba(255,255,255,1);
}

<div class="before-after-container" id="ba-slider"><!-- After Image (Full Background) --> <img src="after.jpg" alt="After"> <!-- Before Image (Clipped) -->
<div class="before-after-overlay" id="ba-overlay"><img src="before.jpg" alt="Before"></div>
<!-- Slider Handle -->
<div class="before-after-handle" id="ba-handle"></div>
</div>
<p>
<script>
(function(){
  const container = document.getElementById("ba-slider");
  const overlay = document.getElementById("ba-overlay");
  const handle = document.getElementById("ba-handle");

  let isDragging = false;

  const slide = (x) => {
    const rect = container.getBoundingClientRect();
    let offset = x - rect.left;

    if (offset < 0) offset = 0;
    if (offset > rect.width) offset = rect.width;

    overlay.style.width = offset + "px";
    handle.style.left = (offset - 15) + "px";
  };

  handle.addEventListener("mousedown", () => isDragging = true);
  window.addEventListener("mouseup", () => isDragging = false);

  window.addEventListener("mousemove", (e) => {
    if (isDragging) slide(e.clientX);
  });

  // Touch support
  handle.addEventListener("touchstart", () => isDragging = true);
  window.addEventListener("touchend", () => isDragging = false);

  window.addEventListener("touchmove", (e) => {
    if (isDragging) slide(e.touches[0].clientX);
  });
})();