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

JavaScript Discussion :

Flux html/css et javascript


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Par d�faut Flux html/css et javascript
    Bonjour � tous,
    J'utilise un javascript permettant d'avoir un syst�me fluide de gestion de div sur ma page HTML (changez � la main la largeur de votre browser sur le lien de test, vous verrez l'effet).
    Le probl�me est que ce script utilise des div ".box" qu'il positionne en absolu et que cela cr��e un peu le foutoir dans mon flux de la page HTML.
    En effet, � cause de ce positionnement, je n'arrive pas � placer ma div "footer" (barre rouge dans l'exemple) en dessous de ma div "content".

    Alors voil�, si quelqu'un pouvait me dire comment faire, ce serait super.
    J'y ai pass� ma journ�e d'aujourd'hui, sans succ�s.
    J'ai essay� tous les "clearfix" du web, sans succ�s.
    J'ai �galement essay� de changer dynamiquement (en javascript) la hauteur css de ma div content, ce qui devrait r�gler le probl�me de flux, sans succ�s (un offsetHeight sur la div content ne renvoie aucune valeur).

    Voici le lien de test

    Et ci-dessous le code complet...

    Merci pour votre aide!


    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
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <!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" xml:lang="fr" lang="fr">
     
    	<head>
    		<title>Test</title>
     
    		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    		<style>
    			body 
    			{
    			    margin:0;padding:0;
    			}
    			html,body
    			{
    				height:100%;
    			}
    			#footer
    			{	
    				clear:both;
    				width:100%;
    				height:120px;
    				background-color:red
    			}
    		</style>
     
    		<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
    		<script type="text/javascript">
    			var myFluidGrid = {
    				COLNUMBER : 1,COLMARGIN : 10, COLWIDTH : 222,
    				doLayout : function() {
    					var self = this;var pointer = 0;var arr = [];
    					var columns = Math.max(this.COLNUMBER, parseInt($('body').innerWidth() / (this.COLWIDTH + this.COLMARGIN)));
    					$('.box').css('position', 'absolute').css('width', this.COLWIDTH  + 'px');
    					$('.box').each(function() {
    						var tempLeft = (pointer * (self.COLWIDTH + self.COLMARGIN));
    						$(this).css('left', tempLeft + 'px');
    						var tempTop = 0;
    						if (arr[pointer]) { tempTop = arr[pointer];	}
    						$(this).css('top', tempTop + 'px');
    						arr[pointer] = tempTop + $(this).outerHeight() + self.COLMARGIN;
    						pointer++;
    						if (pointer === columns) { pointer = 0; }
    					});
    				}
    			};
    			$(window).ready(function() {myFluidGrid.doLayout();}).resize(function() {myFluidGrid.doLayout();});
    		</script>
    	</head>
     
    	<body>
    		<div id="content">
    	    	   <div class="box"><img src="medias/images/other/000000001.jpg" height="410" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000002.jpg" height="160" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000003.jpg" height="310" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000004.jpg" height="250" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000005.jpg" height="170" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000006.jpg" height="450" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000007.jpg" height="330" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000008.jpg" height="140" width="224"></div>
    	    	   <div class="box"><img src="medias/images/other/000000009.jpg" height="390" width="224"></div>
    		</div>	
    		<div id="footer"></div>	
    	</body>
     
    </html>

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Puisque d'une part tu as d�j� essay� pas mal de tricks CSS sans succ�s (wow quelle allit�ration ^^) et que d'autre part tu postes sur le forum JS, voil� ce que j'aurais � te proposer (vite fait, sans vraiment avoir test�, c'est un premier jet � affiner probablement) :
    Code javascript : 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
    var myFluidGrid = {
       COLNUMBER : 1,COLMARGIN : 10, COLWIDTH : 222, actualHeight : 0,
       doLayout : function() {
          this.actualHeight = this.COLMARGIN * 2;
          var self = this;var pointer = 0;var arr = [];
          var columns = Math.max(this.COLNUMBER, parseInt($('body').innerWidth() / (this.COLWIDTH + this.COLMARGIN)));
          $('.box').css('position', 'absolute').css('width', this.COLWIDTH  + 'px');
          $('.box').each(function() {
             var tempLeft = (pointer * (self.COLWIDTH + self.COLMARGIN));
             $(this).css('left', tempLeft + 'px');
             var tempTop = 0;
             if (arr[pointer]) { tempTop = arr[pointer];	}
             $(this).css('top', tempTop + 'px');
             arr[pointer] = tempTop + $(this).outerHeight() + self.COLMARGIN;
             self.actualHeight += $(this).outerHeight();
             pointer++;
             if (pointer === columns) { pointer = 0; }
          });
          $("content").style.height = this.actualHeight + "px";
       }
    };
    $(window).ready(function() {myFluidGrid.doLayout();}).resize(function() {myFluidGrid.doLayout();});
    edit : Hmm.. non �a n'ira pas : �a va additionner les tailles de toutes les images : il faut compter chaque colonne s�par�ment et stocker les hauteurs dans un tableau, pour ensuite utiliser la valeur la plus �lev�e au moment du redimensionnement du div #content ^^ Yapuka...

  3. #3
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Bon ben finalement j'avais deux minutes ^^
    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
    var myFluidGrid = {
       COLNUMBER : 1,COLMARGIN : 10, COLWIDTH : 222, actualHeight : 0,
       doLayout : function() {
          this.actualHeight = 0;
          var self = this;var pointer = 0;var arr = [];
          var columns = Math.max(this.COLNUMBER, parseInt($('body').innerWidth() / (this.COLWIDTH + this.COLMARGIN)));
          $('.box').css('position', 'absolute').css('width', this.COLWIDTH  + 'px');
          $('.box').each(function() {
             var tempLeft = (pointer * (self.COLWIDTH + self.COLMARGIN));
             $(this).css('left', tempLeft + 'px');
             var tempTop = 0;
             if (arr[pointer]) { tempTop = arr[pointer];	}
             $(this).css('top', tempTop + 'px');
             arr[pointer] = tempTop + $(this).outerHeight() + self.COLMARGIN;
             if (arr[pointer] > self.actualHeight) self.actualHeight = arr[pointer];
             pointer++;
             if (pointer === columns) { pointer = 0; }
          });
          $("content").style.height = this.actualHeight + "px";
       }
    };
    $(window).ready(function() {myFluidGrid.doLayout();}).resize(function() {myFluidGrid.doLayout();});
    Et pas besoin de faire un tableau j'en avais un d�j� tout pr�t devant les yeux (arr[]) et je l'utilisais m�me pas

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Par d�faut
    Merci RomainVALERI pour ta bonne humeur et ton aide!
    Malheureusement, ta solution laisse d�sesp�r�ment mon footer en haut de page...
    Tu peux voir sur le lien test, c'est bien ton dernier script qui s'y trouve.
    Ou alors j'ai loup� un truc?

    PS: Le mieux que j'ai r�ussi � faire jusqu'ici est de mettre la barre de footer � la hauteur de la derni�re div "box". Cela dit, �a ne me sert � rien...
    Apparemment, il est ais� d'obtenir la hauteur d'une "box" mais moins ais� d'obtenir celle de la div "content".

    Merci en tous cas, et si t'as d'autres id�es, je suis preneur!
    Crois-moi, je d�teste qu'on m'apporte des solutions toutes faites mais j'ai pass� plus de 12h sur ce code sans trouver de r�ponses (pas que ce soit impossible mais le javascript et moi, �a fait deux).
    En ce qui concerne une solution CSS/HTML, tous les clearfix du web, overflow:auto/hidden, clear:both, display:inline-block etc...n'y changent rien.

    Merci!

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Par d�faut
    AAAAAH!
    Merci RomainVALERI!!

    En modifiant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $('content').style.height = this.actualHeight + "px";
    par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $('#content').css('height',this.actualHeight + "px");
    Ta syntaxe a l'air bonne pourtant (hormis le "#" manquant de la div) mais, pour une raison que j'ignore, une fois jquery activ�, il semble privil�gier l'autre syntaxe...

    En tous cas, �a fait trop plaisir de voir cette barre rouge se taper en dessous de mani�re dynamique quand elle est rest�e coll�e au dessus de l'�cran pendant des heures!

    Merci mille fois pour ton adaptation �clair�e du script; je l'ai relu, je l'ai compris et �a a beau �tre simple, c'est vraiment bien pens�. Merci et bonne continuation!

Discussions similaires

  1. R�ponses: 0
    Dernier message: 26/10/2009, 15h26
  2. R�ponses: 0
    Dernier message: 26/01/2008, 15h06

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