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 éclairé
    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
    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 : 39
    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
    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 éclairé
    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
    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 : 39
    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
    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 éclairé
    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
    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 : 39
    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
    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 : 39
    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
    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 : 39
    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
    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