111 votes

Utilisation de la position relative/absolue dans un TD ?

J'ai le code suivant :

<td style="position: relative; min-height: 60px; vertical-align: top;">
    Contents of table cell, variable height, could be more than 60px;

    <div style="position: absolute; bottom: 0px;">
        Notice
    </div>
</td>

Cela ne fonctionne pas du tout. Pour une raison quelconque, la commande position:relative n'est pas lue dans le TD et le DIV de notification est placé en dehors du conteneur de contenu en bas de ma page. J'ai essayé de placer tout le contenu du TD dans un DIV, par exemple :

<td>
    <div style="position: relative; min-height: 60px; vertical-align: top;">
        Contents of table cell, variable height, could be more than 60px;

        <div style="position: absolute; bottom: 0px;">
            Notice
        </div>
    </div>
</td>

Cependant, cela crée un nouveau problème. Comme la hauteur du contenu de la cellule de tableau est variable, le DIV de notification n'est pas toujours au bas de la cellule. Si une cellule de tableau s'étend au-delà du repère de 60px, mais qu'aucune des autres cellules ne le fait, alors dans les autres cellules, le DIV de notification se trouve à 60px vers le bas, au lieu d'être en bas.

0 votes

Y a-t-il une raison d'utiliser le tableau ? Je suppose que le reste du contenu du tableau va déplacer le contenu de cette cellule. Si le tableau est nécessaire, vous pouvez utiliser deux lignes en haut avec valign=top et en bas avec valign=bottom.

0 votes

Si vous utilisez des tableaux à des fins de mise en page, je vous le déconseille. Utiliser des tableaux pour afficher des données est une bonne chose, mais ce n'est pas la meilleure solution pour la mise en page.

5 votes

C'est pour un calendrier... donc une grille de tableau est essentielle : 8wayrun.com/events/monthly/1.2011

194voto

avernet Points 10603

En effet, selon CSS 2.1 l'effet de position: relative sur les éléments de la table n'est pas définie. En voici un exemple, position: relative a l'effet désiré sur Chrome 13, mais pas sur Firefox 4. Votre solution ici est d'ajouter un div autour de votre contenu et mettre les position: relative sur ce point div au lieu de la td . L'exemple suivant illustre les résultats obtenus avec l'option position: relative (1) sur un div bon), (2) sur un td (pas bon), et enfin (3) sur une div à l'intérieur d'un td (encore bon).

On Firefox 4

<table>
  <tr>
    <td>
      <div style="position:relative;">
        <span style="position:absolute; left:150px;">
          Absolute span
        </span>
        Relative div
      </div>
    </td>
  </tr>
</table>

29 votes

La hauteur du div ne sera pas de 100%, donc positionnement relatif en bas : 0 n'a aucun effet.

1 votes

Notez que le "span absolu" dans cet exemple n'affectera pas la hauteur du td, ce qui rend l'utilisation du tableau inutile.

0 votes

@Softlion : Pourquoi ne pas envelopper le contenu entier de la td à l'intérieur d'un div fixé à width: 100% y height: 100% appliquer le remplissage de la td à la div, et le définir comme suit relative ? L'idée est de créer une fine couche contenante juste au-dessus du td qui agit comme le td en soi, mais c'est un div . Cela a fonctionné pour moi.

5voto

Cette astuce convient également, mais dans ce cas, les propriétés d'alignement (milieu, bas, etc.) ne fonctionneront pas.

<td style="display: block; position: relative;">
</td>

2voto

Le contenu de la cellule du tableau, de hauteur variable, pourrait être supérieur à 60px ;

<div style="position: absolute; bottom: 0px;">
    Notice
</div>

0voto

Kyle Points 422

En ce qui concerne votre deuxième tentative, avez-vous essayé d'utiliser l'alignement vertical ? Soit

<td valign="bottom">

ou avec css

vertical-align:bottom

0 votes

Cela ne fonctionnerait pas... si je faisais cela, le contenu de la cellule du tableau serait espacé de 60px du bas ; au lieu d'être en haut.

-2voto

daigorocub Points 194

Fonctionne également si vous faites un "display : block ;" sur le td, détruisant l'identité du td, mais fonctionne !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X