Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2484 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Iframe : Height à 100%

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Iframe : Height à 100%

n°1891784
Alekusu2
Posté le 05-06-2009 à 18:40:08  profilanswer
 

Bonjour à tous,  :hello:  
 
Je me penche actuellement sur le fameux "bug" de l'height à 100% de l'iframe. En gros le souci, c'est que si on met une iframe en "height:100%;", l'iframe ne s'adapte pas à la taille de la page et se limite à en gros 100px de hauteur.  
Après de longues recherches sur google, je n'ai trouvé que des solutions bancales bien que ce problème semble être un casse-tête pour beaucoup de devs.
 
Quelqu'un connaîtrait-il une solution solide à ce problème ? (solution cross-browser)
Facebook utilise une iframe pour afficher les liens externes tout en gardant en haut un petit bandeau facebook (exactement ce que je veux faire).
 
J'ai donc essayé d'adapter ce code là à ma page.
 
JS :

Code :
  1. var FramedPageController=
  2. {
  3. manuallyAdjustIframe:false,iframeLoadCount:0,iframeLoadHandler:function()
  4. {
  5.  this.iframeLoadCount++;
  6.  if(this.iframeLoadCount>2)
  7.  {
  8.   $('conteneur_general').addClass('unknown_page');this.resizeIframe();
  9.  }
  10. }
  11. ,setManualIframeAdjustment:function()
  12. {
  13.  this.manuallyAdjustIframe=true;this.resizeIframe();
  14.  Event.listen(window,'resize',bind(this,this.resizeIframe));
  15. }
  16. ,resizeIframe:function()
  17. {
  18.  var viewport=Vector2.getViewportDimensions();
  19.  var header=Vector2.getElementDimensions($('navigateur_barre'));
  20.  if(this.manuallyAdjustIframe)
  21.  {
  22.   viewport.setElementHeight($('conteneur_iframe'));
  23.   viewport.sub(header).setElementHeight($('conteneur_iframe'));
  24.  }
  25.  else
  26.  {
  27.   viewport.setElementHeight($('conteneur_general'));
  28.   bind($('conteneur_general'),'setStyle','height','100%').defer();
  29.  }
  30. }
  31. };


HTML :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.     <title>Apple.com</title>
  6.     <link rel="stylesheet" rev="stylesheet" href="css/navigateur.css" type="text/css" media="screen" />
  7.     <script type="text/javascript" src="js/navigateur.js"></script>
  8. </head>
  9. <body>
  10. <div id="conteneur_general">
  11. <div id="navigateur_barre">
  12.  Contenu
  13. </div>
  14. <div id="conteneur_iframe">
  15.  <iframe id="navigateur_iframe" src="http://www.apple.com/fr/" frameborder="0" scrolling="auto" onload="FramedPageController.iframeLoadHandler();"></iframe>
  16. </div>
  17. </div>
  18. </body>
  19. </html>


CSS :

Code :
  1. *
  2. {
  3. border: 0;
  4. margin: 0;
  5. padding: 0;
  6. text-decoration: none;
  7. list-style: none;
  8. }
  9. body
  10. {
  11. width:100%;
  12. height:100%;
  13. overflow:hidden;
  14. }
  15. #conteneur_general
  16. {
  17. height: 100%;
  18. width: 100%;
  19. }
  20. #navigateur_barre
  21. {
  22. height: 50px;
  23. width: 100%;
  24. }
  25. #conteneur_iframe
  26. {
  27. height: 100%;
  28. overflow: hidden;
  29. vertical-align: top;
  30. }
  31. #navigateur_iframe
  32. {
  33. width: 100%;
  34. height: 100%;
  35. }


 
Edit : Je ne sais pas si je l'ai mal adapté ou quoi, mais ça ne marche pas. En gros l'idée dans ma tête c'est avec JS trouver la hauteur intérieure de la fenêtre (ou de #conteneur_general en pixels), retirer 50px (= hauteur de ma barre en haut) et appliquer cette hauteur là à #navigateur_iframe  
après je suis parti du principe que le code de facebook aurait surement été plus réfléchi en prenant en compte tous les cas de figure mais j'arrive pas à le faire marcher :/
Bref, si quelqu'un à une idée...  :sweat:  
 
