vertical-align: bottom

vertical-align: bottom - HTML/CSS - Programmation

Marsh Posté le 23-12-2003 à 20:13:32    

hello
 
J'ai un div avec  
vertical-align: bottom;
et ca marche pas le texte ce trouve vers le haut du div. C'est quoi l'erreur ? merci

Reply

Marsh Posté le 23-12-2003 à 20:13:32   

Reply

Marsh Posté le 23-12-2003 à 21:14:46    

merci j'ignorais que vertical-align: bottom; n'influencait pas directement le texte.
Mais malheureusement je n'ai pas reussi à faire ce que je veux le texte est toujours en haut.
 

Code :
  1. <div class="directory0">
  2.  <div class="directory0_l"></div>
  3.  <div class="directory0_r"><span class"directory">Welcome</span></div>
  4.  <div class="spacer"></div>
  5. </div>


Code :
  1. div.directory0
  2. {
  3. width: 100%;
  4. margin: 0;
  5. padding: 0;
  6. }
  7. div.directory0_l
  8. {
  9. width: 30px;
  10. height: 20px;
  11. margin: 0;
  12. padding: 0;
  13. float: left;
  14. background-image: url(../../img/main/dir1.gif);
  15. background-repeat:  no-repeat;
  16. background-position: left;
  17. background-color: #1773D0;
  18. }
  19. div.directory0_r
  20. {
  21. height: 20px;
  22. margin: 0;
  23. padding: 0;
  24. vertical-align: bottom;
  25. text-align: left;
  26. font-size: 10pt;
  27. font-weight: bold;
  28. color: #FFFFFF;
  29. background-image: url(../../img/main/dir2.gif);
  30. background-repeat:  no-repeat;
  31. background-position: right;
  32. background-color: #1773D0;
  33. }
  34. span.directory
  35. {
  36. margin: 0;
  37. padding: 0;
  38. vertical-align: bottom;
  39. }


Message édité par Big-Foot le 23-12-2003 à 21:15:31
Reply

Marsh Posté le 23-12-2003 à 21:34:39    

1. vertical-align ne s'applique pas à des blocs (ou alors à des cellules de tableau)
 
2. Ton texte est en haut parce que par défaut les DIV s'empilent les uns sur les autres.
 
 
Donc si tu veux mettre ton bloc en bas, le mieux est de le positionner en bas (avec le positionnement absolu) ce qui implique que le bloc conteneur (directory0) soit lui même positionné (un "position: relative;" suffira).
Lire l'article sur le positionnement dans la FAQ.


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 23-12-2003 à 21:58:55    

j'ai mis position: relative; sur directory0, et ca marche pas.
Mais en s'en fout de la position du div directory0 non ? c'est le div.directory0_r qui contient le texte.
Tu dit que les div s'empilent et que c'est pour ca que le texte ne s'alligne pas comme il faut, mais seul les div.directory0_l et div.directory0_r on un fond et donc c'est seulement l'alignement vertical par rapport à ces 2 div qui m'interresse, le div.directory0 n'est que "virtuel".

Reply

Marsh Posté le 23-12-2003 à 23:19:24    

