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 :

Aligner 2 blocs en haut et bas d'un parent à taille fixe


Sujet :

Positionnement en CSS

  1. #1
    Membre du Club Avatar de Yosko
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 : 64
    Points
    64
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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) ?

  2. #2
    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 373
    Points
    19 373
    Par défaut
    Bonsoir,

    Rajoute pour ton div de bottom.

  3. #3
    Membre du Club Avatar de Yosko
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 : 64
    Points
    64
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  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 373
    Points
    19 373
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    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 : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Points : 2 907
    Points
    2 907
    Par défaut
    Hello,

    Citation Envoyé par Yosko Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    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

  6. #6
    Membre du Club Avatar de Yosko
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    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 : 64
    Points
    64
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

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

Discussions similaires

  1. [CSS 2] Alignement 3 images (Haut-Milieu-Bas) sur div
    Par Korben_Debile dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/05/2010, 22h55
  2. Bloc visible alors qu'ont scroll de haut en bas la page.
    Par matheg dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 17/08/2008, 22h02
  3. Comment aligner deux blocs par le bas ?
    Par veust80 dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 05/06/2007, 00h58
  4. Pb touche fleche haut et Bas
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 23/10/2006, 12h53

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