Primeiro, defina a altura maior do que a largura. Em teoria, isso é tudo de que você precisa. A especificação HTML5 sugere o mesmo :
... o UA determinou a orientação do controle a partir da proporção das propriedades de altura e largura especificadas na folha de estilo.
O Opera o implementou dessa forma, mas agora está usando o WebKit Blink . A partir de hoje, nenhum navegador implementa um controle deslizante vertical baseado apenas na altura sendo maior do que a largura.
Independentemente disso, é necessário definir a altura maior do que a largura para obter o layout correto entre os navegadores. Aplicar o preenchimento esquerdo e direito também ajudará no layout e no posicionamento.
Para Chrome, use -webkit-appearance: slider-vertical
.
Para o IE, use writing-mode: bt-lr
.
Para Firefox, adicione um orient="vertical"
atributo ao html. Pena que eles fizeram assim. Os estilos visuais devem ser controlados via CSS, não HTML.
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" />
Isenção de responsabilidade:
Esta solução é baseada em implementações de navegador atuais de propriedades CSS ainda indefinidas ou não finalizadas. Se você pretende usá-lo em seu código, esteja preparado para fazer ajustes no código à medida que novas versões do navegador são lançadas e as recomendações do w3c são concluídas.
MDN contém um aviso explícito contra o uso -webkit-appearance
na web:
Não use esta propriedade em sites da Web: além de não ser padrão, seu comportamento muda de um navegador para outro. Mesmo a palavra none
- chave não tem o mesmo comportamento em cada elemento do formulário em navegadores diferentes, e alguns não têm suporte para isso.
A legenda para a demonstração do controle deslizante vertical na documentação do IE indica erroneamente que definir uma altura maior do que a largura exibirá um controle deslizante verticalmente, mas isso não funciona. Na seção de código , ele claramente não define a altura ou largura e, em vez disso, usa writing-mode
. A writing-mode
propriedade, conforme implementada pelo IE , é muito robusta. Infelizmente, os valores definidos no rascunho de trabalho atual das especificações no momento da redação deste artigo são muito mais limitados. Se as versões futuras do IE abandonarem o suporte de bt-lr
em favor da proposta atualmente vertical-lr
(que seria o equivalente a tb-lr
), o controle deslizante será exibido de cabeça para baixo. Muito provavelmente, as versões futuras estenderiam owriting-mode
para aceitar novos valores em vez de descartar o suporte para valores existentes. Mas é bom saber com o que você está lidando.
-webkit-appearance
- eu não sabia disso. Isso muda tudo.!important
. É sempre melhor fortalecer seu seletor. Em vez de apenas.vert
, use algo comoinput[type=range].vert
.Você pode fazer isso com as transformações css, mas tome cuidado com a altura / largura do contêiner. Também pode ser necessário posicioná-lo mais baixo:
ou o equivalente da transformação 3d:
Você também pode usar isso para mudar a direção do slide, definindo-o para 180 graus ou 90 graus para horizontal ou vertical, respectivamente.
fonte
Sem alterar a posição para absoluta, veja abaixo. Isso também suporta todos os navegadores recentes.
para browsers muito antigos, você pode usar
-sand-transform: rotate(10deg);
a partir de lixa CSSou usar
seletor de prefixo, como
-ms-transform: rotate(270deg);
para IE9fonte
transform-origin: center left;
ter o controle deslizante justificado à esquerda e não ao centro.Fonte: http://twiggle-web-design.com/tutorials/Custom-Vertical-Input-Range-CSS3.html
fonte
É muito simples. Implementei usando
-webkit-appearance: slider-vertical
, Funcionou em chorme, Firefox, Edgefonte