Ok, das scheint unmöglich unmöglich zu sein. Ich habe ein Textfeld und ein Auswahlfeld. Ich möchte, dass sie genau die gleiche Breite haben, damit sie am linken und am rechten Rand ausgerichtet sind.
<!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>
Das würdest du denken, oder? Nee. Das Auswahlfeld ist in Firefox 6 Pixel kürzer. Siehe Screenshot.
Ok, also lassen Sie uns den Code bearbeiten und zwei Stile erstellen.
<style type="text/css">
input {
width: 200px;
}
select {
width: 206px;
}
</style>
Ok das funktioniert!
Oh warte, besser in Chrome testen ...
Kann mir jemand sagen, wie ich diese in allen Browsern ausrichten soll? Warum kann ich nicht einfach width: 200px auf allen machen, warum zeigen alle Browser es anders an? Auch wenn wir gerade dabei sind, warum sind das Textfeld und das Auswahlfeld unterschiedlich hoch? Wie bringen wir sie auf die gleiche Höhe? Habe versucht, Höhe und Linienhöhe ohne Erfolg.
Lösung:
Ok, ich habe die Lösung mit Hilfe der folgenden Antworten gefunden. Der Schlüssel besteht darin, die Eigenschaft box-sizing: border-box zu verwenden , wenn Sie die Breite angeben, die den Rand und den Abstand enthält. Siehe ausgezeichnete Erklärung hier . Dann kann der Browser es nicht stopfen.
Code ist unten, haben auch die Höhe der Felder auf die gleiche Größe eingestellt und den Text innerhalb des Feldes so eingerückt, dass er ausgerichtet ist. Sie müssen auch den Rahmen festlegen, da Chrome einen wirklich seltsam aussehenden Rand hat, der für Auswahlfelder verwendet wird, die die Ausrichtung verwerfen. Dies funktioniert für HTML5-Sites (z. B. Unterstützung von IE9, Firefox, Chrome, Safari, Opera usw.).
<!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>
Nur eine letzte Warnung: Sie möchten möglicherweise nicht, dass Eingabeschaltflächen, Kontrollkästchen usw. in diesem Stil enthalten sind. Verwenden Sie daher die Option, um input:not([type='button'])
sie nicht auf bestimmte Typen anzuwenden, oder verwenden Sie input[type='text'], input[type='password']
, um diejenigen anzugeben, auf die sie angewendet werden sollen.
quelle
Antworten:
Dies liegt daran, dass das
<input type="text" />
Element einen geringfügig anderen Standardstil als das<select>
Element hat, z. B. können die Werte für Rand, Abstand und Rand unterschiedlich sein.Sie können diese Standardstile über einen Elementinspektor wie Firebug für Firefox oder den integrierten für Chrome beobachten. Darüber hinaus unterscheiden sich diese Standard-Stylesheets von Browser zu Browser.
Sie haben zwei Möglichkeiten:
Ich würde mich für Option 1 entscheiden, da Option 2 viel Arbeit erfordert und Sie am Ende jede Menge unnötiges CSS haben. Einige Webentwickler ziehen es jedoch vor, bei Null anzufangen und die vollständige Kontrolle zu haben.
quelle
padding:0; margin:0; border:1px solid #000;
der die Breite der Text- / Auswahlfelder gut ausgerichtet ist. Wenn Sie sich jedoch den Text in den beiden Feldern ansehen, werden Sie feststellen, dass der Text im Auswahlfeld weiter aufgefüllt ist. Fast mussinput { padding-left: 5px; }
nach dem ersten zu fixierenden Stil ein weiterer spezifischer Stil hinzugefügt werden . Irgendwelche Ideen? Ich habe auf der Site, die ich erstellt habe, einen CSS-Reset verwendet, bevor ich diesen grundlegenden Testcode erstellt habe, aber das Problem war dort immer noch vorhanden. Der CSS-Reset hat dieses Problem mit der Breite des Textes / Auswahlfelds anscheinend nicht behoben.input {text-indent: 5px;}
PS PS, das<select>
Tag ist sehr starr und betriebssystemspezifisch - es wird viel CSS ignorieren.Dies bringt Sie in die Nähe, aber dieses Maß an Präzision ist nahezu unmöglich.
quelle
Unterschiedliche Browser wenden standardmäßig unterschiedliche Stile an. Ich habe festgestellt, dass durch das Zurücksetzen von Rand und Abstand auf 0 beide Elemente in Firefox und Chrome gleich breit sind.
Ich persönlich verwende gerne ein minimales CSS-Reset-Stylesheet wie YUI CSS Reset, bevor ich versuche, ein Design in mehreren Browsern gut aussehen zu lassen.
quelle
input { padding-left: 5px; }
. Ist das der richtige Weg? Ich habe auf der Site, die ich erstellt habe, einen CSS-Reset verwendet, bevor ich diesen grundlegenden Testcode erstellt habe, aber das Problem war dort immer noch vorhanden. Durch das Zurücksetzen des CSS wurde dieses Problem mit der Breite des Textes / der Auswahlbox nicht behoben.input
und dieselect
Elemente in eine Reihe zu bringen. Die äußeren Kanten dieser Elemente in eine Linie zu bringen, sieht ästhetisch ziemlich gut aus.Fügen Sie den fraglichen Auswahl- und Eingabe-Tags eine Klasse hinzu, z.
Ändern Sie dann das folgende CSS, um es an Ihr Design anzupassen:
obvs dies ist ein Fix für die Unterstützung von Browsern
quelle
Wenn Sie die Eingänge von Tabelle 4 verwenden, können Sie die folgende Lösung verwenden - auch kompatibel mit ie7:
Auf diese Weise wird die Tabellenzellenbreite auf die Breite der Eingabe festgelegt.
Auf diese Weise würde die Auswahl daher immer die verbleibende Breite einnehmen und perfekt mit der Eingabe d übereinstimmen.
quelle
Versuchen Sie, die Standardränder von beiden Elementen zu entfernen:
quelle
Ja, sehr frustrierend. Ich hatte jedoch nie Probleme damit, bis ich ein "<! DOCTYPE html>" - Tag oben auf meiner HTML-Seite platzierte. Meine Webseite wurde auf allen Plattformen, die ich testen konnte, ordnungsgemäß gerendert, bis ich dieses Tag oben in mein Dokument eingefügt habe.
Während dies "echte Spezifikation" ist, scheint es die Ursache für diese Ausrichtungsprobleme zu sein. FWIW, ich verwende HTML5-Elemente, Inline-CSS usw., alle ohne dieses Tag, um HTML5 anzugeben. YMMV.
quelle