Bon je viens de regarder un peu mieux ton code. Le mieux serait peut être de donner un padding-top à directory0_r, ce qui aura pour effet de faire descendre le texte (ton DIV n'est pas très haut).


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 24-12-2003 à 00:10:15    

Bon alors voila ce que je cherche a obtenir (le 1er qui est fait avec un tableau) :
 
http://membres.lycos.fr/bigfoot57/prob/dir.gif
 
mais j'obtient le 2ème, il y a un léger décalage du texte vers le heut et cpa bieng  :o  
 
Sur le 3ème j'ai rajouté le padding au directory0_r, mais ca joue pas, parce que les images d'arrière plan n'ont pas la même couleur que celui-ci. Et comme vous pouvez le voir la couleur bleu "dépasse"

Reply

Marsh Posté le 24-12-2003 à 00:50:13    

Attention, IE inclu le padding dans la hauteur alors que Mozilla le compte en plus (ce qui est le bon comportement)
 
Il faut passer par un petit "hack" : http://tantek.com/CSS/Examples/boxmodelhack.html


Message édité par gm_superstar le 24-12-2003 à 00:50:29

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 24-12-2003 à 15:41:17    

merci, mais désolé j'ai pas trop compris comment ca fonctionne et surtout comment appliquer ce truc a mon probleme  :(

Reply

Marsh Posté le 24-12-2003 à 15:59:19    

J'ai encore un autre problème mais celui-ci est plus important : j'arrive pas à aligner le contenu d'un div  (1 div et un tableau)  au centre. Comment est ce qu'il faut faire, j'ai essayer text-align: center; ou directement dans le div : <div align="center" mais aucun  n'aligne tout mon contenu au centre.
J'arrive à aligner le tableau au centre : <table align="center"> mais pas le div.

Reply

Marsh Posté le 24-12-2003 à 15:59:19   

Reply

Marsh Posté le 24-12-2003 à 16:51:54    

Si tu veux centrer un div (ou une table) :
 
pour le div à centrer :
margin-left: auto;
margin-right: auto;
 
Et pour corriger un bug d'IE :
 
pour le div contenant celui à centrer :
text-align: center;
 
pour le div à centrer : (pour rétablir l'alignement à gauche, à désactiver si tu veux que son contenu soit centré aussi)
text-align: left;


Message édité par antp le 24-12-2003 à 16:53:19

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-12-2003 à 19:59:25    

antp a écrit :

Si tu veux centrer un div (ou une table) :
 
pour le div à centrer :
margin-left: auto;
margin-right: auto;
 
Et pour corriger un bug d'IE :
 
pour le div contenant celui à centrer :
text-align: center;
 
pour le div à centrer : (pour rétablir l'alignement à gauche, à désactiver si tu veux que son contenu soit centré aussi)
text-align: left;


 
J'ai essayé ta méthode en rajoutant un nouveau div dans le div principal :

Code :
  1. style="margin-left: auto; margin-right: auto; text-align: center;"


Ca aligne tout le contenue mais ca fonctionne que dans IE.
 
J'ai essayer une autre méthode, aussi en rajoutant un div dans le div principal :
<div align="center">
 
Ca fonctionne sur moz IE netscape, mais pas sur opera.
 
Alors c'est quoi la méthode qui me permette de tout aligner au milieu dans tous les navigateurs si possible sans rajouter de div ?


Message édité par Big-Foot le 24-12-2003 à 20:00:01
Reply

Marsh Posté le 25-12-2003 à 12:38:59    

Je sais pas, je me perds dans tes explications :D
Tu dois aligner quoi ? Du texte ou des blocs ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-12-2003 à 13:42:49    

alors je vais essayer d'etre plus clair :D :
 
j'ai un div qui doit contenir les trucs les plus important de la page, le contenue quoi, et je voudrais que tout ce qui ce trouve dans ce div soit aligné au centre, que ce soit des tableau ou même des div.

Reply

Marsh Posté le 25-12-2003 à 14:18:47    

big-foot a écrit :

alors je vais essayer d'etre plus clair :D :
 
j'ai un div qui doit contenir les trucs les plus important de la page, le contenue quoi, et je voudrais que tout ce qui ce trouve dans ce div soit aligné au centre, que ce soit des tableau ou même des div.


 
Pour le centrage vertical dans un div : impossible.
 
Pour le centrage horizontal DANS un div : très simple :
 
- text-align: center; appliqué au DIV.
- margin: 0px auto 0px auto; appliqué aux éléments (non texte) que tu veux centrer dans le div.

Reply

Marsh Posté le 25-12-2003 à 17:31:14    

big-foot a écrit :

merci, mais désolé j'ai pas trop compris comment ca fonctionne et surtout comment appliquer ce truc a mon probleme  :(


 
Admettons que tu aies :
 
div.directory0_r {
  height: 15px;
  padding: 5px;
}
 
Pour Mozilla, la hauteur totale du DIV sera : 15 + 5 = 20 px.
 
Pour IE ce se sera 15px, avec seulement 10px utiles à l'intérieur du DIV (15 - 5 = 10px)
 
D'où l'idée du hack, qui consiste à utiliser un bug de IE pour qu'il ne lise qu'une partie des propriétés CSS :
 
div.directory0_r {
  padding: 5px;
  height: 20px;
  voice-family: "\"}\"";  
  voice-family:inherit;
  height: 15px;
}
 
IE s'arrêtera de lire à "height: 20px" alors que Mozilla ira jusqu'à la fin.
 
Donc pour IE la hauteur totale du DIV sera de 20px et pour Mozilla de 15 + 5 = 20px. Donc la même hauteur pour les 2 navigateurs :)
 
 
Sinon il y a un autre moyen pour régler (un peu) la hauteur du texte dans ton DIV est de jouer avec la propriété line-height. A toi de faire des essais.


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 25-12-2003 à 17:32:07    

big-foot a écrit :

alors je vais essayer d'etre plus clair :D :
 
j'ai un div qui doit contenir les trucs les plus important de la page, le contenue quoi, et je voudrais que tout ce qui ce trouve dans ce div soit aligné au centre, que ce soit des tableau ou même des div.


 
http://forum.hardware.fr/forum2.ph [...] 10#t229960


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 25-12-2003 à 17:39:44    

hermes le messager a écrit :


 
Pour le centrage vertical dans un div : impossible.
 
Pour le centrage horizontal DANS un div : très simple :
 
- text-align: center; appliqué au DIV.
- margin: 0px auto 0px auto; appliqué aux éléments (non texte) que tu veux centrer dans le div.


 
 :hello:  merci ca fonctionne, et sur tout les browsers en plus  :jap:

Reply

Marsh Posté le 25-12-2003 à 17:41:00    

gm_superstar a écrit :


 
Admettons que tu aies :
 
div.directory0_r {
  height: 15px;
  padding: 5px;
}
 
Pour Mozilla, la hauteur totale du DIV sera : 15 + 5 = 20 px.
 
Pour IE ce se sera 15px, avec seulement 10px utiles à l'intérieur du DIV (15 - 5 = 10px)
 
D'où l'idée du hack, qui consiste à utiliser un bug de IE pour qu'il ne lise qu'une partie des propriétés CSS :
 
div.directory0_r {
  padding: 5px;
  height: 20px;
  voice-family: "\"}\"";  
  voice-family:inherit;
  height: 15px;
}
 
IE s'arrêtera de lire à "height: 20px" alors que Mozilla ira jusqu'à la fin.
 
Donc pour IE la hauteur totale du DIV sera de 20px et pour Mozilla de 15 + 5 = 20px. Donc la même hauteur pour les 2 navigateurs :)
 
 
Sinon il y a un autre moyen pour régler (un peu) la hauteur du texte dans ton DIV est de jouer avec la propriété line-height. A toi de faire des essais.
 


 
ok je teste tout ca  :)

