<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100" step="10">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="50">
<label for="volume">볼륨</label>
<input type="range" id="volume" min="50">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="-100">
실제 적용된 모습
<label for="volume">볼륨</label>

<!-- max 속성이 지정되어 있지 않으면
     기본값이 100으로 지정되기 때문에
     min 속성의 값은 100보다 작아야 합니다. -->
<input type="range" id="volume" min="200"> <!-- min이 max 100보다 큰
                                                잘못 설정된 값 -->
실제 적용된 모습 허용 범위가 잘못되어 있으면, 실제 슬리어더로 값을 선택하려고 해도 선택되지 않습니다.
<label for="volume">볼륨</label>
<input type="range" id="volume" max="150">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="-200" max="-100">
실제 적용된 모습
<label for="volume">볼륨</label>

<!-- min 속성이 지정되어 있지 않으면
     기본값이 0으로 지정되기 때문에
     max 속성의 값은 0보다 커야 합니다. -->
<input type="range" id="volume" max="-100"> <!-- max가 min 0보다 작은
                                                잘못 설정된 값 -->
실제 적용된 모습 허용 범위가 잘못되어 있으면, 실제 슬리어더로 값을 선택하려고 해도 선택되지 않습니다.
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100" step="25">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100" value="10">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100" value="-20">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100" value="200">
실제 적용된 모습
<label for="volume">볼륨</label>
<input type="range" id="volume" min="0" max="100">
<p style="color: red;">값: <output for="volume" id="volume-output"></output></p>

<!-- 자바스크립트 사용 -->
<script>
    const value = document.querySelector("#volume-output");
    const input = document.querySelector("#volume");
    value.textContent = input.value;
    input.addEventListener("input", (event) => {
      value.textContent = event.target.value;
    });
</script>
실제 적용된 모습
<label for="volume">볼륨</label>

<!-- list 속성으로 datalist 태그 연결 -->
<input type="range"
    id="volume"
    min="0"
    max="100"
    step="25"
    value="50"
    list="markers">

<!-- 눈금 표시 -->
<datalist id="markers">
    <option value="0"></option>
    <option value="25"></option>
    <option value="50"></option>
    <option value="75"></option>
    <option value="100"></option>
</datalist>
실제 적용된 모습
<div class="control-container">
    <label for="volume">볼륨</label>
    <div class="control">
        <input type="range"
            id="volume"
            min="0"
            max="100"
            step="25"
            value="50"
            list="markers">
        <datalist id="markers">
            <option value="0">끔</option>
            <option value="25">작게</option>
            <option value="50">보통</option>
            <option value="75">크게</option>
            <option value="100">매우 크게</option>
        </datalist>
    </div>
</div>
<datalist id="markers">
    <option value="0">끔</option>
    <option value="25">작게</option>
    <option value="50">보통</option>
    <option value="75">크게</option>
    <option value="100">매우 크게</option>
</datalist>

<!-- 위와 아래는 동일하게 작동합니다. -->

<datalist id="markers">
    <option value="0" label="끔"></option>
    <option value="25" label="작게"></option>
    <option value="50" label="보통"></option>
    <option value="75" label="크게"></option>
    <option value="100" label="매우 크게"></option>
</datalist>
/* 슬라이더 컨트롤과 레이블을 감싸는 컨테이너로,
   수평 방향으로 배치합니다. */
.control-container {
    display: flex;
}

/* 레이블과 슬라이더 사이에 적당한 간격을 둡니다 */
label + .control {
    margin-left: 1em;
}

/* datalist 요소에 스타일을 적용해
   눈금과 레이블을 슬라이더에 맞춰 배치합니다. */
datalist {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    writing-mode: vertical-lr; /* 눈금 레이블의 텍스트를 수직 방향으로 표시 */
    width: 200px;
}

/* 각 눈금 레이블의 기본 패딩을 제거하고,
   작은 글씨 크기를 적용합니다. */
option {
    padding: 0; /* 불필요한 패딩을 제거해 레이블 정렬을 개선 */
    font-size: smaller;
}

/* 슬라이더 너비를 datalist와 일치시켜
   눈금과 정렬을 맞춥니다. */
input[type="range"] {
    width: 200px;
    margin: 0;
}
실제 적용된 모습
[type="range"] {
  writing-mode: vertical-lr;
}
실제 적용된 모습