Text innerhalb des Eingabefelds mit fester Höhe ohne Anzeige vertikal ausrichten: Tabelle oder Auffüllung?

76

Die Linienhöheneigenschaft sorgt normalerweise für die vertikale Ausrichtung, jedoch nicht für Eingaben. Gibt es eine Möglichkeit, Text automatisch zu zentrieren, ohne mit dem Auffüllen herumzuspielen?

Logan Serman
quelle
5
Ohne mit Polsterung herumzuspielen? Nach meiner Erfahrung nicht. Wenn Sie möchten, dass es in allen Browsern (fast) gleich gerendert wird, habe ich festgestellt, dass die Verwendung von Padding erforderlich ist.
Zack The Human

Antworten:

12

In Opera 9.62, Mozilla 3.0.4, Safari 3.2 (für Windows) ist es hilfreich, wenn Sie Text oder mindestens ein Leerzeichen in dieselbe Zeile wie das Eingabefeld einfügen.

<div style="line-height: 60px; height: 60px; border: 1px solid black;">
    <input type="text" value="foo" />&nbsp;
</div>

(Stellen Sie sich ein & nbsp nach der Eingabe-Anweisung vor)

IE 7 ignoriert jeden CSS-Hack, den ich versucht habe. Ich würde empfehlen, Padding nur für IE zu verwenden. Sollte es Ihnen leichter machen, es richtig zu positionieren, wenn es nur in einem bestimmten Browser funktionieren muss.

Gerhard Dinhof
quelle
41
-1 Hiermit wird das Eingabefeld ausgerichtet, nicht der Text im Eingabefeld.
Kontur
Textausrichtung: Mitte; Wendete dies auf CSS von Textfeld an und es funktionierte für mich
Zohab Ali
99

Ich bin selbst auf dieses Problem gestoßen. Ich habe festgestellt, dass die Angabe einer Eingabehöhe, sondern die kombinierte Verwendung von Schrifthöhe und Abstand zu vertikal ausgerichtetem Text führt.

Angenommen, Sie möchten ein 42 Pixel großes Eingabefeld mit einer Schriftgröße von 20 Pixel. Sie können einfach den Unterschied zwischen der Eingabehöhe und der Schriftgröße ermitteln, durch zwei teilen und den Abstand auf diesen Betrag einstellen. In diesem Fall hätten Sie eine Gesamtpolsterung von 22 Pixel, was 11 Pixel auf jeder Seite entspricht.

<input type="text" style="padding: 11px 0px 11px 0px; font-size: 20px;" />

Das würde Ihnen ein 42px großes Eingabefeld mit perfekter vertikaler Ausrichtung geben.

Hoffentlich hilft das.

Dan Dumitru
quelle
7
Obwohl dies funktioniert, war die ursprüngliche Frage, wie dies ohne Polsterung gelöst werden kann.
Micros
1
Wie von Micros bemerkt, funktioniert dies, aber die ursprüngliche Frage war, wie man es ohne Polsterung macht, was möglich zu sein scheint. Ich glaube, Chris Hawes Antwort ist die einfachste Lösung und erfordert keine Polsterung.
Tim Mackey
Manchmal benötigen Sie eine explizite Höhe. In diesem Fall ist es nicht akzeptabel, dies mit Polsterung zu tun. Dies funktioniert zwar, geht jedoch nicht auf diese Situation ein (was in der Frage gestellt wird). Siehe Chris Hawes Antwort unten für die richtige Antwort ohne Auffüllen (dh "Zeilenhöhe").
Dkamins
62

Ich habe es nicht selbst versucht, aber versuche es mit folgenden Einstellungen:

height : 36px; //for other browsers
line-height: 36px; // for IE

Wobei 36px die Höhe Ihrer Eingabe ist.

Chris Hawes
quelle
3
Tatsächlich löste die Zeilenhöheneigenschaft das Problem im IE. Ich denke, das ist der einfachste Weg.
Das einzige Problem, das ich daraus sehen würde, ist, wenn Sie Text umbrechen.
JacobRossDev
6

Ich weiß, dass ich zu spät zur Party komme, aber hoffentlich hilft dies jedem, der nach einer präzisen Antwort sucht, die in allen gängigen Browsern funktioniert (mit Ausnahme von IE6 haben wir beschlossen, diesen Browser nicht mehr zu unterstützen, sodass ich mich weigere, ihn überhaupt noch anzusehen). .

    #search #searchbox {
    height: 21px;
    line-height: 21px;
}

Prost! JP

JimP
quelle
3

Meiner Meinung nach ist die Antwort auf dieser Seite mit den meisten Stimmen die beste Antwort, aber seine Mathematik war falsch und ich konnte sie nicht kommentieren.

Ich brauchte ein Texteingabefeld mit einer Höhe von genau 40 Pixel und einem umlaufenden Rand von 1 Pixel. Natürlich wollte ich, dass der Text in allen Browsern vertikal in der Mitte ausgerichtet ist.

1 Pixel Rand oben
1 Pixel Rand unten
8 Pixel oben Polsterung
8 Pixel untere Polsterung
22 Pixel Schriftgröße

1 + 1 + 8 + 8 + 22 = genau 40 Pixel.

Eine Sache, an die Sie sich erinnern sollten, ist, dass Sie Ihre CSS-Höheseigenschaft entfernen müssen, sonst werden diese Pixel zu Ihrer obigen Summe hinzugefügt.

<input type="text" style="padding-top:8px; padding-bottom:8px; margin: 0; border: solid 1px #000000; font-size:22px;" />

