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 :

Positionner un div sur une image de taille variable


Sujet :

Positionnement en CSS

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut Positionner un div sur une image de taille variable
    Bonjour à tous

    Je cherche à faire un petit jeu en javascript qui s'intègre sur une image.

    J'aimerai que :
    • l'image soit centrée horizontalement et occupe 100% de la hauteur du navigateur, en respectant le ratio de redimensionnement (la largeur de cette image est donc variable)
    • un div "Cnt" puisse être placé sur l'image de manière à couvrir une partie précise de celle-ci quel que soit le redimensionnement du navigateur
    • la solution soit viable au moins pour Chrome et IE


    Je pensais utiliser :

    • une img, avec une hauteur à 100% de son parent
    • un div "Cnt" en positionnement absolu avec Left, Top, Width et Height exprimés en pourcentages
    • un div "Container" configuré ainsi :

    • > inline-block de manière à pouvoir le centrer en lui assignant une hauteur à 100% du navigateur (pour l'image)
    • > relatif, pour que le placement de "Cnt" de base dessus (et donc qu'un top de Cnt à 10% arrive à 10% du haut de l'image)

    Malheureusement, et après avoir à peu près essayé toutes les combinaisons qui me sont venues à l'esprit, à compris des div tampon, je
    n'arrive pas à résoudre ces trois contraintes en même temps. Quelqu'un pourrait il me mettre sur la bonne voie ?

    Merci par avance !


    PS : Je sais que la solution est simple en javascript, mais j’aurai aimé séparer le code du jeu (js) de la présentation (css)

  2. #2
    Membre Expert
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Par défaut
    Bonjour,

    Vous avez un bout de code ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    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
     
    <!DOCTYPE html>
    <html> 
        <head>
            <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
            <title>Test</title>
        <head>
     
        <body>
            <div id="Container">
                <div id="Cnt">*--Contiendra un tableau--*</div>
                <img id="Img" src="IMG/Img.jpg">    
            </div>
        </body>
    </html>

    Code css : 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
     
     
        html, body {
            margin: 0px;
            padding: 0px;
            height: 100%;
        }
     
            #Container {
                position: relative;
                display: inline-block;
                background-color: blue;
                height: 100%;
                border: solid 3px;
            }
     
                #Img {    
                    height: 100%;    
                }
     
                #Cnt {
                    position: absolute;
                    display: inline;
                    z-index: 98;
                    left: 18%;
                    width: 64.5%;
                    top: 20%;
                    height: 50%;
                    background-color: purple;
                }

    Le rendu le plus amusant est sur Chrome : essayer d'abord de rafraîchir avec un navigateur tout petit, puis jouer sur la taille de celui-ci pour voir le rendu, puis répéter l'opération après avoir rafraichir sur un navigateur plus grand...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    Désolé de revenir à la charge aussi rapidement, mais à voir le peu de participation, je commence un peu à paniquer qu'un rendu si simple soit aussi dur à obtenir :

    Dois-je comprendre qu'il n'y aurait aucun moyen en pur CSS de placer précisément des éléments par dessus une image centrée de taille variable ?

    Merci pour vos idée !

  5. #5
    Membre Expert
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Par défaut
    Je ne suis pas sûr de bien comprendre ce que vous voulez car pour l'instant je ne vois pas de problème.

    Et si on travaillait à partir d'un Codepen : http://codepen.io/anon/pen/LanBG

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    Merci de prendre un peu de temps pour m'éclairer !

    J'ai mis à jour le code avec une image un peu plus parlante, ainsi que redimensionné le div à placer pour une meilleure lisibilité.

    http://codepen.io/LaDent/pen/maxIv

    En jouant sur le Display on obtient différentes facettes du problème :

    • inline-block : donne le rendu que je souhaite mais le redimensionnement de l'image ne se fait pas bien : la largeur reste fixe.
    • inline : le redimensionnement se fait correctement mais le container ne prends pas toute la hauteur, du coup
      Cnt qui est en absolu et devrait se baser dessus ne corresponds pas
    • block : Cnt n'arrive pas à hériter de Container

  7. #7
    Membre Expert
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Par défaut
    Et pour résoudre le problème de l'image, pourquoi ne pas la placer en background:
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    html {background:url(mon-image.jpg) no-repeat center center fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;}

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    Avec "background-size: contain;" ça ressemble à ce que je cherche en effet, sauf que dans ce cas, je n'ai aucun moyen de récupérer la largeur de l'img pour adapter le div qui doit se placer dessus

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

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

    Il me semble qu'en remplaçant le height de 100% sur l'image par un height de 100vh on obtient le résultat souhaité (sur FF, IE, Chrome) si j'ai bien compris la problématique ?
    Ce qui nous affranchit d'ailleurs de l'héritage des height de 100% mais n'est guère rétrocompatible...
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #BkGrndImg {    
          height: 100vh;
    }
    A noter que les navigateurs basés sur webkit réagissent mal au redimensionnement de la fenêtre (safari, opera, maxthon):-/
    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 :resolu: si c'est le cas

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    J'ai appris l'existence des vh / vw sur un autre forum à peu près au moment où tu me repondais

    Tout est parafit sauf qu'il reste une petite scroll-bar verticale, existe t'il une solution plus élégante qu'un overflow hidden ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 912
    Par défaut
    Citation Envoyé par LaDentDeLait Voir le message
    J'ai appris l'existence des vh / vw sur un autre forum à peu près au moment où tu me repondais
    Arf ! grillée :-/ Par qui ?!
    Citation Envoyé par LaDentDeLait Voir le message
    Tout est parafit sauf qu'il reste une petite scroll-bar verticale, existe t'il une solution plus élégante qu'un overflow hidden ?
    Un margin,padding, border qui traîne qqpart et provoque un dépassement du 100% ? Au pire, quitte à utiliser des vh, un petit calc (ou box-sizing) devrait pouvoir faire l'affaire
    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 :resolu: si c'est le cas

Discussions similaires

  1. Bug Div sur une image!
    Par veneq dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 19/05/2010, 11h28
  2. Positionner un texte sur une image
    Par Ryoko dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 19/06/2008, 11h22
  3. [Javascript Debutant]Comment positionner des boutons sur une Image?
    Par bylka dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2007, 14h07
  4. [CSS][firefox]positionner mes div sur une seule ligne
    Par hansaplast dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/03/2006, 15h44
  5. Positionnement de texte sur une image
    Par inddzen dans le forum Windows
    Réponses: 2
    Dernier message: 08/08/2005, 13h22

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