IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

En-tête fixe d'un tableau ajusté horizontalement et ascenseur vertical


Sujet :

Tableau en CSS

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Par défaut En-tête fixe d'un tableau ajusté horizontalement et ascenseur vertical
    Bonjour,

    J'ai un petit souci avec un tableau qui s'ajuste horizontalement (width:100% et qui utilise une scrollbar (ascenseur) vertical.

    L'en-tête où se situe les lignes des colonnes descend en même temps que je baisse l'ascenseur et je voudrais qu'elle reste fixe.

    Voici mon code :

    Page HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div id='tableau_scrollbar'>
    	<table class='tableau'>
    		<tr>
    			<th class='tableau_entete'>Nom</th> //colonne en-tête
    		</tr>
    		<tr>
    			<td>texte</td> //ligne du tableau
    		</tr>
    	</table>
    </div>
    CODE CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .tableau{
    	width:100%;
    }
    div#tableau_scrollbar{
    	height: 300px;
    	overflow:auto;
    }
    Merci d'avance

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Bonsoir Dark Snake,

    Sans que cela ne résolve ton problème, une petite remarque déjà.

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .tableau{
    	width:100%;
    }
    div#tableau_scrollbar{
    	height: 300px;
    	overflow:auto;
    }

    Est incorrect.

    Pour donner un style à ta div, il faut utiliser ceci :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .tableau{
    	width:100%;
    }
    #tableau_scrollbar{
    	height: 300px;
    	overflow:auto;
    }

    Sinon, l'idée qui me vient actuellement serait de faire deux tableaux, le premier contenant simplement les entêtes des colonnes mais je vais voir s'il n'y a pas autre chose (ce qui m'étonnerait quand même un peu ^^ )
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    bonjour,

    essaye ce script

    Sinon je crois qu'un tel script a été proposé dans la FAQ ou dans les codes sources, mais je suis incapable d'y remettre la main dessus

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Auteur, le script reprend ce que j'ai proposé non?

    Par contre, l'exemple concret proposé sur le post a été hébergé sur un espace n'appartenant pas à développez et la source a été supprimée
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Auteur, le script reprend ce que j'ai proposé non?
    oui. Mais j'ai été un peu long à rédiger mon message. Je n'ai donc vu ton message qu'après avoir posté le mien

    Par contre, l'exemple concret proposé sur le post a été hébergé sur un espace n'appartenant pas à développez et la source a été supprimée
    oui, dans le message n°9 le lien est mort mais je faisais allusion au code contenu dans le message Bien sûr il faudra le mettre un peu à jour (ajouter un doctype, et corriger des petites erreurs )

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Par contre, l'exemple concret proposé sur le post a été hébergé sur un espace n'appartenant pas à développez et la source a été supprimée
    Sinon, on peut regarder le lien du premier message qui fonctionne toujours.

    Au passage, mettre div#idelement fonctionne aussi.

  7. #7
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Au passage, mettre div#idelement fonctionne aussi.
    Je teste ça dès demain.

    Pareil si on fait

    class.nomClasse ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    class.nomClass ?

    Je dirais plutôt div.nomClasse, oui.

  9. #9
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    U_u

    Autant pour moi, c'est juste la spécification du conteneur c'est ca? :/

    Bon bref, j'arrête les dégâts ^^'
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    S'applique à l'élément div ayant l'id nom_id.
    S'applique à l'élément ayant l'id nom_id contenu dans une div.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Par défaut
    Merci pour votre aide Deallyra et Bisûnûrs mais mon tableau à une largeur automatique (position : relative et width:100%), le script du 2ème message est un tableau fixe.
    Sinon je ne veux pas utiliser le javascript .
    Le problème avec mon code c'est que si je crée un tableau pour l'en-tête puis un pour le contenu, les colonnes ne seront pas alignées car les colonnes se redimensionnent suivant le contenu.
    Je voudrais donc spécifier dans mes balises (<th>) d'en-tête du tableau quelque chose comme "fixe".

    Merci pour votre aide

  12. #12
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Sans javascript, je pense qu'il faut s'emboîter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <style>
    #entete {
        font-weight: bold;
        text-align: center;
        margin: 0; padding: 0;
    }
    #wrapTable{
    	height: 300px;
    	overflow:auto;
    }
    #tableau{
    	width:100%;
    }
    </style>
     
    <div id='main'>
    	<p id='entete'>Nom</p> 
        <div id="wrapTable">
            <table id='tableau'>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
                <tr>		<td>texte</td> 		</tr>
            </table>
        </div>
    </div>

  13. #13
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Hum... Je pense avoir trouvé une bonne solution...

    Je peux posté ou au vu de mes bêtises antérieures je me tais?

    Non... De toutes façons je vais m'exprimer, trop contente d'avoir trouvé ^^

    la solution réside dans le z-index \^o^/

    Pour faire clair et simple.


    Ton tableau doit être alimenté par une requête, donc un langage serveur.

    Avec ce langage serveur, créé toi un tableau.
    Dans ce tableau, mets le résultat de ta requête.

    Ensuite, en HTML, crées toi dynamiquement le premier tableau, normalement. Le tableau que tu as en ce moment en fait ^^

    Ensuite, tu te crées un second tableau HTML, en z-index supérieur, avec un padding-top égal à la hauteur d'une ligne.

    Ceci, pour arriver au niveau de la seconde ligne, là où on commence à lire les enregistrements.

    Ensuite, simple, tu affiches les résultats de ton tableau fait en langage serveur.


    Ca fait bidouillage. Mais que celui qui me trouve en langage css un équivalent qui fonctionne bien et mieux, que celui ci me jette la première pierre
    (mais pas trop fort )
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  14. #14
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Ben je trouvais ma solution plus simple, sauf si la classe de la div englobante ( "main" dans mon code) ne peut être changé.
    En tous les cas, bravo pour avoir trouvé une solution et pour la démonstration claire qui va avec.

  15. #15
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    @jml94

    faut pas leur répéter mais en fait je n'ai pas comprit ta solution
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  16. #16
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    @jml94

    faut pas leur répéter mais en fait je n'ai pas comprit ta solution


    Disons que je prends une grande boite.
    A l'intérieur, je lui mets un titre en haut et une boite plus petite qui a un ascenseur et une table.

    SHAZAM !

    Et puisqu'on en est aux confessions, j'ai pas tout compris ta solution !

  17. #17
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Hum... Ce que je n'ai pas comprit de ta solution, c'est comment il gérait la taille des colonnes de la petite boite fixe en haut
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  18. #18
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    C'est quoi la petite boite en haut ? Le titre ou carrément la boite principale ?
    S'il s'agit du titre, dans mon exemple, c'est juste un paragraphe, donc pas de tailles de colonnes à gérer, mais cela pourrait devenir problématique s'il devait y avoir plusieurs colonnes à gérer. Mais ça doit bien se faire avec css je pense.

    Genre, à main levée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <style>
    #entete {
        font-weight: bold;
        text-align: center;
        margin: 0; padding: 0;
    }
    #wrapTable{
    	height: 300px;
    	overflow:auto;
    }
    #tableau{
    	width:100%;
    }
    #main col1 { width: 33%; }
    #main col2 { width: 20%; }
    #main col3 { width: 46%; }
    </style>
     
    <div id='main'>
    	<table id="header"><tr><th class="col1">Header1</th><th class="col2">header2></th><th class="col3">header3></th></tr></table>
        <div id="wrapTable">
            <table id='tableau'>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
                <tr><td class="col1">texte1</td><td class="col2">texte2</td><td class="col3">texte3</td></tr>
            </table>
        </div>
    </div>

  19. #19
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Oui ^^

    Mais non

    En fait, les colonnes de titres sont de tailles variables, fonctions de la plus grande propriété d'un attribut d'un enregistrement.

    Je ne sais pas si je suis claire

    La petite boite était le titre effectivement, j'aurais du me relire >.<
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  20. #20
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Oui ^^

    Mais non

    En fait, les colonnes de titres sont de tailles variables, fonctions de la plus grande propriété d'un attribut d'un enregistrement.
    Effectivement, si on veut garder ce comportement, ça risque d'être chaud. Et surtout pour des solutions comme la mienne ou la tienne où il y a deux tables, donc des largeurs de colonnes indépendantes.
    S'il existe une technique en css ou html, je suis preneur !

Discussions similaires

  1. Tableau avec en-tête fixe et largeurs de colonnes identiques
    Par arthuro45 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 24/08/2009, 10h34
  2. En-tête fixe d'un tableau ajusté horizontalement et ascenseur vertical
    Par Deciprog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 22
    Dernier message: 14/12/2008, 11h58
  3. Tableau à en-tête fixe
    Par Flobynaldo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 15h46
  4. Tableau ajustable dans un état
    Par charleshbo dans le forum Access
    Réponses: 3
    Dernier message: 21/03/2006, 08h03
  5. Largeur fix d'un tableau
    Par amika dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 01/11/2005, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo