2010-01-12 7 views
2

Dans l'exemple suivant, j'essaie de placer l'enfant div (le rectangle rose) au bas de son div parent. J'ai essayé d'utiliser la suggestion que j'ai trouvé this stackoverflow thread mais cela n'a pas aidé. Une idée?CSS - comment positionner l'élément au fond de son conteneur parent?

<html> 
<style type="text/css"> 
    .a {   
     background: gray; 
     height: 80px; 
    } 
    .b { 
     background: pink; 
     float: right;        
     bottom: 0px; 
    } 
</style> 
<body> 
<div class="a"> 
    the parent 
    <div class="b"> child 
    </div> 
</div> 
</body> 
<html> 
+0

Je ne suis pas tout à fait sûr de comprendre ce que vous entendez par « mettre au fond ». Pourriez-vous nous donner un exemple plus détaillé? – ALOToverflow

+0

pour être aligné sur le fond. pour "coller" au fond - que le bord inférieur du rectangle rose sera sur la même ligne avec le bord inférieur du rectangle gris. – GyRo

Répondre

2

Edit: HTML complet pour montrer ce qui est discuté dans les commentaires.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<style type="text/css"> 
    .a {   
     background: gray; 
     position: relative; 
    } 
    .b { 
     background: pink; 
     position: absolute; 
     bottom: 0px; 
     right: 0px; 
    } 
</style> 
<body> 
<div class="a"> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ut quam sapien, id dictum purus. Ut vel consectetur justo. Sed suscipit justo ullamcorper diam interdum laoreet pulvinar nisl laoreet. Sed sem est, feugiat commodo bibendum vel, laoreet ac sapien. Fusce nisl nulla, commodo ut ultricies ut, iaculis a dolor. Nunc ultrices elit at tellus scelerisque vel vestibulum justo pretium. Suspendisse potenti. Suspendisse nec felis sem. Donec at tellus dolor, vehicula placerat lacus. Ut non libero at massa convallis imperdiet non rhoncus tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc nibh velit, congue quis tincidunt sed, feugiat a turpis. Phasellus erat justo, dictum non iaculis sit amet, auctor quis neque. Cras leo tortor, consequat non tincidunt sed, lacinia ut nibh. Etiam eu mollis quam. In eu felis velit, at bibendum sapien. Aenean sed est urna. Sed dignissim dapibus dolor sed pellentesque. Aliquam viverra ipsum sit amet justo gravida in facilisis sapien volutpat. 

    <p>Suspendisse commodo vulputate nunc, vitae commodo tellus varius eu. Donec adipiscing diam vel felis blandit lobortis. Donec et turpis nunc. Curabitur ac elementum mi. Aenean libero ipsum, lacinia sit amet ornare sed, sollicitudin quis libero. Vestibulum ullamcorper ullamcorper luctus. Aenean pretium ornare tempor. Sed ultricies eros sem. Aenean placerat tristique tellus nec sodales. Proin sed justo non libero condimentum commodo. Quisque sed nisl nisi, vel mattis nisl. Phasellus rhoncus pharetra egestas. Quisque nec arcu ac neque placerat rutrum. In feugiat justo ac orci dignissim rhoncus. Mauris vitae fringilla magna. 

    <p>Nam sagittis erat id sapien lacinia ultrices. Pellentesque ultrices, justo vitae blandit convallis, felis mi laoreet sem, in pharetra libero mauris eget nisl. Etiam in mi eget elit bibendum consectetur et nec nibh. Curabitur in justo arcu. Morbi eget venenatis enim. Duis tempor quam lacinia elit consequat sit amet blandit dolor vulputate. Aenean massa libero, suscipit eu tristique id, imperdiet pellentesque justo. Proin rutrum erat sit amet orci iaculis ut lobortis turpis sagittis. Nam luctus mollis mi, nec laoreet urna semper vitae. Pellentesque in massa enim. Etiam fermentum urna vitae lorem consequat pretium. Maecenas id ligula diam, id consectetur purus. Vestibulum libero velit, tempor hendrerit posuere ut, rutrum nec velit. Suspendisse id pulvinar erat. Sed vulputate, nibh id vulputate vestibulum, dolor elit tincidunt est, sed varius neque tellus tincidunt erat. Nunc volutpat eros in diam semper dictum. Quisque ut ligula felis. 

    <p>Ut pharetra feugiat nisi eu viverra. Praesent sollicitudin iaculis elit, ac lobortis ante consectetur sed. Nullam sit amet enim eget massa dapibus molestie. Donec orci diam, tempor sit amet aliquet eget, placerat in nulla. Sed et sollicitudin mi. Donec pulvinar elit pharetra urna ornare sodales. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas et mi libero. Ut et ipsum nec enim adipiscing pellentesque a nec quam. Pellentesque viverra, enim id auctor lacinia, turpis leo blandit odio, et luctus orci purus at nunc. Morbi eu sem id diam aliquam egestas. Vestibulum hendrerit lobortis est a convallis. Nunc quis quam odio, a eleifend dolor. 

    <p>Vivamus sollicitudin convallis diam, ut luctus ipsum viverra in. Morbi sit amet sapien urna, sit amet dictum nisi. Duis elit tortor, iaculis nec feugiat in, aliquam ut nisl. Nulla scelerisque sagittis aliquam. Ut tempus auctor tempus. Aliquam auctor vulputate volutpat. Praesent libero orci, volutpat a volutpat ac, vulputate at enim. Phasellus semper sem sed velit bibendum tempus. Aenean ut mauris nisl. Nam sit amet ipsum arcu. Phasellus pretium venenatis egestas. Ut in nulla sem. Proin aliquet facilisis lectus non consequat. Nullam vel magna et ligula viverra sagittis. Fusce in massa in quam vehicula convallis. Nullam placerat erat in nunc eleifend sed dapibus elit tempor. 

    <p>Aliquam in erat mi. Suspendisse dui dui, facilisis ac lobortis id, mollis quis enim. Aliquam erat volutpat. Sed in porta arcu. Maecenas aliquam congue sem, at scelerisque odio pharetra ac. In egestas rutrum cursus. Aliquam erat volutpat. Etiam a libero risus. Morbi odio eros, sollicitudin vel mattis vel, aliquet a elit. Suspendisse vel lectus risus, in iaculis ipsum. Etiam vitae justo nibh, non bibendum purus. Quisque mi erat, accumsan sit amet fringilla eu, rhoncus sed ipsum. Ut ac leo a nunc accumsan placerat at ut mauris. Aliquam imperdiet urna urna. 

    <div class="b"> child 
    </div> 
</div> 
</body> 
<html> 
+0

Pourquoi cela est-il incorrect? Je viens de le tester ... –

+0

Je ne comprends pas le vote négatif, donc je suis en train de vous voter (pour avoir fourni une bonne réponse) pour restaurer un peu de karma. Bien que je suggère que l'explication de votre réponse pourrait avoir aidé, étant donné que la question implique le nouveau CSS, ou inexpérimenté avec, CSS. –

+0

Je ne savais pas que CSS avait un raisonnement derrière :) –

2

rendre le parent "position: relative" et l'enfant "position: absolute". Ensuite, vous pouvez placer l'enfant "droite: 0; fond: 0"

<html> 
<style type="text/css"> 
    .a {    
     position: relative; 
     background: gray; 
     height: 80px; 
    } 
    .b { 
     background: pink; 
     position: absolute;   
     bottom: 0px;  
     right: 0px; 
    } 
</style> 
<body> 
<div class="a"> 
    the parent 
    <div class="b"> child 
    </div> 
</div> 
</body> 
<html> 
+0

Parfait, merci :) Je comprends toujours cela mélangé. – gakera

1

Pour utiliser la position des attributs (top, right, bottom, left), doit être relative, absoluteposition attribut CSS de l'élément, ou fixed.

De plus, les positions seront calculées par rapport au parent de décalage de l'élément. Afin de les rendre relativement à votre .a élément, il doit avoir position: relative.

Dans votre cas, vous devez écrire

.a { 
    background: gray; 
    height: 80px; 
    position: relative; 
} 

.b { 
    background: pink; 
    position: absolute; 
    right: 0px; 
    bottom: 0px; 
} 
+0

Et si je ne peux pas rendre la position parent relative? Que peut-on faire dans ce cas? – GyRo

+0

Pourquoi ne pouvez-vous pas rendre le parent 'position: relative'? – SLaks

0

.B a besoin position:relative; positionnerait absolue en fonction de la taille de la fenêtre, et non à ses parents.

il y a aussi vertical-align qui vous donne un « vrai » alignement de fond, mais sa seule utilisable avec les propriétés d'affichage de table comme table-cell

0

La meilleure façon est d'utiliser par rapport/absolu (comme mentionné par un tas d'autres réponses). Une alternative (si le parent et l'enfant ont connu des hauteurs) est de fixer une marge supérieure sur l'enfant:

.a {   
    background: gray; 
    height: 80px; 
} 

.b { 
    background: pink; 
    float: right;  
    height: 20px; 
    margin-top: 60px;      
} 
Questions connexes