<div class="carousel">
    <ul class="carousel__slides">
        <li class="carousel__slide">スライド1</li>
        <li class="carousel__slide">スライド2</li>
        <li class="carousel__slide">スライド3</li>
        <li class="carousel__slide">スライド4</li>
    </ul>
</div>
* {
  margin: 0;
  padding: 0;
}

.carousel {
  width: 100%;
  position: relative;
}

.carousel__slides {
  display: flex;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;
  scroll-snap-type: x mandatory;
  /* scroll-snap-type: x proximity; */
  scrollbar-width: none;

  &::scroll-button(left) {
    content: "⬅" / "Scroll Left";
    left: 10px;
  }

  &::scroll-button(right) {
    content: "⮕" / "Scroll Right";
    right: 10px;
  }

  &::scroll-button(*) {
    position: absolute;
    top: 45%;
  }

  scroll-marker-group: after;

  &::scroll-marker-group {
    display: flex;
    justify-content: center;
    margin-top: 10px;
    gap: 10px;
  }
}

.carousel__slide {
  list-style: none;
  display: grid;
  place-content: center;
  flex: 0 0 100%;
  height: 200px;
  /* start | center | end */
  scroll-snap-align: center;
  /* always | normal */
  scroll-snap-stop: always;

  &:nth-child(1) {
    background: #eee;
  }
  &:nth-child(2) {
    background: #ddd;
  }
  &:nth-child(3) {
    background: #ccc;
  }
  &:nth-child(4) {
    background: #bbb;
  }

  &::scroll-marker {
    content: "";
    border: 1px solid #444;
    width: 10px;
    height: 10px;
    border-radius: 50%;
  }

  &::scroll-marker:target-current {
    background-color: #444;
  }
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.