Alinhando texto e caixas de seleção para a mesma largura em CSS?
Ok, isso é aparentemente impossível de acertar. Eu tenho uma caixa de texto e uma caixa de seleção. Eu quero que eles sejam da mesma largura exatamente para que eles se alinham na margem esquerda e na margem direita.
<code><!DOCTYPE html> <html> <head> <style type="text/css"> input, select { width: 200px; } </style> </head> <body> <input type="text" value="ABC"><br> <select> <option>123</option> </select> </body> </html> </code>
Isso faria você pensar, certo? Não. A caixa de seleção é 6px menor no Firefox. Veja a captura de tela.
Ok, então vamos editar o código e criar dois estilos.
<code><style type="text/css"> input { width: 200px; } select { width: 206px; } </style> </code>
Ok, isso funciona!
Ah, espere, teste melhor no Chrome ...
Alguém pode me dizer como alinhá-los em todos os navegadores? Por que não consigo fazer largura: 200px no total, por que todos os navegadores a exibem de forma diferente? Além disso, enquanto estamos nisso, por que a caixa de texto e a caixa de seleção são diferentes? Como os colocamos na mesma altura? Já tentei altura e altura da linha sem sucesso.
Solução:Ok, eu encontrei a solução com alguma ajuda das respostas abaixo. A chave é usar odimensionamento de caixa: caixa de borda propriedade assim quando você especificar a largura queinclui a borda e o preenchimento. Vejoexcelente explicação aqui. Então o navegador não pode encher.
O código está abaixo, também definiu a altura das caixas para o mesmo tamanho e recuou o texto dentro da caixa para alinhar. Você também precisa definir a borda, pois o Chrome tem uma borda muito estranha que ele usa para caixas de seleção, o que elimina o alinhamento. Isso funcionará para sites HTML5 (por exemplo, com suporte a IE9, Firefox, Chrome, Safari, Opera, etc.).
<code><!DOCTYPE html> <html> <head> <style type="text/css"> input, select { width: 200px; border: 1px solid #000; padding: 0; margin: 0; height: 22px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } input { text-indent: 4px; } </style> </head> <body> <input type="text" value="ABC"><br> <select> <option>123</option> <option>123456789 123123123123</option> <option>123456789 123123123123 134213721381212</option> </select> </body> </html> </code>
Apenas um aviso final você pode não querer botões de entrada, caixas de seleção, etc para ser incluído neste estilo, então use oinput:not([type='button'])
para não aplicá-lo a certos tipos ou usarinput[type='text'], input[type='password']
para especificar aqueles que você deseja aplicar.