2010-04-29 16 views
3

Je veux pouvoir définir la hauteur de la table et forcer les cellules à défiler individuellement si elles sont plus grandes que la table.Comment faire un scroll de cellule de table défini par CSS?

Consultez le code suivant: (voir en action here)

<div style="display: table; position: absolute; 
    width: 25%; height: 80%; min-height: 80%; max-height: 80%; 
    left: 0%; top: 10%; right: 75%; bottom: 10%; border: solid 1px black;"> 
    <div style="display: table-row;"> 
     <div style="display: table-cell; border: solid 1px blue;"> 
      {Some dynamic text content}<br/> 
      This cell should shrink to fit its contents. 
     </div> 
    </div> 
    <div style="display: table-row;"> 
     <div style="display: table-cell; border: solid 1px red; 
      overflow: scroll;"> 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
      This should only take up the remainder of the table's vertical space. 
     </div> 
    </div> 
</div> 

Si vous ouvrez ce code (dans IE8, dans mon cas), vous remarquerez que la deuxième cellule s'inscrit dans la table bien quand le navigateur est maximisé. En théorie, lorsque vous réduisez le navigateur (obligeant la table à rétrécir également), une barre de défilement verticale doit apparaître à l'intérieur de la deuxième cellule lorsque la table devient trop petite pour contenir tout le contenu. Mais en réalité, la table croît verticalement, au-delà des limites définies par les attributs CSS height.

Espérons que je l'ai expliqué ce scénario suffisamment ...

Est-ce que quelqu'un sait comment je peux obtenir ce travail?

+0

Vous ne pouvez pas faire cela avec une table normale? Semble excessivement hacky. – fig

+0

@ fig-gnuton: En fait, une table ordinaire ne fonctionnait pas non plus (sans parler de l'archaïsme). Les tables HTML que j'ai essayées n'ont jamais répondu à une hauteur définie en premier lieu, et encore moins défilé correctement. Cela peut avoir quelque chose à voir avec le fait que je les utilise au milieu d'un tas de code XHTML beaucoup plus moderne alimenté par ASP.NET. Je n'ai jamais vu personnellement les tables HTML jouer bien dans ce scénario ... – Giffyguy

+0

Giffyguy, noté, affichant une réponse. – fig

Répondre

1

Une question très ancienne; mais toujours n ° 2 dans Google quand j'ai cherché le même sujet.

La solution simple que j'ai trouvé est d'envelopper le contenu du « besoin de faire défiler div » dans un autre div. Je ne sais pas pourquoi; mais les éléments avec "display: table-cell" ne défilent pas. Mais les éléments à l'intérieur d'eux peuvent. Alors mettez un div à l'intérieur et réglez-le pour faire défiler!

1

Pour obtenir ce comportement, vous devrez peut-être tout simplement éviter le modèle de table CSS, et créez votre propre écran de style table flottante, réglage de largeurs/hauteurs, etc.

+0

Ma seule préoccupation avec cette solution est que j'essaie d'éviter de rendre ceci manuellement en JavaScript. J'ai essayé d'obtenir JavaScript pour définir la taille de ces éléments pour quelques semaines, et j'ai décidé qu'une solution purement déclarative est préférable. Est-ce vraiment impossible? – Giffyguy

+0

@Giffyguy, je ne voulais pas dire que vous deviez utiliser JavaScript. Suggérait juste en utilisant CSS typique. Mais peut-être que je ne comprends pas ce que tu cherchais. – fig

+0

Intéressant. Peut-être que c'est moi qui n'obtient pas ce que vous suggérez. Donc, vous dites que si j'utilise des div séparés pour tout, les faire flotter où je veux, et définir les tailles moi-même, tout devrait fonctionner, non? Le problème est que le contenu est dynamique, chargé à partir d'une base de données et de taille inconnue. Je veux juste pouvoir en montrer autant que possible, mais je suppose que des tailles fixes pour les divs seraient un règlement acceptable à court terme, à tout le moins. – Giffyguy