Merci d'avance :jap:


Message édité par Alekusu2 le 05-06-2009 à 19:38:02
mood
Publicité
Posté le 05-06-2009 à 18:40:08  profilanswer
 

n°1891827
tpierron
Posté le 05-06-2009 à 22:02:24  profilanswer
 

Mouais, la propriété "height: 100%" est un peu tordue : pour qu'il y ait un effet, il faut que tous les éléments parents aient une hauteur fixées.
 
Dans ton exemple, la balise html n'a pas de hauteur définie, donc ça foire.
 
Edit: j'ai pas testé ça sur beaucoup de navigateur, mais j'ai le présage que ça va merder niveau compatibilité (FF3 et IE7 ont l'air correct, c'est déjà pas si mal).

Message cité 1 fois
Message édité par tpierron le 05-06-2009 à 22:05:59
n°1891834
Alekusu2
Posté le 05-06-2009 à 22:23:04  profilanswer
 

tpierron a écrit :

Mouais, la propriété "height: 100%" est un peu tordue : pour qu'il y ait un effet, il faut que tous les éléments parents aient une hauteur fixées.

 

Dans ton exemple, la balise html n'a pas de hauteur définie, donc ça foire.

 

Edit: j'ai pas testé ça sur beaucoup de navigateur, mais j'ai le présage que ça va merder niveau compatibilité (FF3 et IE7 ont l'air correct, c'est déjà pas si mal).

 

En effet sous mac aucun souci avec Safari 3, FF3 et Opera 9 :love: J'essaierai demain sous PC avec FF2 et IE6/7/8
1000 merci ! Tu m'as sauvé :love:


Message édité par Alekusu2 le 05-06-2009 à 22:24:11
n°1892775
Pascal le ​nain
Posté le 08-06-2009 à 20:49:26  profilanswer
 

Ne peux-tu pas éviter les iframe ?
En général, c'est plutôt merdique ce truc...

n°1893048
Alekusu2
Posté le 09-06-2009 à 10:48:04  profilanswer
 

C'est complètement merdique ce truc c'est clair, je les ai évités pendant 10 ans :D
 
Mais pouvoir afficher un bandeau horizontal en haut d'un site A pendant que le visiteur surfe sur le reste de l'écran sur un site B, y a pas 50 solutions. Même facebook est passé par cette solution... :/
 
Après si tu as une idée, je suis largement preneur ^^

n°1893558
Pascal le ​nain
Posté le 10-06-2009 à 11:59:56  profilanswer
 

Oui c'est vrai, Google l'utilise aussi...

n°1893700
Alekusu2
Posté le 10-06-2009 à 16:11:20  profilanswer
 

Je viens de regarder le code de Google pour faire ce truc justement. Et mon dieu :D
 
C'est du HTML 4 et encore, y a plein de balises qui sont ouvertes mais jamais fermées, les attributs ne sont même pas mis dans des guillemets, l'horreur :D Tout est en vrac.
 
Google devrait montrer un minimum l'exemple en terme de pérennité, d'accessibilité, normes W3C, etc... :/


Message édité par Alekusu2 le 10-06-2009 à 16:11:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Iframe : Height à 100%

 

Sujets relatifs
Avoir une iframe sans utiliser de iframeAdapter la hauteur de la iframe a son contenu
[CSS] Div qui ne veut pas être à 100%[EXTJS] RenderTo iframe
[HTML]Inserer un Frame ( ou iFrame ) dans une image imageshackINCLUDE ou IFRAME ?
[résolu] Problème avec iframe et menu déroulantAfficher le résultat d'un formulaire dans une iframe [résolu 2FOIS]
[SQL / Excel] 100 grosses requêtes à faire et VBA ne veut pashauteur d'un tableau et insertion d'iframe
Plus de sujets relatifs à : Iframe : Height à 100%


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR