2009-05-22 4 views
69

Ich habe ...Wählen Sie Eingaben und Texteingaben in HTML - die beste Möglichkeit, um die gleiche Breite zu machen?

wie so (nur zur Veranschaulichung) eine einfache Form bekam
<form> 

    <div class="input-row"> 
     <label>Name</label> 
     <input type="text" name="name" /> 
    </div> 

    <div class="input-row"> 
     <label>Country</label> 
     <select name="country"> 
     <option>Australia</option> 
     <option>USA</option> 
     </select> 
    </div> 

</form> 

Mein Layout-Methode unter Verwendung von CSS ist wie folgt ...

form { 
    width: 500px; 
} 

form .input-row { 
    display: block; 
    width: 100%; 
    height: auto; 
    clear: both; 
    overflow: hidden; /* stretch to contain floated children */ 
    margin-bottom: 10px; 
} 

form .input-row label { 
    display: block; 
    float: left; 
} 

form .input-row input, 
form .input-row select { 
    display: block; 
    width: 50%; 
    float: right; 
    padding: 2px; 
} 

dies alles ganz schön ausrichtet, außer meinem select Element (in Firefox sowieso) ist nicht immer die gleiche Breite wie meine anderen input Elemente. Im Allgemeinen ist es um einige Pixel schmaler.

Ich habe versucht, die Breite auf eine Pixelgröße (z. B. 200px) zu ändern, aber es hat keinen Unterschied gemacht.

Was ist der beste Weg, um diese alle gleich breit zu bekommen? Ich hoffe, dass es mir nicht zurückgreifen width die select ‚s Einstellung einzeln oder sie in Tabellen setzen ...

+26

Kann ich dir ein schmutziges kleines Geheimnis erzählen? Ich verwende Tabellen, um meine Formulare zu formatieren. Es ist nur _way_ zu einfach. Aber Sssssshh, behalte das auf dem Tiefpunkt. –

+0

In aller Ernsthaftigkeit, haben Sie versucht, Rand und Padding auf 0 zu setzen? –

+0

Paolo, hatte ich ursprünglich (und es war einfach, die Eingaben die gleiche Breite zu machen), aber ich habe bestrebt, es Tisch weniger zu tun und in den letzten 8 Monaten oder so erfolgreich gewesen ... dieser gibt mir nur Trauer. – alex

Antwort

160

Die Lösung ist für Formularelemente Box-Modell zu spezifizieren und Browser eher zustimmen am meisten, wenn Sie verwenden border-Box:

input, select, textarea { 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
      box-sizing: border-box; 
} 

Es gibt normalize.css Projekt, das solche Tricks aggregiert.

+0

Könnte es mal versuchen ... haben Sie eine empfohlene Lektüre zu diesem Thema? – alex

+9

das funktionierte für mich, brilliant. Das nervt mich schon ewig. – SpliFF

+0

Ich habe nicht empfohlen, dies zu lesen, außer zwischen den Zeilen der CSS-Spezifikation. Es definiert Formularelemente als "Ersetzte Elemente" und benötigt keine Browser, um sie zu stylen, wodurch der Ärger beginnt. – Kornel

0

Polsterung wird der Text näher an den Rand der Box machen.

versuchen Einstellung der Marge auf 0px, und wenn das richtig scheint, mit ihm spielen, um (wie gerade Einstellung margin-left nur)

+0

Ich habe versucht, Padding: 0 & Marge: 0 mit!wichtig an den Eingängen, Selects und Input-Zeile div, aber es bündelt sie nur wirklich dicht. Die Auswahlbox ist etwa 2px schmaler (was vielleicht etwas mit der Umrandung zu tun hat) – alex

0

Hatte die gleichen Probleme mit 100% Breite Tabelle und Zellen, mit einem Textfeld (auch mit der Breite bei 100%) breiter als die Tabellenzelle.

Dies löste mein Problem in der CSS:

table td 
{ 
    padding-right: 8px; 
} 

nicht die beste Lösung überhaupt, weil du wahrscheinlich einigen zusätzlichen Platz auf die rechte Seite bekommen. Aber wenigstens versteckt es sich nicht mehr!

+1

Ich bin über solche absoluten Größen zweifelhaft. Wenn Sie einen anderen Browser, einen anderen Fenstermanager/Windows-Stil verwenden, wird dies wahrscheinlich nicht mehr funktionieren. – stracktracer