범위 입력 슬라이더를 세로로 표시하는 방법


90

<input type="range" />슬라이더 컨트롤을 세로 로 표시하고 싶습니다 . 범위 슬라이더 컨트롤을 지원하는 브라우저에만 관심이 있습니다.

너비보다 높이를 높게 설정하면 브라우저가 자동으로 방향을 변경하는 것으로 보이는 주석과 참조를 찾았지만 테스트에서는 Opera에서 작동하던 Opera 에서만 작동 하지만 더 이상 작동하지 않습니다. HTML5 범위 슬라이더의 방향을 수직으로 조정하려면 어떻게해야합니까?

답변:


134

먼저 너비보다 높이를 크게 설정합니다. 이론적으로는 이것이 필요한 전부입니다. HTML5 사양이 많이 제안한다 :

... UA는 스타일 시트에 지정된 높이 및 너비 속성의 비율에서 컨트롤의 방향을 결정했습니다.

Opera는 이러한 방식으로 구현했지만 Opera는 현재 WebKit Blink를 사용하고 있습니다. 현재로서는 높이가 너비보다 큰 경우에만 수직 슬라이더를 구현하는 브라우저가 없습니다.

그럼에도 불구하고 브라우저 사이에서 레이아웃을 올바르게 가져 오려면 너비보다 높이를 설정해야합니다. 왼쪽 및 오른쪽 패딩을 적용하면 레이아웃 및 위치 지정에도 도움이됩니다.

Chrome의 경우 -webkit-appearance: slider-vertical.

IE의 경우 writing-mode: bt-lr.

Firefox의 orient="vertical"경우 html에 속성을 추가하십시오 . 그들이 이런 식으로 한 것이 유감입니다. 비주얼 스타일은 HTML이 아닌 CSS를 통해 제어해야합니다.

input[type=range][orient=vertical]
{
    writing-mode: bt-lr; /* IE */
    -webkit-appearance: slider-vertical; /* WebKit */
    width: 8px;
    height: 175px;
    padding: 0 5px;
}
<input type="range" orient="vertical" />


면책 조항 :

이 솔루션은 아직 정의되지 않았거나 완성되지 않은 CSS 속성의 현재 브라우저 구현을 기반으로합니다. 코드에서이를 사용하려는 경우 최신 브라우저 버전이 출시되고 w3c 권장 사항이 완료 될 때 코드를 조정할 준비를하십시오 .

MDN에는-webkit-appearance 웹에서의 사용 에 대한 명시적인 경고가 포함되어 있습니다 .

웹 사이트 에서는 이 속성을 사용하지 마십시오 . 비표준 일뿐만 아니라 브라우저마다 동작이 변경됩니다. 키워드조차도 none다른 브라우저의 각 양식 요소에서 동일한 동작이 아니며 일부는 전혀 지원하지 않습니다.

IE 문서 의 세로 슬라이더 데모에 대한 캡션은 높이를 너비보다 크게 설정하면 범위 슬라이더가 세로로 표시되지만 작동 하지 않음을 잘못 나타냅니다 . 에서 의 코드 부는 , 이는 명백히하지 세트 높이나 폭 대신 사용합니까 writing-mode. writing-mode속성은 IE에 의해 구현 된 매우 강력한 것입니다. 안타깝게도이 문서를 작성 하는 현재 사양의 작업 초안에 정의 된 값 은 훨씬 더 제한적입니다. IE의 향후 버전이 bt-lr현재 제안 된 vertical-lr(와 동등 함 tb-lr) 에 찬성하여 지원을 중단 하면 슬라이더가 거꾸로 표시됩니다. 대부분의 경우 향후 버전은writing-mode기존 값에 대한 지원을 삭제하지 않고 새 값을 수락합니다. 그러나 당신이 무엇을 다루고 있는지 아는 것이 좋습니다.


2
에 대한 면책 ​​조항 +1- -webkit-appearance몰랐습니다. 그것은 모든 것을 변화시킵니다.
Robin Winslow 2014 년

IE에서 type = "range"인 입력 요소는 너비 / 높이 / 표시 값에 매우 민감합니다. Bootstrap을 사용할 때 이러한 값 중 일부는 실수로 덮어 쓸 수 있습니다 (특히 대답 에서처럼 포괄적 인 CSS를 사용하지 않는 경우). 내 수직 범위 중 하나에 대해 다음과 같은 CSS를 사용합니다. .vert {-ms-writing-mode : bt-lr; / * IE / -webkit-appearance : 슬라이더 수직; / WebKit * / 높이 : 210px; 너비 : 20px! important; 패딩 : 0 5px; 디스플레이 : 인라인 블록! important; }
mp31415 2014

1
저는 확실히 !important. 선택기를 강화하는 것이 항상 좋습니다. 그냥 .vert, 같은 것을 사용하십시오 input[type=range].vert.
gilly3 2014

74

컨테이너 높이 / 너비에주의해야하지만 css 변환으로이 작업을 수행 할 수 있습니다. 또한 더 낮게 배치해야 할 수도 있습니다.

