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 :

Centrage vertical de texte dans un div en position absolute


Sujet :

Centrer un élément en CSS

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut Centrage vertical de texte dans un div en position absolute
    Bonjour,

    Le titre dit presque tout. Je cherche à centrer verticalement un texte, qui peut faire plusieurs lignes, dans un div en position absolute.

    Je me contenterais d'une solution qui fonctionne dans Chromium vu que c'est le seul navigateur qui sera utilisé.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 039
    Points
    7 039
    Par défaut
    une idée me vient a l'esprit pour ton problème :
    <div>
    <center>
    <p>
    ton texte ici
    </p>
    </center>

    </div>
    et si cette solution ne te convient pas je pense que tu devra obligatoirement passer par les CSS
    "L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
    - Benjamin Franklin

    De l'aide en Javascript , consultez la FAQ JS.

    De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par kdmbella Voir le message
    une idée me vient a l'esprit pour ton problème :
    <div>
    <center>
    <p>
    ton texte ici
    </p>
    </center>

    </div>
    Center ce n'est pas pour le centrage horizontal ?

    Citation Envoyé par kdmbella Voir le message
    et si cette solution ne te convient pas je pense que tu devra obligatoirement passer par les CSS
    Mais je veux le faire en CSS.

    Merci pour la réponse en tous cas.

  4. #4
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 374
    Points
    19 374
    Par défaut
    Bonjour,

    Ton texte est directement dans le div ?
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par FirePrawn Voir le message
    Ton texte est directement dans le div ?
    Non, il est dans une balise <p>

  6. #6
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 374
    Points
    19 374
    Par défaut
    Tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #id_de_ton_bloc {
         display:table-cell;
         vertical-align:middle;
    }
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par FirePrawn Voir le message
    Tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #id_de_ton_bloc {
         display:table-cell;
         vertical-align:middle;
    }
    Ça ne marche pas, c'est pour ça que j'ai précisé que mon div est en position absolute.

    Merci quand même.

  8. #8
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 039
    Points
    7 039
    Par défaut
    ton div en position absolute est ce que c'est une contrainte ou alors tu peux t'en passé ?
    "L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
    - Benjamin Franklin

    De l'aide en Javascript , consultez la FAQ JS.

    De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par kdmbella Voir le message
    ton div en position absolute est ce que c'est une contrainte ou alors tu peux t'en passé ?
    C'est malheureusement une contrainte.

  10. #10
    Membre expérimenté

    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 049
    Points : 1 689
    Points
    1 689
    Billets dans le blog
    2
    Par défaut Alignement vertical de texte dans une div
    Je propose une solution qui n'est pas la plus simple mais qui pourra peut-être fonctionner.
    Je préciserais la hauteur de la div et puis je mettrais un padding au dessus et en dessous (par ex. en auto ou en pourcentage: par ex. 10% au-dessus et en dessous); ou en jouant sur le texte dans le paragraphe en précisant l'espace à laisser au-dessus et en dessous (càd la hauteur de la div moins l'espace occupé par le texte (4 lignes de texte dans mon exemple soit 4 em avec 3 em au-dessus et 3 em en dessous pour faire 10 au total)).
    Au lieu des em, il est bien sûr possible d'utiliser des px.

    Comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div id="div1">
          <p>
            texte 4 lignes
          </p>
    </div>
    en CSS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #div1{
            height: 150px;
            padding-top: auto;
            padding-bottom: auto;
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    p{
            height: 10em;
            padding-top: 3em;
            padding-bottom: 3em;
    }

  11. #11
    Membre expérimenté

    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 049
    Points : 1 689
    Points
    1 689
    Billets dans le blog
    2
    Par défaut Centrer verticalement du texte dans une div
    Il y a tout simplement en CSS la propriété line-height ; il faut spécifier la même hauteur que la hauteur de la <p>. Line-height ne fonctionne en général que s'il n'y a qu' une seule ligne de texte, mais j'ai constaté que parfois cela fonctionne avec plusieurs lignes;pourquoi ne pas essayer tout simplement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div>
    <p>
        texte    
    </p>
    </div>
    en CSS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    p{
    height: 10em;
    line-height: 10em;
    }

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    une solution pas très élégante mais qui à l'avantage de fonctionner sans se prendre trop la tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="conteneur">
    	<table style="height:100%"><tr><td>
    		texte   sdgqsdg dfgsdf g<br />
    		sdfg sdfgsdfg sdfgsd<br />
    		fg sdfgs dfgsdfg sdfgsdfg sdfs
    	</td></tr></table>
    </div>

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par miss_socrates Voir le message
    Je propose une solution qui n'est pas la plus simple mais qui pourra peut-être fonctionner.
    Je préciserais la hauteur de la div et puis je mettrais un padding au dessus et en dessous (par ex. en auto ou en pourcentage: par ex. 10% au-dessus et en dessous); ...
    Je connais la hauteur de la div, mais pas le nombre de lignes de texte.

    Citation Envoyé par miss_socrates Voir le message
    Il y a tout simplement en CSS la propriété line-height ; il faut spécifier la même hauteur que la hauteur de la <p>. Line-height ne fonctionne en général que s'il n'y a qu' une seule ligne de texte, mais j'ai constaté que parfois cela fonctionne avec plusieurs lignes;pourquoi ne pas essayer tout simplement?
    Je veux maîtriser de façon indépendante l'interligne, pas possible de jouer avec line-height donc.

    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    une solution pas très élégante mais qui à l'avantage de fonctionner sans se prendre trop la tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="conteneur">
    	<table style="height:100%"><tr><td>
    		texte   sdgqsdg dfgsdf g<br />
    		sdfg sdfgsdfg sdfgsd<br />
    		fg sdfgs dfgsdfg sdfgsdfg sdfs
    	</td></tr></table>
    </div>
    J'espérais ne pas avoir à en arriver là, mais j'ai l'impression que je n'ai pas vraiment le choix.

    Merci à tous

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Je connais la hauteur de la div, mais pas le nombre de lignes de texte.
    C'est là qu'est l'os !
    J'espérais ne pas avoir à en arriver là, mais j'ai l'impression que je n'ai pas vraiment le choix.
    Il y a une solution en jquery avec .height() ... mais bon.

  15. #15
    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 747
    Points
    3 747
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Je veux maîtriser de façon indépendante l'interligne, pas possible de jouer avec line-height donc.
    Tu peux utiliser un 2eme élément pour rétablir le line-height.
    Voir ce thread http://www.developpez.net/forums/d10...verticalement/
    Je ne réponds pas aux questions techniques par MP.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Points : 2 907
    Points
    2 907
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Je connais la hauteur de la div
    Si tu connais sa hauteur, avec quelques restrictions de mise en page, tu peux simplement attribuer le table-cell, ainsi que la même hauteur à ton p:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    p {
      display:table-cell;
      height:400px /* hauteur du div */
      vertical-align:middle;
    }
    Au besoin, tu peux rajouter une imbrication pour ajouter le display:table.
    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 si c'est le cas

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Il y a une solution en jquery avec .height() ... mais bon.
    Même avec ça je ne vois pas trop comment m'en sortir sans connaître le nombre de ligne de texte.

    Citation Envoyé par Candygirl Voir le message
    Si tu connais sa hauteur, avec quelques restrictions de mise en page, tu peux simplement attribuer le table-cell, ainsi que la même hauteur à ton p...
    Ça fonctionne, mais ça casse mes CSS transform et animation que j'applique en plus.

    Citation Envoyé par Macmillenium Voir le message
    Tu peux utiliser un 2eme élément pour rétablir le line-height.
    Voir ce thread http://www.developpez.net/forums/d10...verticalement/
    Pas mal, je dois encore faire quelques tests pour vérifier que cela fonctionne dans tous les cas, mais c'est la meilleure solution actuelle.

    Merci beaucoup à tous.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Jquery :
    j'avais bricolé un code ici : Remplir automatiquement l'espace libre sur un div

    Ici, on va modifier le css en fonction de la hauteur du div (contenant le texte à centrer verticalement)
    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
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	<title>Test</title>
     
    	<!-- Scripts Google : initialisation jquery -->
        <script charset="utf-8" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
     
    	<style type="text/css">
    .conteneur {
    	width:150px;
    	height:150px;
    	border:1px solid transparent; /* bizarrement, ca ne fonctionne pas correctement sans border (?) */
    	background:#ccc; /* (test) */
    }
    .textcentre {
    	background:yellow; /* (test) */
    }
    	</style>
     
    </head>
     
    <body>
     
    <div class="conteneur">
    	<div class="textcentre">
    		texte sdgqsdg dfgsdf g<br />
    		sdfg sdfgsdfg sdfgsd f fsdfsdfqsdgf sdgsdfgsdfg sdfgsdfg.
    	</div>
    </div>
     
    	<script type="text/javascript">
    	$(function() {
    		// centrer verticalement "textcentre" en fonction du texte qu il contient
    		var A = $('.conteneur').height(); 	// hauteur de "conteneur" (en px)
    		var B = $('.textcentre').height(); 	// hauteur de "textcentre" (en px)
    		var C = (A - B)/2;				 	// margin-top
    		$('.textcentre').css('margin-top',C+'px'); 		// on affecte la valeur C (en px) à la margin-top de "textcentre"
    	});
    	</script>
    ps : je ne suis pas un spécialiste jquery, loin de là !
    C'est peut-être "un canon pour tuer une mouche" (?) A utiliser s'il y a déjà du jquery dans la page.

Discussions similaires

  1. [CSS 2.1] centrer en vertical un texte dans un div
    Par stecale dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 19/06/2011, 11h25
  2. Centrage vertical de texte dans un tableau
    Par Kaluza dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 04/01/2011, 07h51
  3. centrage vertical de texte dans les blocs
    Par filtep dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 22/12/2009, 19h27
  4. [CSS] alignement vertical d'un texte dans un div
    Par alexfrere dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 06/07/2006, 18h07
  5. Introduire du text dans une div
    Par 10-nice dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2005, 11h50

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