Dies funktioniert in Firefox, Chrome, IE 8 und Safari. Ich kann nur davon ausgehen, dass wenn so etwas Einfaches in IE8 funktioniert, es in 6, 7 und 9 ähnlich funktionieren sollte, aber ich habe es nicht getestet. Bitte lassen Sie es mich wissen und ich werde diesen Beitrag entsprechend bearbeiten.

Sparky
quelle
I can only assume that if something simple like this is working in IE8, it should work similarly in 6, 7- Es gibt VIELE sehr einfache Dinge (zumindest nach heutigen Maßstäben), die in IE8 (wenn auch nur halbherzig) funktionieren, in IE6 oder sogar 7 jedoch unmöglich sind. Zur Erinnerung: IE6 hat nicht so viel unterstützt wie position: fixedoder sogar transparente PNGs.
Camilo Martin
2

Gehen Sie für line-height.

Das vertical-alignTag funktioniert gut für die Senden-Schaltfläche, aber nicht für den Text im Eingabefeld. Das Einstellen line-heightder Höhe des Eingabefelds funktioniert in allen Browsern. Inkl. IE7.

Peter Waegemans
quelle
Diese Antwort liefert zwar einen guten Grund, aber keine Antwort. Ich versuche es jetzt und es funktioniert nicht einmal. Erstens überschreibt die Höhe die Zeilenhöhe und macht sie unbrauchbar. Zweitens vergrößert die Zeilenhöhe das Eingabefeld nur und verkleinert die Position des Texts nicht.
Ahnbizcad
1

Nach langem Suchen und Frust funktionierte für mich eine Kombination aus Einstellen von Höhe, Linienhöhe und ohne Auffüllen, wenn ein Hintergrundbild mit fester Höhe (24 Pixel) für ein Texteingabefeld verwendet wurde.

.form-text {
    color: white;
    outline: none;
    background-image: url(input_text.png);
    border-width: 0px;
    padding: 0px 10px 0px 10px;
    margin: 0px;
    width: 274px;
    height: 24px;
    line-height: 24px;
    vertical-align: middle;
}

quelle
Durch vertikales Ausrichten wird das Eingabeelement relativ zum übergeordneten Element und nicht zum Inneren ausgerichtet.
Xmarcos
1
input[type=text]
{
   height: 15px; 
   line-height: 15px;
}

Dies ist der richtige Weg, um die vertikale Mittelposition einzustellen.

Web Designer mit Promoter
quelle
1
Diese genaue Lösung wurde bereits in mehreren Antworten angegeben, als Sie dies gepostet haben.
TylerH
0

Stellen Sie einfach nicht die Höhe des Eingabefelds ein, sondern nur die Schriftgröße, das ist in Ordnung

imikay
quelle
0

So mache ich es.

<ul>
   <li>First group of text here.</li>
   <li><input type="" value="" /></li>
</ul>

dann in Ihrer CSS-Datei,

ul li {
  display: block;
  float: left;
}

Das sollte für dich funktionieren.

Morgen sieben
quelle
Sie benötigen 'display: block' nicht, wenn Sie es mit 'float' verwenden. Denken Sie daran, float = block.
Drpelz
0

Versuchen :

height: 21px;
line-height: 21px; /* FOR IE */

Da in einigen Versionen von IE (<9) die Eigenschaftshöhe nicht richtig interpretiert wird.

Gew
quelle
1
Diese genaue Lösung wurde bereits in mehreren Antworten angegeben, als Sie dies gepostet haben.
TylerH
0

Spät zur Party, aber die aktuellen Antworten funktionieren nicht, wenn Sie Box-Sizing: Border-Box-Set haben (was heutzutage viele Leute für Formularelemente tun).

Setzen Sie einfach die Boxgröße für IE8 zurück, box-sizing: content-box;um eine der Antworten für Polsterung / Höhe zu verwenden.

GusRuss89
quelle
0

Die innere vertikale Ausrichtung hängt von der Schrifthöhe und der Eingabehöhe ab, sodass sie mithilfe des Auffüllens angepasst werden kann !!!

Versuchen Sie einige wie:

.InVertAlign {
   height: 40px;
   line-height: 40px;
   font-size: 2em;
   padding: 0px 14px 3px 5px;
}

...

<input type="text" class="InVertAlign" />

Denken Sie daran, die Werte für die CSS-Klasse an Ihre Bedürfnisse anzupassen!

Diego Favero
quelle
0

Ich habe gerade in den Texteingaben von MaterialUI daran gearbeitet. Das Hinzufügen padding-top: 0.5remzum Eingabestil hat bei mir funktioniert. Während dies die Polsterung anpasste, müssen Sie sich zumindest nicht um die Anpassung für Updates kümmern, geschweige denn um unterschiedliche Haltepunkte.

Ein Duv
quelle
-2

Sie sollten Ihren Titeltext entfernen und den Eingabeplatzhalter für den Titel Ihres Etiketts verwenden. Danach funktionieren einige visuelle und CSS-Funktionen, und Ihr Formular sieht eng und benutzerfreundlich aus. Ich bin mir der Nachteile bewusst, aber dies wird das Alignment Wrestling vollständig entlasten.

LaddtheImpaler
quelle
-11

Wenn Ihr Element ein Blockelement ist, das enthalten ist / oder wie folgt angezeigt wird:

display: table-cel

Oder Sie können mit einer festen Linienhöhe die vertikale Ausrichtung folgendermaßen einstellen:

Vertical-Align: Middle;

In anderen Fällen funktioniert es nicht, aber unter diesen Bedingungen funktioniert es einwandfrei.

MPS
quelle
2
Dies funktioniert nur in Blockelementen mit display: table-celloder Blöcken mit einem festen line-height.
Marc B