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 :

Gerer line-height pour centrer verticalement


Sujet :

Centrer un élément en CSS

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Points : 265
    Points
    265
    Par défaut Gerer line-height pour centrer verticalement
    Bonjour,
    Voici ma question : comment peut on faire pour qu'un texte soit tout le temps centré verticalement, qu'il soit sur une ligne ou bien deux ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <p style="background-color:red; width: 150px; height: 50px; line-height:50px;">
    Une seule ligne 
    </p>
     
    <p style="background-color:red; width: 150px; height: 50px; line-height:25px;">
    Une seule ligne qui deborde sur la seconde
    </p>
    En effet en gérant line-height on peut faire ce que je veux. Mais ce n'est pas dynamique.

    Avez vous une solution autre que de passer par du js ?

  2. #2
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Toujours en jouant sur le line-height:

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    .verticale {
    	width:150px; 
    	height:150px;
    	line-height:150px;
    	background-color:red
    }	
     
    .verticale span { 
    	display:inline-block;
    	line-height:1.1 /* rétablir le line-height */
    }

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class="verticale">
    	<span>Une seule ligne qui deborde sur la seconde</span>
    </div>

    ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Points : 265
    Points
    265
    Par défaut
    Merci de ta réponse Macmillenium.
    J'ai testé le code que tu as proposé mais cela ne fonctionne pas (IE9, FF4).

    J'ai cependant trouvé quelque chose qui a l'air de marcher, mais ça n'utilise pas line-height.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div class="table">
    <p>Une seule ligne</p>
    </div>
     
    <div class="table">
    <p>Une ligne qui déborde sur la seconde </p>
    </div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    div.table {
    display:table;
    border:1px solid;
    width:150px;
    }
    div.table p
    {
    vertical-align:middle;
    display:table-cell;
    padding:1em;
    }

  4. #4
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Citation Envoyé par insane1 Voir le message
    J'ai testé le code que tu as proposé mais cela ne fonctionne pas (IE9, FF4).
    Code html : 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
     
    <!doctype html> 
    <html lang="fr"> 
     
    <head> 
    	<meta charset="utf-8" /> 
    	<title>sans titre</title>
    	<style> 
                    html, body { margin:0; padding:0 }
                    
                    .verticale {
                            width:150px; 
                            height:150px;
                            line-height:150px;
                            background-color:red
                    }       
     
                    .verticale span { 
                            display:inline-block;
                            vertical-align:middle;
                            line-height:1.1
                    }
            </style>
    </head> 
     
    <body>
     
    <div class="verticale">
    	<span>Une seule ligne qui deborde sur la seconde</span>
    </div>
     
    </body>
    </html>

    Citation Envoyé par insane1 Voir le message
    J'ai cependant trouvé quelque chose qui a l'air de marcher, mais ça n'utilise pas line-height.
    Sauf que display:table/table-cell n'est pas supporté par IE7.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Points : 265
    Points
    265
    Par défaut
    En effet la çà fonctionne. Au temps pour moi

    Merci de l'info, je vais privilégier ton code alors.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui, ça fonctionne pour deux lignes, mais l'alignement n'est toujours pas dynamique.

    Ce problème m'intéresse. Je serait curieux de savoir si Macmillenium a une solution pour aligner verticalement 2, 3 ou 4 lignes.
    J'avais lu quelque part que l'utilisation de vertical-align est très particulière. D'ailleurs quand j'essaie ce code :

    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
     
    <!doctype html> 
    <html lang="fr"> 
     
    <head> 
    	<meta charset="utf-8" /> 
    	<title>sans titre</title>
    	<style>			
    		.verticale {
    			height:150px;
    			vertical-align: middle;
    			background: green;
    			}
    	</style>
    </head> 
     
    <body>
     
    <div class="verticale">
    	texte
    </div>
     
    </body>
    </html>
    ...ça ne fonctionne pas du tout.

  7. #7
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Citation Envoyé par kéraunos Voir le message
    Oui, ça fonctionne pour deux lignes, mais l'alignement n'est toujours pas dynamique.
    Oups, dsl, il manquait un vertical-align:middle sur le span, j'ai édité mon dernier post.

    Citation Envoyé par kéraunos Voir le message
    J'avais lu quelque part que l'utilisation de vertical-align est très particulière. D'ailleurs quand j'essaie ce code :
    ...ça ne fonctionne pas du tout.
    C'est normal, dans ton exemple vertical-align ne peut pas être appliqué si le conteneur n'est pas de rendu table-cell, c'est l'une des particularités de cette propriété.

  8. #8
    Invité
    Invité(e)
    Par défaut
    D'accord.
    Et dans mon exemple, qu'est-il suffisant de modifier pouvoir utiliser display: inline-block (ou block tout court) pour .verticale ?

    Merci.

  9. #9
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Citation Envoyé par kéraunos Voir le message
    Et dans mon exemple, qu'est-il suffisant de modifier pouvoir utiliser display: inline-block (ou block tout court) pour .verticale ?
    je comprends pas, tu veux faire quoi exactement?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui c'est vrai que ce n'était pas très clair, voire pas français.

    Ce que je veux savoir, par rapport à mon exemple, c'est ce que j'ai besoin de modifier pour avoir un alignement vertical du contenu du div .verticale. Mais sans passer par un rendu de type table-cell.

  11. #11
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Citation Envoyé par kéraunos Voir le message
    avoir un alignement vertical du contenu du div .verticale. Mais sans passer par un rendu de type table-cell.
    Reprends mon code alors

    Cette technique consiste à:
    - Appliquer à .verticale un line-height = hauteur du bloc,
    - encapsuler le texte dans un span (ou autre) doté d'un display:inline-block, qui servira à rétablir le line-height,
    - aligner ce span verticalement à l'aide de vertical-align.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour centrer verticalement le texte dans un menu
    Par Greg12345 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 26/05/2010, 19h43
  2. [CR9] Centrer verticalement le texte
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 22/05/2009, 19h33
  3. Problème pour centrer verticalement dans un tableau
    Par navis84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 18/07/2006, 16h56
  4. [ETAT] problème pour centrer un sous-état
    Par tonio-lille dans le forum IHM
    Réponses: 13
    Dernier message: 11/10/2004, 12h28

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