Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > CSS
CSS Forum d'entraide sur l'utilisation des feuilles de style CSS. Avant de poster : Cours CSS, FAQ CSS, Galerie CSS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 12h01   #1
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
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.
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h15   #2
Membre Expert
 
Avatar de kdmbella
 
Homme Demazy Mbella
Développeur Web
Inscription : août 2010
Messages : 620
Détails du profil
Informations personnelles :
Nom : Homme Demazy Mbella
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 : 620
Points : 1 470
Points : 1 470
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
__________________
Trois personnes peuvent garder un secret si deux d'entre elles sont mortes. :Benjamin Franklin
L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent : Benjamin Franklin
Le hasard, c'est le déguisement que prend Dieu pour voyager incognito: Albert Einstein
bon je m'arrête là au risque de me faire buter
kdmbella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h21   #3
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
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.
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h13   #4
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 776
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 776
Points : 2 344
Points : 2 344
Bonjour,

Ton texte est directement dans le div ?
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h16   #5
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
Citation:
Envoyé par FirePrawn Voir le message
Ton texte est directement dans le div ?
Non, il est dans une balise <p>
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h23   #6
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 776
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 776
Points : 2 344
Points : 2 344
Tu peux essayer ça :

Code :
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.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h27   #7
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
Citation:
Envoyé par FirePrawn Voir le message
Tu peux essayer ça :

Code :
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.
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h55   #8
Membre Expert
 
Avatar de kdmbella
 
Homme Demazy Mbella
Développeur Web
Inscription : août 2010
Messages : 620
Détails du profil
Informations personnelles :
Nom : Homme Demazy Mbella
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 : 620
Points : 1 470
Points : 1 470
ton div en position absolute est ce que c'est une contrainte ou alors tu peux t'en passé ?
__________________
Trois personnes peuvent garder un secret si deux d'entre elles sont mortes. :Benjamin Franklin
L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent : Benjamin Franklin
Le hasard, c'est le déguisement que prend Dieu pour voyager incognito: Albert Einstein
bon je m'arrête là au risque de me faire buter
kdmbella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h58   #9
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
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.
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h05   #10
Membre habitué
 
Homme
Inscription : mai 2011
Messages : 109
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : mai 2011
Messages : 109
Points : 134
Points : 134
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 :
1
2
3
4
5
6
 
<div id="div1">
      <p>
        texte 4 lignes
      </p>
</div>
en CSS:

Code :
1
2
3
4
5
#div1{
        height: 150px;
        padding-top: auto;
        padding-bottom: auto;
}
ou
Code :
1
2
3
4
5
6
 
p{
        height: 10em;
        padding-top: 3em;
        padding-bottom: 3em;
}
miss_socrates est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h11   #11
Membre habitué
 
Homme
Inscription : mai 2011
Messages : 109
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : mai 2011
Messages : 109
Points : 134
Points : 134
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 :
1
2
3
4
5
6
 
<div>
<p>
    texte    
</p>
</div>
en CSS

Code :
1
2
3
4
5
 
p{
height: 10em;
line-height: 10em;
}
miss_socrates est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h39   #12
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
une solution pas très élégante mais qui à l'avantage de fonctionner sans se prendre trop la tête :
Code :
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>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 17h35   #13
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
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 :
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
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 18h27   #14
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 !
Citation:
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.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 21h13   #15
Rédacteur/Modérateur
 
Avatar de Macmillenium
 
Homme
Inscription : mars 2008
Messages : 2 290
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mars 2008
Messages : 2 290
Points : 3 208
Points : 3 208
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.
Macmillenium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 00h12   #16
Modératrice
 
Avatar de Candygirl
 
Femme
Inscription : juillet 2006
Messages : 1 529
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 40
Localisation : Suisse

Informations forums :
Inscription : juillet 2006
Messages : 1 529
Points : 1 869
Points : 1 869
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 :
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
Candygirl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h35   #17
Membre éclairé
 
Inscription : novembre 2004
Messages : 484
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 484
Points : 328
Points : 328
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.
sovitec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 11h59   #18
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 :
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.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h56.


 
 
 
 
Partenaires

Hébergement Web