input[type="range"] {
   position: absolute;
   top: 40%;
   transform: rotate(270deg);
}
<input type="range"/>


또는 해당하는 3d 변환 :

input[type="range"] {
   transform: rotateZ(270deg);
}

또한이를 사용하여 가로 또는 세로에 대해 각각 180deg 또는 90deg로 설정하여 슬라이드의 방향을 전환 할 수 있습니다.


2
더 높은 값으로 올라가고 더 낮은 값으로 내려 가려면 270으로 만들어야합니다. 답변을 수정했습니다.
aug jan

1
사용자 지정 CSS 스타일을 지원하므로이 방법을 선호합니다. 다른 방법으로, 사용자 정의 스타일은 재미 슬라이더 행위를한다
김 T

1
이것은 간단하지만 훌륭
크리스토퍼 M.

position : absolute 대신 display : inline-block; transform-origin으로.
Denis Giffeler

@DenisGiffeler 절대 위치는이 솔루션의 일부가 아니며 SO 예제를 올바르게 표시하는 편리한 방법입니다. 사용 사례에 따라 포지셔닝을 수행하는 방법에는 여러 가지가 있습니다.
MaxPRafferty

25

위치를 절대로 변경하지 않고 아래를 참조하십시오. 이것은 모든 최신 브라우저도 지원합니다.

.vranger {
  margin-top: 50px;
   transform: rotate(270deg);
  -moz-transform: rotate(270deg); /*do same for other browsers if required*/
}
<input type="range" class="vranger"/>

아주 오래된 브라우저의 경우 CSS 샌드페이퍼-sand-transform: rotate(10deg); 에서 사용할 수 있습니다.

또는 사용

-ms-transform: rotate(270deg);IE9 와 같은 접두사 선택기


또한 transform-origin: center left;슬라이더를 중앙 정렬이 아닌 왼쪽 정렬하는 것과 같은 것을 포함합니다 .
DragonLord

3

.container {
    border: 3px solid #eee;
    margin: 10px;
    padding: 10px;
    float: left;
    text-align: center;
    max-width: 20%
}

input[type=range].range {
    cursor: pointer;
    width: 100px !important;
    -webkit-appearance: none;
    z-index: 200;
    width: 50px;
    border: 1px solid #e6e6e6;
    background-color: #e6e6e6;
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#d2d2d2));
    background-image: -webkit-linear-gradient(right, #e6e6e6, #d2d2d2);
    background-image: -moz-linear-gradient(right, #e6e6e6, #d2d2d2);
    background-image: -ms-linear-gradient(right, #e6e6e6, #d2d2d2);
    background-image: -o-linear-gradient(right, #e6e6e6, #d2d2d2)
}

input[type=range].range:focus {
    border: 0 !important;
    outline: 0 !important
}

input[type=range].range::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 10px;
    height: 10px;
    background-color: #555;
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#4ddbff), to(#0cf));
    background-image: -webkit-linear-gradient(right, #4ddbff, #0cf);
    background-image: -moz-linear-gradient(right, #4ddbff, #0cf);
    background-image: -ms-linear-gradient(right, #4ddbff, #0cf);
    background-image: -o-linear-gradient(right, #4ddbff, #0cf)
}

input[type=range].round {
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px;
    border-radius: 20px
}

input[type=range].round::-webkit-slider-thumb {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -o-border-radius: 5px
}

.vertical-lowest-first {
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    -o-transform: rotate(90deg);
    -ms-transform: rotate(90deg);
    transform: rotate(90deg)
}

.vertical-heighest-first {
    -webkit-transform: rotate(270deg);
    -moz-transform: rotate(270deg);
    -o-transform: rotate(270deg);
    -ms-transform: rotate(270deg);
    transform: rotate(270deg)
}
<div class="container" style="margin-left: 0px">
    <br><br>
    <input class="range vertical-lowest-first" type="range" min="0" max="1" step="0.1" value="1">
    <br><br><br>
</div>

<div class="container">
    <br><br>
    <input class="range vertical-heighest-first" type="range" min="0" max="1" step="0.1" value="1">
    <br><br><br>
</div>


<div class="container">
    <br><br>
    <input class="range vertical-lowest-first round" type="range" min="0" max="1" step="0.1" value="1">
    <br><br><br>
</div>


<div class="container" style="margin-right: 0px">
    <br><br>
    <input class="range vertical-heighest-first round" type="range" min="0" max="1" step="0.1" value="1">
    <br><br><br>
</div>

출처 : http://twiggle-web-design.com/tutorials/Custom-Vertical-Input-Range-CSS3.html


소스 링크에는 스타일 처리가 다른 다양한 슬라이더를 보여주는 데모가 포함되어 있습니다.
Josh Habdas

0

매우 간단합니다. 나는 -webkit-appearance: slider-vertical, 그것은 chorme, Firefox, Edge에서 작동했습니다.

<input type="range">
input[type=range]{
    writing-mode: bt-lr; /* IE */
    -webkit-appearance: slider-vertical; /* WebKit */
    width: 50px;
    height: 200px;
    padding: 0 24px;
    outline: none;
    background:transparent;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.