Reply

Marsh Posté le 28-12-2003 à 18:53:30    

rebonjours,
 
au lieu de recréer 10000 topics semblable je profite de celui-la pour ma question qui concerne un probleme similaire :
 
j'ai à peut près cette structure :
 

Code :
  1. <td>
  2. <div class="gauche">
  3. contenue1
  4. </div>
  5. <div class="droite">
  6. contenue2
  7. </div>
  8. <div class="spacer"></div>
  9. </td>
  10. div.gauche
  11. {
  12. float: left;
  13. margin: 0;
  14. padding: 0;
  15. border-style: solid;
  16. }
  17. div.droite
  18. {
  19. float: right;
  20. width: 250px;
  21. margin: 0;
  22. padding: 0;
  23. border-style: solid;
  24. }


 
En fait j'arrive pas a faire en sorte que le div de gauche prenne toute la largeur qui n'est pas prise par le div de droite qui lui doit être définie en px.
C'est bizzard, j'ai pourtant déjà reussi à faire des trucs très très semblables mais la j'y arrive pas, j'ai suremment dû oublier qq'chose.


Message édité par Big-Foot le 28-12-2003 à 18:53:49
Reply

Marsh Posté le 28-12-2003 à 19:01:15    

Il suffit que le div de gauche ne soit pas "float", non ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-12-2003 à 19:31:16    

