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

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut Annuler l'overflow:scroll du parent d'un calque qui est en absolute et ne doit pas être caché par l'overflow
    Bonjour,

    En repartant du "titre", voila la situation. Un schéma de la page :



    Le plus encadré en bas à droite est un lien qu'on clique pour afficher la popup (partie rouge et verte). La popup doit être visible complètement et sa position dépend de la position du plus, d'où le code suivant :

    Juste la partie du plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!-- Pour que la position de la popup dépende de la position du lien /-->
    <div style="position:relative"> <!-- div qui est représenté par le cadre juste autour du + /--> 
               <a href="#" ...>+</a> 
    </div>
    Le CSS qui nous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
               
    Div 2{      
         overflow: scroll;
    }  
    popup{      
         position: absolute;
    }
    Sur le dessin, la partie verte du calque popup représente la partie du calque qui est cachée (à cause du overflow:scroll de Div 2) mais moi j'aimerais qu'on la voit. Donc j'aimerais que la popup tienne pas compte du overflow:scroll, mais que Div 2 en tienne compte lui...

    Je peux faire que la popup soit visible entièrement mais alors je n'arrive pas à la positionner en fonction du lien +...

    Est-ce que c'est possible ?

    D'avance merci pour votre aide.

    Edit : comme autre solution je viens de penser à séparer le calque Div 2 en deux et de mettre l'attribut overflow:scroll dans la partie supérieur tandis que la seconde partie contiendra le lien +. Mais j'aimerais que le + soit scrollable aussi...

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

    A priori, le problème (ou plutôt comportement normal) vient de l'attribution de position (excepté la valeur initiale static) et overflow (excepté la valeur initiale visible) a un même conteneur.

    Tu peux séparer les deux :
    1. Un conteneur positionné en relatif ;
    2. Un enfant directe doté d'overflow ;
    3. L'élément en absolue se réfère donc à son conteneur en relatif qui n'a plus l'overflow

    Ce qui donne, par exemple :
    Code xhtml : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Positionnement absolue et overflow</title>
     
    <style type="text/css"> 
    .relative { 
            position:relative; 
            padding:10px; 
            background:#000;
            width:500px;
    }
    .overflow { 
            overflow:auto; 
            background:gray; 
            height:150px;
    }
    .absolute { 
            position:absolute; right:50px; top:0; 
            width:150px; height:200px;
            background:red;   
    }
    </style>
     
    </head>
     
    <body>
     
    <div class="relative">
    	<div class="overflow">
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla <br />
    		bla bla bla
    		<div class="absolute">Positionné en absolute</div>
    	</div>
    </div>
     
    </body>
     
    </html>

    Tu peux faire des petits tests en rajoutant par exemple un position:relative sur .overflow et voir la différence.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Merci pour ta réponse.

    Je n'attribue pas vraiment overflow et position à un même conteneur. Mais ce que je fais est peut-être pareil.

    Pour clarifier le premier poste, je reformule avec l'exemple. J'aimerais modifier le code qui suit pour que le calque absolute (rouge) soit visible hors du cadre scrollable :
    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
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Positionnement absolue et overflow</title>
     
    <style type="text/css"> 
    .relative { 
        position:relative; 
        padding:10px; 
        background:#ff3;
        width: 50px;
    }
    .overflow { 
        overflow:auto; 
        background:gray; 
        height:150px;
    }
    .absolute { 
        position:absolute; 
        left:30px; 
        top:10px; 
        width:150px; height:200px;
        background:red;
    }
    </style>
     
    </head>
     
    <body>
     
    <div>
        <div class="overflow">
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla <br />
            bla bla bla
     
            <div class="relative">
                <a href="#">+</a>
                <div class="absolute">Positionné en absolute</div>
            </div>
        </div>
    </div>
     
    </body>
     
    </html>
    A partir du moment où le premier parent positionné (dont l'attribut position n'a pas la valeur par défaut static (c'est nouveau pour moi)) du calque absolute est hors du calque overflow, je comprends que ça marche mais ça ne me permet pas de positionner le calque absolute en fonction du lien +.

    Dans ton exemple que j'ai modifié (plus haut), on peut se demander si c'est logique, techniquement possible, etc. de vouloir que le calque rouge ne tienne pas compte du overflow d'un de ses parents. Et si on veut le faire, l'approche est peut-être mauvaise.

    Désolé si je te fais répéter. Si c'est le cas, c'est nécessaire pour moi

    Merci!

  4. #4
    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 748
    Points
    3 748
    Par défaut
    Le bloc référent se trouve dans un conteneur doté d'overflow, celui-ci couvre tous ses enfants/descendants même positionnés en absolue, c'est un comportement tout à fait normal et tu ne peux malheureusement pas faire grand chose.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    D'accord merci.

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

Discussions similaires

  1. Barre défilement en overflow / scroll
    Par Elocrate dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/01/2011, 23h02
  2. [AJAX] div et overflow: scroll;
    Par djalupu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/02/2009, 18h22
  3. zone à hauteur variable : overflow:scroll ?
    Par php_de_travers dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 31/01/2008, 19h47
  4. Composant : Détecter un scroll du parent
    Par Alchemist dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/08/2007, 00h50
  5. propriété Overflow : Scroll
    Par calagan99 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 22/05/2007, 15h36

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