Considérez le code suivant :
HTML:
<div>
<label for='name'>Name:</label>
<input type='text' id='name' />
</div>
CSS:
div {
height: 50px;
border: 1px solid blue;
}
Quelle serait la méthode la plus simple pour placer le label
et le input
au milieu du div
(verticalement)?
css
html
vertical-alignment
Misha Moroshko
la source
la source
<table>
et de l'appliquervalign='middle'
à ses<td>
s.Réponses:
div { display: table-cell; vertical-align: middle; height: 50px; border: 1px solid red; }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
Les avantages de cette méthode sont que vous pouvez changer la hauteur du
div
, changer la hauteur du champ de texte et changer la taille de la police et tout restera toujours au milieu.http://jsfiddle.net/53ALd/6/
la source
display: table-cell
. Est-ce pris en charge sur certains navigateurs?display: table-cell
fait que les divs se comportent d'une manière dans laquelle ils ne sont pas censés se comporter, comme les divs suivants rendus sur la même ligne / etc.une approche plus moderne consisterait à utiliser css flex-box.
div { height: 50px; background: grey; display: flex; align-items: center }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
un exemple plus complexe ... si vous avez des éléments multi-éléments dans le flux flexible, vous pouvez utiliser align-self pour aligner des éléments individuels différemment sur l'alignement spécifié ...
div { display: flex; align-items: center } * { margin: 10px } label { align-self: flex-start }
<div> <img src="https://de.gravatar.com/userimage/95932142/195b7f5651ad2d4662c3c0e0dccd003b.png?size=50" /> <label>Text</label> <input placeholder="Text" type="text" /> </div>
c'est aussi super facile à centrer horizontalement et verticalement:
div { position:absolute; top:0;left:0;right:0;bottom:0; background: grey; display: flex; align-items: center; justify-content:center }
<div> <label for='name'>Name:</label> <input type='text' id='name' /> </div>
la source
display:flex
a moins de compatibilité, fonctionne sur chrome 29+Cela fonctionne entre les navigateurs, offre plus d'accessibilité et est livré avec moins de balisage. abandonner le div. Enveloppez l'étiquette
label{ display: block; height: 35px; line-height: 35px; border: 1px solid #000; } input{margin-top:15px; height:20px} <label for="name">Name: <input type="text" id="name" /></label>
la source
for
etid
pour une simplicité maximale.Je sais que cette question a été posée il y a plus de deux ans, mais pour les téléspectateurs récents, voici une solution alternative, qui présente quelques avantages par rapport à la solution de Marc-François:
div { height: 50px; border: 1px solid blue; line-height: 50px; }
Ici, nous ajoutons simplement un
line-height
égal à celui de la hauteur du div. L'avantage étant que vous pouvez maintenant changer la propriété d'affichage du div comme bon vous semble,inline-block
par exemple, et son contenu restera centré verticalement. La solution acceptée nécessite que vous traitiez le div comme une cellule de tableau. Cela devrait fonctionner parfaitement, multi-navigateur.Le seul autre avantage étant qu'il ne s'agit que d'une règle CSS de plus au lieu de deux :)
À votre santé!
la source
Utiliser
padding
sur lediv
( haut et bas ) etvertical-align:middle
sur lelabel
etinput
.exemple sur http://jsfiddle.net/VLFeV/1/
la source
div
et le contenu à l'intérieur ne bougeait pas du tout. Est-ce que je manque quelque chose?Enveloppez l'étiquette et entrez dans un autre div avec une hauteur définie. Cela peut ne pas fonctionner dans les versions IE inférieures à 8.
position:absolute; top:0; bottom:0; left:0; right:0; margin:auto;
la source
Vous pouvez utiliser la
display: table-cell
propriété comme dans le code suivant:div { height: 100%; display: table-cell; vertical-align: middle; }
la source