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 :

[QR] Comment s'affranchir définitivement des tableaux ? [FAQ]


Sujet :

Tableau en CSS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut [QR] Comment s'affranchir définitivement des tableaux ?
    Salut!

    Nous connaissons tous que les consignes du W3C concernant les tableaux, seulement le problème que l'on peut rencontrer souvent...

    QUESTION
    Comment remplacer les tableaux par des conteneurs <div> afin d'obtenir un positionnement automatique centré dans la page et surtout, comment obtenir un conteneur qui s'ajuste à son contenu comme savent si bien le faire les tableaux...?

    REPONSE
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div style="position:relative;right:50%;float:right;">
      <div style="position:relative;left:50%;">
        ...Votre contenu ici...
      </div>
    </div>

    Cette solution a été donnée par Candygirl. Dans ce sujet par exemple, vous verrez que la solution n'était pas aussi évidente que cela : Par défaut, le <div> s'étend sur toute la largeur de la page...
    et float=center n'existe pas !

    PS : N'hésitez pas à ajouter vos remarques à la suite de ce message.

    Cordialement, Sub0

  2. #2
    Membre Expert Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Par défaut
    Bonjour SubO,
    très intéressant en effet. Bravo CandyGirl , cela permet de s'affranchir
    d'une largeur fixe obligatoire, que ce soit pour le centrage via marges auto ou via le positionnement absolue et marges négatives.

    A noter qu'on peut obtenir pratiquement (variation de la largeur de l'élément centré différente lorsqu'on diminue le viewport) le même résultat avec le positionnement absolue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div style="position: absolute; right:50%;">
      <div style="position:relative;left:50%; background:#009900">
        ...Votre contenu ici......Votre contenu ici......Votre contenu ici.......
      </div>
    mais que si un contenu doit passer sous l'élément à centrer, alors la solution de CandyGirl est la seule possibilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div style="position: relative; float:right; right:50%;">
      <div style="position:relative;left:50%; background:#009900">
        ...Votre contenu ici......Votre contenu ici......Votre contenu ici.......
      </div>
    </div>
      <div style="clear: right;">
        la Suite....
      </div>

  3. #3
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Merci de complèter cette QR car elle n'est terminée en fait, il manque encore quelques améliorations pour obtenir (à peu près) les mêmes comportements qu'un tableau... Par exemple, le centrage vertical du conteneur où Candygirl nous a encore montré ces talents de développeuse :
    Citation Envoyé par Candygirl Voir le message
    Le centrage vertical est plus problématique vu le comportement par défaut différent et la contrainte de l'utilisation des % liée à un height explicitement défini sur le parent.

    Le display:table et table-celle est une bonne manière d'y parvenir, mis à part le non support par IE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    html, body {
      display:table;
      width:100%;
      height:100%;
    }
     
    body {
      display:table-cell;
      vertical-align:middle;
    }
    On peut combler pour IE, par exemple à l'aide de JS directement injecté ds le css, via un commentaire conditionnel; qqch du genre:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!--[if IE]>
     
      <style type="text/css">
                    div {
                            position:relative;
                            top:expression(document.body.clientHeight<=this.offsetHeight ? "0" : (document.body.clientHeight-this.offsetHeight)/2+"px");
                    }
            </style>
    <![endif]-->

    Autrement si la hauteur est connue (contraignant), on peut utiliser la technique du margin négatif doublé du positionnement relatif, mais il faudra être attentif au cas critique ou l'élément est plus haut que la fenêtre (un min-height de la hauteur de l'élément suffit, il me semble, à règler le pb sauf sur IE6-).

    Le plus simple à mettre en oeuvre et compatible tous nav niveau centrage vertical reste l'utilisation d'un tableau
    Je ne savais même pas que l'on pouvait injecter un code JS dans du CSS...
    Elle est très forte!

  4. #4
    Membre Expert Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Par défaut
    Intéressant... c'est vrai qu'on oublie parfois de passer par JS par purisme
    ou du fait que l'on sait qu'environ 5% des utilisateurs auront JS désactivé
    mais ces 5% ne sont pas prouvés, certains affirment que ce chiffre est excessif.
    Bref en ce qui me concerne je trouve ça trop contraignant s'agissant de l'affichage. Le principale est de s'assurer que le cintenu et la navigation est bien accessible une fois JS désactivé.

    Juste une remarque:
    pour éviter l'apparition des scrollbars dans IE, ajouter un overflow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    html, body {
      display:table;
      width:100%;
      height:100%;
      overflow:hidden;
    }


    Pour ma part je m'étais déjà penché avec un des membres d'Alscreations sur le centrage vertical de plusieurs lignes de texte en exploitant Inline-block (enfin implémenté par Firefox3!) et table-cell d'aprés mes souvenirs. Si ça vous intéresse...

    Citation Envoyé par Sub0 Voir le message
    Je ne savais même pas que l'on pouvait injecter un code JS dans du CSS...
    Elle est très forte!
    On l'utilise par exemple pour qu'IE6 gère la transparence des PNG 32 bits dans une feuille de style IE appelée via commentaire conditionnels. Mais attention à ne pas l'utiliser dans la CSS principale, je crois qu'injecter du JS dans une CSS fait perdre le mécanisme de mise en cache par le navigateur.

  5. #5
    Membre Expert
    Avatar de Candygirl
    Femme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 912
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Par défaut
    Citation Envoyé par Erwan31 Voir le message
    Le principale est de s'assurer que le cintenu et la navigation est bien accessible une fois JS désactivé.
    +1

    Pour ma part je considère le centrage vertical comme un "gadget" et n'estime donc pas dramatique si, pour les qq utilisateurs de IE à avoir désactivé le javascript, l'élément n'est centré qu'horizontalement; cela ne nuira pas à la consultabilité.

    Autrement j'ai raté un mot dans mon text recopié ci-desssus. Je propose de mettre un min-height au body de la hauteur de l'élément pour s'affranchir du problème du contenu qui disparaît lors d'un redimensionnement de fenêtre inférieure à la taille de l'élément centré par le biais des marges négatives.

    Oui, perso le centrage à l'aide d'un inline-block m'intéresse. Je n'ai jamais creusé la piste très à fond, dépitée par l'interprétation assez différente qu'en fesaient opera et IE

    Citation Envoyé par Sub0 Voir le message
    Elle est très forte!
    Arf... je n'ai rien inventé ; je teste juste 2-3 idées qui me viennent en consultant d'autres sites. Par exemple je dois avoir découvert l'utilisation du expression() quand je cherchais à émuler max-width sur IE6 et que j'étais tombées sur ce site
    Les bons réflexes:
    • avant de poser une question:
      règles | faq | tutoriels | recherche
    • clarté, politesse, vocabulaire et orthographe soignés = efficacité
    • remercier ceux qui ont pris le temps d'aider et :resolu: si c'est le cas

  6. #6
    Membre Expert Avatar de Erwan31
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2 177
    Par défaut
    Ok, pour le centrage vertical Gcyrillus a trouvé une solution ici:
    http://yidille.free.fr//plux/valign/...vertical-align

    Voila la solution que je proposais pour IE:

    Citation Envoyé par Erwann
    Dans le cas d'un texte de hauteur variable les choses se corsent un peu :
    comme vertical-align se base sur la taille de font-zize, l'astuce consiste
    à donner à l'élément parent (ici le <p>) une hauteur de font-zize
    équivanvente à 100px (hauteur de ton image).

    Appliquer ensuite un vertical-align:middle au texte n'aura en principe
    pour effet que de centrer la boîte en-ligne (valeur font-size+interligne) de la première ligne du texte.
    Un inline-block (non implémenté par Firefox) rectifira le tir en centrant
    verticalement la boîte de ligne (le bloc de texte complet).

    Certe c'est un peu tordu mais pourquoi aprés tout ne pas utiliser tout le potentiel de CSS pour arriver à ses fin.

    Exemple de code avec commentaires :
    Cette méthode suppose une taille de texte de base à 75% et une taille
    de police du navigateur standard : 16px

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    p {font-size: 8.33em;} /* pour conserver une taille de police relative :16 x 0.75 x 8.33 = 100px*/
     
    span.texte {
    	display:inline-block;
    	font-size: 0.12em; /*on récupère la taille par default : 12px*/
    	vertical-align: middle;
    }

Discussions similaires

  1. Comment afficher un arraylist des tableaux
    Par Nawel_Hafsa dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 15/06/2012, 13h12
  2. Réponses: 0
    Dernier message: 13/04/2009, 23h40
  3. Réponses: 3
    Dernier message: 21/06/2007, 18h48
  4. comment casser les coins des tableaux
    Par somatino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/11/2006, 09h24
  5. Réponses: 4
    Dernier message: 21/09/2004, 21h25

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