si j'enlève le "float" du div gauche, il prend 100% de la largeur du "<td>" et donc celui de droite se retrouve en dessous :/

Reply

Marsh Posté le 28-12-2003 à 19:46:32    

Mets un margin-right de la taille du div de droite à celui de gauche.
Ou bien mets celui de droite dans celui de gauche.


Message édité par antp le 28-12-2003 à 19:46:58

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-12-2003 à 19:49:29    

ah oui merci ! javais fait comme ca deja une fois mais je me souvenais plus.
Mais ca me parait pas très propre comme méthode, c'est la seul ?

Reply

Marsh Posté le 28-12-2003 à 20:02:54    

en fait cette technique fonctionne seulement avec des position: absolute; non ?
Dans mon cas j'ai pas de "position: absolute;" et ca marche pas :(

Reply

Marsh Posté le 28-12-2003 à 20:13:18    

bah non
 
<div id="a">
  <div id="b">
  </div>
</div>
 
si b est en float: right ça doit faire ce que tu veux il me semble.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-12-2003 à 21:22:19    

Code :
  1. <div id="a">
  2.   <div id="b">
  3.   </div>
  4. </div>


quand je fait ca, en donnant un "margin" au div "a" c'est le toute qui a un "margin" :/
 
ce que j'ai fait, ca affiche le div a et b au bons endroits mais le probleme c'est qu'ils sont pas sur la meme "ligne" :

Code :
  1. <div id="a">fwgegfdx</div>
  2. <div id="b">gagfa</div>
  3. <div class="spacer"></div>
  4. div.a
  5. {
  6. margin: 0;
  7. padding: 0;
  8. margin-right: 300px;
  9. border-style: solid;
  10. }
  11. div.b
  12. {
  13. float: right;
  14. width: 250px;
  15. margin: 0;
  16. padding: 0;
  17. border-style: solid;
  18. }
  19. div.spacer
  20. {
  21. clear: both;
  22. }

Reply

Marsh Posté le 28-12-2003 à 21:25:06    

big-foot a écrit :


quand je fait ca, en donnant un "margin" au div "a" c'est le toute qui a un "margin" :/


 
Faut faire l'un ou l'autre :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-12-2003 à 21:46:20    

antp a écrit :


Faut faire l'un ou l'autre :o


 :whistle: oups
maintenant j'ai fait comme tu a dit mais ca m'affiche quand meme mes 2 div l'un au dessus de l'autre.

Reply

Marsh Posté le 28-12-2003 à 21:47:12    

Faut attendre le passage du grand maître des CSS (gm_superstar)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-12-2003 à 21:54:30    

:D  :jap: ben je vais chercher en attendant

Reply

Marsh Posté le 29-12-2003 à 00:11:12    

bon alors j'ai pas (encore) reussi, mais j'ai remarqué un truc interessant.
 
Ca ca marche pas, le div.a est tout petit en largeur :

Code :
  1. <div id="a">fwgegfdx</div>
  2.   <div id="b">gagfa</div>
  3.   <div class="spacer"></div>
  4.  
  5.  
  6. div.a
  7. {
  8. margin: 0;
  9. padding: 0;
  10. float: left;
  11. border-style: solid;
  12. }
  13. div.b
  14. {
  15. width: 250px;
  16. margin: 0;
  17. padding: 0;
  18. border-style: solid;
  19. }
  20.  
  21. div.spacer
  22. {
  23. clear: both;
  24. }


 
Par contre si au lieu de mettre la largeur en px pour le div.b je la met pour le div.a, tout fonctionne : le div.a prend ca largeur en px alors que le div.b prend la largeur du reste du <td>.
 
Le problème c'est que dans mon cas je dois absolument définir la largeur en px pour le div.b


