Ok, wir wissen also, dass das Festlegen des Auffüllens für ein Objekt dazu führt, dass sich seine Breite ändert, selbst wenn es explizit festgelegt wird. Während man die Logik dahinter argumentieren kann, verursacht sie einige Probleme mit einigen Elementen.
In den meisten Fällen fügen Sie einfach ein untergeordnetes Element hinzu und fügen diesem statt dem auf 100% festgelegten Element eine Auffüllung hinzu. Bei Formulareingaben ist dies jedoch kein möglicher Schritt.
Schau dir das an: http://sandman.net/test/formcss.html
Beim zweiten Eingang ist die Auffüllung auf 5 Pixel eingestellt, was ich der Standardeinstellung sehr vorziehe. Leider wächst die Eingabe dadurch in alle Richtungen um 10 Pixel, einschließlich des Hinzufügens von 10 Pixel zur 100% -Breite.
Das Problem hierbei ist, dass ich der Eingabe kein untergeordnetes Element hinzufügen kann, sodass ich es nicht beheben kann. Die Frage ist also:
Gibt es eine Möglichkeit, dem Eingang eine Auffüllung hinzuzufügen, während die Breite 100% bleibt? Es muss 100% sein, da die Formulare in Eltern unterschiedlicher Breite gerendert werden, sodass ich die Breite der Eltern nicht im Voraus kenne.
box-sizing
AttributsAntworten:
Mit CSS3 können Sie die Größe des Eigenschaftsfelds verwenden, um zu ändern, wie der Browser die Breite der Eingabe berechnet .
Sie können mehr darüber hier lesen: http://css-tricks.com/box-sizing/
quelle
box-sizing: border-box;
ist das erste, woran ich dachte, aber es funktioniert absolut nicht für mich. Vielleicht spielt der Ur-Ur-Großelternteildisplay: flex;
damit?Ich weiß nicht, wie browserübergreifend es kompatibel ist (es funktioniert in Firefox und Safari), aber Sie könnten diese Lösung ausprobieren:
(Nur die Werte gepostet, die ich geändert habe)
quelle
Eine Möglichkeit besteht darin, das
INPUT
in ein zu wickeln, dasDIV
die Polsterung hat.CSS:
HTML:
quelle
Das oft Vergessene
calc
kann hier zur Rettung kommen:Da wir wissen, dass die Auffüllung die Breite des Elements erhöht, subtrahieren wir einfach die Auffüllung von der Gesamtbreite. Es wird von allen gängigen Browsern unterstützt, reagiert und erfordert keine chaotischen Wrapper-Divs.
quelle
Ich hatte einige Probleme mit etwas Ähnlichem. Ich habe tds mit Eingängen von 100% und einer kleinen Polsterung. Was ich getan habe, war die Polsterung auf dem td wie folgt zu kompensieren:
Auffüllen von 8px, um den Rand und das Auffüllen des Eingabe- / Textbereichs einzuschließen. Hoffe das hilft!
quelle
Nehmen Sie vielleicht den Rand + Hintergrund vom
input
und schließen Sie ihn stattdessen in einendiv
mit Rand + Hintergrund und Breite: 100% ein und setzen Sie einen Rand auf deninput
?quelle
Eine Lösung, die ich gefunden habe, besteht darin, die Eingabe absolut mit einem relativ positionierten übergeordneten Tag zu positionieren.
Die wenden den Stil an:
Das einzige, was Sie beachten müssen, ist, dass das Absatz-Tag eine Höheneinstellung benötigt, da seine absolut positionierten untergeordneten Elemente seine Höhe nicht erweitern. Dies vermeidet die Notwendigkeit des Einstellens,
width: 100%
indem es an der linken und rechten Seite des übergeordneten Elements gesperrt wird.quelle
Versuchen Sie, Prozentsätze für Ihre Polsterung zu verwenden:
Wenn Sie sich Sorgen über Benutzer in alten Browsern machen, die den Box-Shadow nicht sehen können, geben Sie der Eingabe als Backup einfach eine subtile Hintergrundfarbe. Wenn Sie Pixel für diese Art von Dingen verwenden, besteht die Möglichkeit, dass Sie sie an anderer Stelle verwenden, was einige zusätzliche Herausforderungen mit sich bringen könnte. Lassen Sie mich wissen, wenn Sie auf sie stoßen.
quelle
Ich weiß nur, dass ich Werte wie diese 100% -10 zuweisen kann, um dies zu verhindern. Es gibt jedoch einige Kompatibilitätsprobleme.
quelle