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 16/08/2011, 21h53   #1
Membre du Club
 
Avatar de Yosko
 
Homme Yosko Polite
Ingénieur développement logiciels
Inscription : juillet 2008
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Yosko Polite
Âge : 26
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Transports

Informations forums :
Inscription : juillet 2008
Messages : 61
Points : 45
Points : 45
Par défaut Aligner 2 blocs en haut et bas d'un parent à taille fixe

Bonjour à tous,

Je cherche à résoudre un petit problème. J'ai actuellement un conteneur à taille fixe, qui contient 3 éléments :
  • Une image aux mêmes dimensions que le parent, affichée dans le fond (techniquement, ça reste une balise <img />)
  • Une div à taille variable, à aligner en haut
  • Une div à taille variable, à aligner en bas

Mon but est d'afficher les textes par dessus l'image (le texte du haut aligné en haut de la zone occupée par l'image, et le texte du bas aligné en bas de la zone occupée par l'image).
Mon code actuel fonctionne bien pour le texte du haut, mais pas celui du bas.

L'HTML ressemble actuellement à ceci :
Code :
1
2
3
4
5
<div class="post">
	<div class="overlay">Titre de l'image</div>
	<img class="img_thumb" src="LIEN VERS L'IMAGE" />
	<div class="overlay overlayBottom">Texte d'information sur l'image</div>
</div>
Et le CSS actuel :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
div.post {
	width: 256px;
	height: 215px;
	overflow: hidden;
	display: inline;
}
.overlay {
	display: block;
	position: absolute;
	background-image: url('http://7avoir.yosko.net/templates/yosko/images/translucide.png');
	background-repeat: repeat;
	width: 100%;
	font-size: 120%;
	font-variant: small-caps;
	font-weight: bold;
	text-align: center;
}
.img_thumb {
	float: left;
}
.overlayBottom {
	vertical-align: bottom;
}
Certains des choix que j'ai fait en CSS ne sont peut-être pas judicieux, mais c'est parce que je suis en pleine bidouille pour trouver une solution au problème.

Sauriez-vous comment afficher le texte du bas comme je le veux, sans avoir à passer par position: relative; (car ça hauteur est variable) ?
Yosko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 23h38   #2
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
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 : 772
Points : 2 329
Points : 2 329
Bonsoir,

Rajoute pour ton div de bottom.
__________________
- 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 déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/08/2011, 09h29   #3
Membre du Club
 
Avatar de Yosko
 
Homme Yosko Polite
Ingénieur développement logiciels
Inscription : juillet 2008
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Yosko Polite
Âge : 26
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Transports

Informations forums :
Inscription : juillet 2008
Messages : 61
Points : 45
Points : 45
Super, merci du conseil. C'est effectivement la bonne chose à faire, même s'il m'a fallut en plus faire d'autres ajustements (peut-être dus à mon CSS existant ?...) :

En bref :
Code :
1
2
3
4
5
.overlayBottom {
    bottom: 0;
    display: table-cell;
    position: absolute;
}
Je dois avouer que je n'ai pas trop l'habitude d'utiliser les display: table-xxx... mais ça a l'air bien pratique dans l'ensemble.
Yosko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 10h37   #4
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
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 : 772
Points : 2 329
Points : 2 329
Citation:
Envoyé par Yosko Voir le message
Super, merci du conseil. C'est effectivement la bonne chose à faire, même s'il m'a fallut en plus faire d'autres ajustements (peut-être dus à mon CSS existant ?...) :

En bref :
Code :
1
2
3
4
5
.overlayBottom {
    bottom: 0;
    display: table-cell;
    position: absolute;
}
Je dois avouer que je n'ai pas trop l'habitude d'utiliser les display: table-xxx... mais ça a l'air bien pratique dans l'ensemble.
En fait c'est juste que tu ne peux pas utiliser le vertical-align pour un bloc qui est lui même dans un bloc. L'utilisation du table-cell permet de feinter, et de faire passer ton div pour une cellule de tableau ; or dans ce cas, le vertical-align fonctionne parfaitement
__________________
- 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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 18h01   #5
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
Hello,

Citation:
Envoyé par Yosko Voir le message
Code :
1
2
3
4
5
.overlayBottom {
    bottom: 0;
    display: table-cell;
    position: absolute;
}
Je dois avouer que je n'ai pas trop l'habitude d'utiliser les display: table-xxx... mais ça a l'air bien pratique dans l'ensemble.
Le display:table-cell ne sert à rien dans le code ci-dessus. Il n'est pas effectif associé à un positionnement absolu:
Citation:
9.7 Relationships between 'display', 'position', and 'float'

The three properties that affect box generation and layout — 'display', 'position', and 'float' — interact as follows:

[...]
if 'position' has the value 'absolute' or 'fixed', the box is absolutely positioned, the computed value of 'float' is 'none', and display is set according to the table below.
[...]

Specified value
inline, table-row-group, table-column, table-column-group, table-header-group, table-footer-group, table-row, table-cell, table-caption, inline-block

Computed value
block
__________________
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 19/08/2011, 08h28   #6
Membre du Club
 
Avatar de Yosko
 
Homme Yosko Polite
Ingénieur développement logiciels
Inscription : juillet 2008
Messages : 61
Détails du profil
Informations personnelles :
Nom : Homme Yosko Polite
Âge : 26
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Transports

Informations forums :
Inscription : juillet 2008
Messages : 61
Points : 45
Points : 45
C'est très étrange, mais... tu as raison
Je ne sais pas ce que j'ai fait en même temps que l'ajout du "table-cell", mais mon truc s'est mis à fonctionner à ce moment-là, ce qui m'a laissé croire que c'était bon...

De plus, comme j'utilises le code jQuery suivant, le display est overridé en "none" ou "block".
Code :
1
2
3
4
$(".post").hover(
    function() { $(this).find(".overlay").show(); },
    function() { $(this).find(".overlay").hide();
);
C'est bizarre parce que les 2 seuls trucs qui peuvent influencer sur le positionnement de mon truc sont ceux mentionnés plus tôt (bottom:0; et position:absolute;), et parce que je croyais les avoir déjà testé ensemble avant d'essayer le table-cell sans obtenir le résultat escompté...

Ca marche donc je ne vais pas m'en plaindre, mais je ne suis pas vraiment sûr de ce qu'il s'est passé.
Yosko est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h45.


 
 
 
 
Partenaires

Hébergement Web