Message édité par Big-Foot le 29-12-2003 à 00:11:52
Reply

Marsh Posté le 29-12-2003 à 20:57:26    

bon alors j'ai toujours pas trouvé comment faire. euh... t'est là gm_superstar ?

Reply

Marsh Posté le 31-12-2003 à 13:54:36    

ben... UP
je rappel que je veut faire ca avec des div :
 

largeur total : 100%
_______________________________________________________________
|                                      | largeur en px        |
|                                      |                      |
|                                      |                      |
|                                      |                      |
|                                      |                      |
|                                      |                      |
|                                      |                      |
---------------------------------------------------------------

Reply

Marsh Posté le 01-01-2004 à 20:09:21    

c'est impossible de faire ca avec des div ??

Reply

Marsh Posté le 01-01-2004 à 20:14:54    

big-foot a écrit :

c'est impossible de faire ca avec des div ??


 
Oui, ou en tous cas, sans utiliser des ruses immondes dans tous les sens, c'est impossible pour une raison très simple.
 
Tu as besoin d'un élément qui comporte plusieurs sous-éléments, or un div est unique. On peut évidemment mettre des divs dans un div, mais un div n'est pas un élément divisible comme une table.
 
Dans ton cas précis, la table reste de très loin la meilleure solution avec évidemment les propriétés indiquées dans les CSS.

Reply

Marsh Posté le 01-01-2004 à 20:20:11    

hum, mais dans ce cas cette table serait imbirqué dans une autre table... il me semble que ce soit pas très bien ca.

Reply

Marsh Posté le 01-01-2004 à 20:23:35    

big-foot a écrit :

hum, mais dans ce cas cette table serait imbirqué dans une autre table... il me semble que ce soit pas très bien ca.


 
Non, la table fait 100% de large, la cellule de droite la longueur en px que tu veux et la cellule de gauche prendra ce qui restera des 100%

Reply

Marsh Posté le 01-01-2004 à 20:24:13    

bon, faites pas attention aux couleurs immondes, c'est pour bien voir les blocs :o
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.   <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
  5.     <title>test</title>
  6.     <style type="text/css">
  7.       <!--
  8. div#main
  9. {
  10.   margin-right: 250px;
  11.   border: 1px green solid;
  12.   background: red;
  13.   color: yellow;
  14. }
  15. div#droite
  16. {
  17.   float: right;
  18.   width: 250px;
  19.   border: 1px pink solid;
  20.   background: blue;
  21.   color: white;
  22. }
  23. div.spacer
  24. {
  25.   clear: both;
  26. }
  27.       -->
  28.     </style>
  29.   </head>
  30.   <body>
  31. <div id="droite">
  32.   <ul>
  33.     <li>un</li>
  34.     <li>deux</li>
  35.     <li>trois</li>
  36.     <li>quatre</li>
  37.     <li>cinq</li>
  38.     <li>six</li>
  39.   </ul>
  40. </div>
  41. <div id="main">
  42.   <p>Il était une fois une page web qui ne voulait pas se mettre en forme, et qui foutait ses div n'importe où.</p>
  43.   <p>En général c'est à ce moment qu'arrive alors gm_superstar pour remettre de l'ordre dans tout ça.</p>
  44.   <p>Mais en cette période de fêtes de fin d'année, il n'est pas là.</p>
  45.   <p>Le pauvre forumeur doit alors se contenter d'un modo/admin qui tente de faire marcher ce bidule.</p>
  46.   <p>Là on espère que ça fonctionnera et que ça conviendra, parce que ça traîne depuis quelques jours, et c'est pas possible qu'un truc si simple soit si compliqué.</p>
  47.   <p>On risquerait de se laisser tenter de retourner aux tableaux, ou - pire - aux frames.</p>
  48. </div>
  49. <div class="spacer"><hr /></div>
  50.   </body>
  51. </html>


Message édité par antp le 01-01-2004 à 20:28:02

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-01-2004 à 20:24:42    

je disait que c'est pas super parce que ca fait pas très propre, mais ca passe le validateur il me semble.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed