Foros del Web » Programando para Internet » Javascript »

Sobre alineación de divs con css

Estas en el tema de Sobre alineación de divs con css en el foro de Javascript en Foros del Web. EDITO: ES JAVASCRIPT, NO CSS "Sobre alineación de divs con javascript" Hola a todos! Llevo dos dias intentando hacer un script que haga lo siguiente ...
  #1 (permalink)  
Antiguo 13/01/2011, 15:37
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años
Puntos: 18
Sobre alineación de divs con css

EDITO: ES JAVASCRIPT, NO CSS "Sobre alineación de divs con javascript"

Hola a todos! Llevo dos dias intentando hacer un script que haga lo siguiente con divs en css (cada color representa un div distinto):



Se podría pensar que se puede hacer con css facil, haciendo 4 columnas relative con el mismo float y asi mismo dentro de cada una 2 divs con relative y float, la cuestión es que el contenido es dinámico (de una base de datos), hay por cada "contenido" un div distinto y puede ser, como en el caso de la imagen, 8 (4*2) o 10 o 1 o 1209381...

He intentado hacer un script, como decia antes, que midiera la columna mas pequeña y el div lo insertara en dicha columna, luego volviera a medir las columnas y la siguiente columna mas pequeña se insertara el siguiente div... asi queda ordenado de izquierda a derecha y de menor columna a mayor, para ver un ejemplo... http://pinterest.com/ me podrian decir si hay un script por ahi que haga esto?

Pongo el codigo que llevo de momento (Lo primero es para ver cuantas columnas por pantalla caben)...


Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3.  
  4. <head>
  5.         <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  6.  
  7. <style>
  8.     div.caca {
  9.         position: relative;
  10.         float: left;
  11.         border: 1px solid #ADADAD;
  12.         width: 200px;
  13.     }
  14.      div.columna {
  15.         min-height: 20px;
  16.         position: relative;
  17.         float: left;
  18.         border: 1px solid #FF0000;
  19.         width: 210px;
  20.     }
  21.      span {
  22.         min-width: 190px;
  23.         border: 1px solid #FFF030;
  24.         width: 210px;
  25.     }
  26. </style>
  27.  
  28. <script>
  29.  
  30.     function generica() {
  31.        for (i=0; i<=10; i++) {
  32.           elecolumna = document.getElementById('fiel');
  33.           columna = document.createElement('div');
  34.           columna.className = 'columna';
  35.           //creamos una variable de numero de columna, asignamos id y creamos el child
  36.           columna.id = 'columna'+i;
  37.           elecolumna.appendChild(columna);
  38.           //creo el span
  39.          
  40.           elespan = document.getElementById('columna'+i);
  41.           span = document.createElement('span');  
  42.           span.id = 'span'+i;
  43.           elespan.appendChild(span);
  44.           //miro el top de la columna
  45.          quealto = document.getElementById('columna'+i).offsetTop;
  46.          if (quealto > 10){
  47.             //borro el ultimo nodo columna que se pasa
  48.               fcolumna = document.getElementById('fiel');
  49.               fcolumna.removeChild(document.getElementById('columna'+i));
  50.               //creo una variable que contendra el numero de columnas totales
  51.              var columnas_totales = i;
  52.             //ejecuto la funcion mostrar y salgo del for
  53.            
  54. //maximo que se va a cargar, como se increme
  55.  
  56.     variable = 1;
  57.             mostrar(columnas_totales, variable);
  58.             break;
  59.             }
  60.         }
  61.     }
  62.    
  63.    
  64.    
  65.    
  66.    
  67.    
  68.    
  69. //funcion que analiza cual es mas pequeño    
  70. function sortNumber(a,b)
  71. {
  72. return a - b;
  73. }
  74.  
  75.  
  76.  
  77. function repetir(columnas_totales, variable, span_minimo) {
  78.    
  79. //inicializamos jquery
  80. $(document).ready(inicializarEventos);
  81. function inicializarEventos()
  82. {
  83.  
  84.  //hacemos el request
  85. $("#"+span_minimo).load("ajax.php", {name: variable}, function(){});
  86.      
  87.       // para seguir el script se habra tenido que cargar el jquery de la fila de arriba
  88. $("#"+span_minimo).ajaxComplete(function(event,request, settings){
  89.    //llamamos a repetir para que vuelva a hacer las cosas
  90.  
  91.     variable = variable + 1;    
  92.     mostrar (columnas_totales, variable);
  93.    
  94.  });
  95. }
  96. }
  97.  
  98.  
  99.  
  100.  
  101.  
  102. //funcion PRINCIPAL que ejecuta el orden
  103. function mostrar (columnas_totales, variable) {
  104.  
  105. //miramos cual es la columna mas pequeña
  106. var matriz = new Array();
  107. //restamos 1 a columnas totales ya que si son 6 lo logico seria que de 0 a 5 fueran 6
  108. columnas_totales2 = columnas_totales-1;
  109.         for (n=0; n<=columnas_totales2; n++) {
  110.             que2 = document.getElementById('columna'+n).offsetHeight;
  111.             matriz[n] = que2;
  112.         }
  113.  
  114. //calculamos el TAMAÑO de la columna mas pequeña
  115. matriz_min = matriz.sort(sortNumber);
  116. matriz_min = matriz_min[0];
  117.  
  118.                 //Vemos a que COLUMNA corresponde ese tamaño anteriormente calculado
  119.  
  120.        for (o=0; o<=columnas_totales2; o++) {
  121.  
  122.          que3 = document.getElementById('columna'+o).offsetHeight;
  123.  
  124.                 if (que3 == matriz_min) {
  125.                    
  126.                     //columna a la cual se asigna
  127.                     span_minimo = 'columna'+o;
  128.                     break;
  129.                 }
  130.         }
  131.  
  132.  
  133. repetir(columnas_totales, variable, span_minimo);
  134.  
  135.        
  136. }
  137.  
  138.  
  139.  
  140.  
  141. </script>
  142. </head>
  143.  
  144. <body onload="generica();">
  145. <div id="fiel">
  146.  
  147. </div>
  148.  
  149. </body>
  150. </html>

Nota: falta un for por cada div que quiera meter, para que realice la funcion en todos, el codigo esta incompleto

Etiquetas: css
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:26.