2010-07-15 3 views
0

Example of problem http://img638.imageshack.us/img638/3733/97914817.jpgtexte Harmoniser verticalement à l'intérieur d'une étiquette div

Je suis en train de recoder une de mes anciennes formes. Il était rempli de tableaux que je veux remplacer par CSS. Cependant, j'ai du mal à avoir du texte et un élément de formulaire alignés verticalement ensemble. Comme l'image montre le texte par défaut de commencer en haut au lieu de dans le milieu. Les reflets bleus autour de la rangée sont l'interprétation/la sélection de ce qui se passe.

Je possède des divs label et input, tous deux flottants à gauche, à l'intérieur d'un div appelé #light, qui se trouve dans un conteneur général. Voici à quoi ressemble mon code CSS:

#contentBox{ 
width: 600px; 
float: left; 
background-color: #e2e2e2; 
overflow: auto; 
border-color: #c5c5c5; 
border-width: 1px; 
border-style: solid; 
font-size: 12px; 
} 
#light { 
float: left; 
width: 500px; 
padding: 15px; 
background-color: #e2e2e2; 
margin: 7px; 
border-color: #c5c5c5; 
border-width: 1px; 
border-style: solid; 
vertical-align: middle; 
} 
input { 
float: right; 
width: 20em; 

} 
label { 
float: left; 
text-align: right; 
vertical-align: baseline; 
} 

Une idée du problème? J'ai essayé d'échanger le vertical-aligner dans différents divs, flottant dans des directions différentes, se débarassant de l'étiquette mais je finis juste avec plus de problèmes plutôt que moins.

Répondre

3

Habituellement, pour résoudre ce problème, j'utiliser la propriété line-height:

Ex:

div{width:600px;font:normal normal 12px/30px Arial, Helvetica, sans-serif;} 

Cela définira la police à 12px, et la ligne de hauteur à 30px, garder la police aligner verticalement dans les 30px de sa ligne.

+0

Cela résout le problème du texte n'étant pas alignés, mais maintenant la boîte de saisie sera décentrée. Pour une raison quelconque, régler la hauteur de la div d'entrée à la même chose que la hauteur de la ligne ne fonctionne pas, l'un ou l'autre sera légèrement décentré – Flarex

+0

Imaginez que votre entrée en tant que texte de 12px, il faudra un peu de rembourrage pour avoit texte à l'intérieur de réduire avec la bordure d'entrée, donc, ajouter padding: 3px ;, puis, à une ligne-poids de 30px, vous avez toujours besoin 12px (12px + 3px + 3px = 18px) ajouter par exemple marge: 6px 0; (si vous avez besoin, va poster un échantillon de travail! – Zuul

4

Vous ne pouvez pas utiliser vertical-align sur des éléments sauf s'ils sont des cellules de tableau (ou affichés comme tels) comme expliqué par this article. Définissez line-height sur la hauteur de l'élément si vous ne disposez que d'une ligne de texte.

0

L'alignement vertical du texte peut être incroyablement ennuyeux ou incroyablement facile.

Si la taille de tous les éléments impliqués est connue, le mieux est de définir des marges/marges manuelles sur le texte lui-même pour s'assurer qu'il est aligné. Si le contenu que vous voulez centrer verticalement est dynamique, this is your best bet.

0

Vous ne savez pas, mais votre balise d'entrée est définie sur "float: right", donc sa hauteur ne sera pas prise en compte par le parent. Par conséquent, la hauteur du parent est probablement la hauteur de l'étiquette (je suppose que dreamweaver n'interprète pas correctement ce que font les navigateurs). Essayez de supprimer le flottant sur la balise d'entrée et voyez si cela fait une différence.

0

L'alignement vertical peut être appliqué uniquement aux éléments en ligne. La meilleure solution est de modifier votre code HTML et de le rendre comme dans this examples

+0

Mauvais L'alignement vertical ne fonctionne que sur les éléments avec 'display: table-cell' – You

+0

Les img ont un alignement vertical (voir par exemple http://www.w3schools.com/cssref /pr_pos_vertical-align.asp) –

0

Vous pouvez opter pour une solution « pas cher » et appliquer une padding-top à l'étiquette divs.

Questions connexes