2009-07-17 13 views
16

Wie kommt es, wenn ich dies tun:Breite input type = text Element

<input type="text" style="width: 10px; padding: 2px"/> 
<div style="width: 10px; border: solid 1px black; padding: 2px">&nbsp;</div> 

der Eingang endet 2 px breiter als die div sowohl in IE6 und FF3? Was vermisse ich?

EDIT: Wie viele Leute gesagt haben, ist die Grenze das Problem. Wenn ich border: 0px auf der Eingabe einstelle, hat es die gleiche Breite wie div mit einer 0 px Grenze (verifiziert, indem es in einen umrandeten SPAN eingeschlossen wird).

Wenn ich jedoch die Elemente in Farbe messe, hat das div einen 14 px Innenraum, genau wie erwartet (10 + 2 + 2). Die Eingabe hat jedoch einen inneren Bereich von 16 px und dann einen Rahmen außerhalb. Warum ist das? Wahrscheinlich kein Fehler, da es in IE6 und FF3 passiert, aber ich verstehe es nicht.

Antwort

20

Ich glaube, dass ist so, wie der Browser ihre Standardeingabe rendert. Wenn Sie am Eingang einen Rahmen setzen:

<input type="text" style="width: 10px; padding: 2px; border: 1px solid black"/> 
<div style="width: 10px; border: solid 1px black; padding: 2px"> </div> 

Dann haben beide die gleiche Breite, zumindest in FF.

+0

Danke. Es scheint, dass es tatsächlich ein 2px-Rahmen ist, aber nur optisch als 1px aussieht. – erikkallen

4

Die sichtbar Breite eines Elements ist width + padding + border + outline, so scheint es, dass Sie über die Grenze auf dem Eingabeelement vergessen haben. Das heißt, dass die Standard-Rahmenbreite für ein Eingabeelement in den meisten (einigen?) Browsern tatsächlich als 2px berechnet wird, nicht als eine. Daher erscheint deine Eingabe als 2px breiter. Versuchen Sie explizit, border-width auf die Eingabe zu setzen oder Ihre div breiter zu machen.

+0

Meinst du Marge, wenn du Outline sagst, oder skizzierst du ein neues Konzept, von dem ich noch nie gehört habe? – erikkallen

+0

Lesen Sie hier über die Gliederung: http://www.quirksmode.org/css/outline.html Es sagt, es zählt nicht auf die Breite der Box, das ist wahr, aber es ändert sich die sichtbare Breite. – jason

0

Eingangsbreite beträgt 10 + 2 mal 1 Pixel für die Grenz

+0

Das div hat auch eine Grenze. – erikkallen

0

Ich glaube, Sie über die Grenze sind, zu vergessen. Mit einem ein Pixel breiten Rand an der Div wird zwei Pixel der Gesamtlänge wegnehmen. Daher wird es so erscheinen, als wäre das Div zwei Pixel kürzer als es tatsächlich ist.

+1

Nein! Breite + Rand = tatsächliche Breite! Das Eingabeelement erscheint also größer. – jason