2010-08-14 7 views
5

Cela devrait être incroyablement trivial, mais ce n'est pas le cas. J'ai une hauteur prédéfinie pour une ancre, et je voudrais placer le texte en bas.Comment placer du texte en bas quand il y a une hauteur prédéfinie!

<li><a class="my-text">My Text</a></li> 

J'ai utilisé le CSS suivant, qui ne fonctionne pas. Le texte apparaît toujours en haut.

a.my-text { 
    background-color:#cccc; 
    height:50px; 
    vertical-align:bottom; 
    width:100px; 
} 

L'idée est: Je veux aligner le texte sur le fond, mais s'il est un texte qui est plus d'une ligne, je veux que le flux de plus pour aller vers le haut, pas pousser tout le reste bas .. Des idées sur la façon dont cela pourrait être réalisé?

Répondre

2

Cela ne peut pas être fait en utilisant css et le code HTML que vous fournissez. Si vous mettez une durée supplémentaire dans l'ancre, il peut être fait:

a.my-text { 
    height: 50px; 
    display: block; 
} 
a.my-text span { 
    position: absolute; 
    bottom: 0; 
} 
+0

et a.my texte {display: block} pour la hauteur "travail" ... – darma

+0

vous voulez dire la position: absolue. 'position: relative; en bas: 0; 'ne bougera l'élément nulle part –

+0

Droite. Je suis un imbécile. Édité maintenant. –

2

Vous pouvez utiliser bottom:0px avec position:absolute dans l'ancre.

HTML

<li><a class="my-text">My Text</a></li> 

CSS

li { 
    position: relative; 
    height:200px; 
    border: 1px solid red; 
} 

a.my-text { 
    bottom: 0px; 
    border: 1px solid blue; 
    position: absolute; 
    background-color:#cccc; 
    width:100px; 
    height:50px; 
} 

Voir en jsfiddle.

1

Cela ne fonctionnerait certainement pas, car <a> ancres sont des balises en ligne, donc leur assigner des hauteurs et des largeurs est inutile. La propriété vertical-align détermine le positionnement des éléments en ligne par rapport à la ligne dans laquelle ils se trouvent, et non la position verticale du texte. (Voir http://reference.sitepoint.com/css/vertical-align) Pour autant que je comprends ce que vous demandez ne peut être fait. Cependant, il existe des alternatives, comme suggéré ci-dessus, pour obtenir des effets similaires.

1

Le problème avec votre code est que l'ancre ne répondra pas à hauteur/largeur car il s'agit d'un élément en ligne. Si vous ajoutez {display: block} à l'ancre, c'est maintenant un élément de bloc, mais, si je me souviens bien, vertical-align ne fonctionne pas sur le contenu des éléments de bloc. C'était la façon la plus simple que je pouvais penser à utiliser display: table-cell.

a.my-text { 
    background-color: #ccc; 
    height: 200px; width: 100px; 
    vertical-align: bottom; 
    display: table-cell; 
} 
+0

Scott, j'ai déjà utilisé cette solution il y a quelques temps, mais ça a causé un résultat bizarre pour le reste de mes CSS ... Je vais essayer encore une fois et voir ce qu'il se passe! – Mohamad

0

Il semble que vous avez juste besoin de se débarrasser de la règle de hauteur sur l'étiquette d'ancrage et utiliser quelque chose comme padding-top: 45px sur le li

+0

Non, cela ne fonctionnerait pas. Parce que si le texte d'ancrage occupe plus d'une ligne, alors le contenu sous l'ancre serait poussé vers le bas au lieu de pousser le texte d'ancrage vers le haut. – Mohamad