Ver Mensaje Individual
  #19 (permalink)  
Antiguo 30/12/2007, 21:31
Avatar de virla
virla
 
Fecha de Ingreso: julio-2002
Ubicación: Rio Gallegos - Santa Cruz
Mensajes: 893
Antigüedad: 24 años, 2 meses
Puntos: 1
Re: Texto en dos columnas

Cita:
Iniciado por derkenuke Ver Mensaje
Voy a hacer una aportación más, no sé si será la última.

Código PHP:
<!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="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">
body {
    
height:100%;
}
#elArticulo {
    
width: 58%; 
    
background-color: #FFF4D2; 
    
height: 80%; 
    
font-size: 0.7em; 
    
font-family: verdana; 
    
margin:0; 
    
padding:50px 10px 30px 20px; 
    
line-height: 1.3em
}
#elArticulo p {
    
margin:0;
    
margin-bottom: 1.3em;
}
.
pal {
    
display: inline;
}
.
columnata {
    
clear: both;
    
width: 97%;
    
height: 700px;
}
.
columna {
    
width: 48%;
    
padding: 3px; 
    
background-color: #EDFFCC;
    /*border: solid 1px #669900; */
    
height: 700px;
    
float:left;
}
</
style>
</
head>
 
<
body>
 
 
 
<
div id="elArticulo">
    <
p>TEXTO 1 -- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc malesuada, orci nec convallis elementum, justo dui sodales felis, eu ullamcorper ante risus a mi. Mauris at mauris. Ut et ipsum quis mi accumsan consectetuer. Donec dictum sem nec ante. Proin magna libero, elementum eget, scelerisque nec, consequat vitae, dui. Pellentesque malesuada mauris vel diam. Vestibulum a sem. Vivamus magna massa, ullamcorper ac, varius pretium, aliquet nec, arcu. Nam tempor accumsan nulla. Fusce ipsum. Quisque ac ipsum non nisi commodo tincidunt. Etiam turpis. Duis bibendum velit non nisl. Nam volutpat lacinia erat. Nunc euismod. Suspendisse vel dolor non arcu pellentesque ultrices.</p>
 
    <
p>Sed iaculis libero et nisl. Sed congue dui sit amet est. Morbi sit amet elit vel turpis varius tristique. Morbi ac mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean sit amet nibh sed turpis nonummy euismod. Maecenas magna. Etiam suscipit, urna vitae sodales euismod, diam orci mollis libero, at pulvinar arcu sapien sit amet lectus. Nunc sagittis lobortis mi. Quisque ultrices.</p>
 
    <
p>In sem. Sed suscipit ipsum at mauris. Ut aliquam orci ullamcorper ligula. Nam sed arcu et nulla volutpat egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Suspendisse rhoncus. Suspendisse venenatis sapien vitae lorem. Mauris porta quam non nunc. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque quam justo, dapibus sed, ullamcorper ac, suscipit eget, massa. Sed suscipit ipsum at mauris. Ut aliquam orci ullamcorper ligula. Nam sed arcu et nulla volutpat egestas.</p>
 
    <
p>Integer a nisl. Etiam lectus magna, pulvinar consectetuer, elementum vitae, luctus rutrum, lacus. Cras leo. In faucibus, dui a tempor volutpat, purus magna nonummy ante, nec bibendum erat nunc convallis arcu. Praesent convallis. Mauris non libero. Vivamus nunc. Sed diam. Morbi pulvinar nulla sodales ipsum. Nam ac turpis eget ipsum consequat euismod.</p>
</
div>
<
button type="button" onclick="dosColumnas()">Dos columnas</button>
 
 
 
<
script type="text/javascript">
<!--
 
// altura total del documento
var doc_height = document.body.clientHeight || window.innerHeight;
 
// document.getElementById abreviado
function $(x) { return document.getElementById(x); }
 
/*
    El código coge cada palabra de la capa $("elArticulo"), y la mete en un DIV. 
    Ese DIV se mide en altura y se hallan sus coordenadas. 
    Se va colocando en columna1 los DIVs, uno por uno. 
    Siempre sabemos en que número de línea nos encontramos gracias a las coordenadas. 
    También sabemos el número de líneas que caben gracias a que medimos el alto de una palabra y el alto del DIV columna1.
 
    Cuando colocamos una palabra (o un salto de línea) y nos hemos pasado de la cantidad lineasCaben de columna1, entonces pasamos a poner palabras en columna2.
*/
function dosColumnas() {
    var 
capa = $("elArticulo");
    var 
hijos = capa.childNodes;
    
// voy a dibujar las dos columnas en la capa
    
var columnata = document.createElement("DIV");                // columnata contiene las dos columnas c1 y c2
    
columnata.className = "columnata";
    var 
c1 = document.createElement("DIV");
    
columnata.style.height = c1.style.height = 0.8*doc_height +"px";
    
c1.className = "columna";
    var 
c2 = c1.cloneNode(true);
    
columnata.appendChild(c1);
    
columnata.appendChild(c2);
    
capa.appendChild(columnata);
    
// fin del dibujo de las dos columnas
    // Variables principales para ir colocando palabra por palabra
    
var loPongoEn = c1;                    // controlará en qué columna ponemos las palabras
    
var alturaMaxLoPongoEn = loPongoEn.offsetHeight;        // la altura de loPongoEn
    
var lineasCaben;                    // no lo sabemos aún porque no sabemos lo que mide una línea
    
var lineasVamos=0;                    // contador para saber por qué linea vamos
    
var x0;                                // valor de la coordenada x de una palabra para la que empieza una linea nueva.
    // Bucle para recorrer los párrafos de capa, uno a uno
    
for(var i=0, l=hijos.length; i<l; i++) {
        if( 
hijos[i].nodeType==1 && hijos[i].tagName.toUpperCase()=="P" ) {
            var 
texto = hijos[i].childNodes[0].nodeValue;
            var 
palabras = texto.split(" ");
            
// Por cada palabra del párrafo, la vamos añadiendo
            
for(var j=0, n=palabras.length; j<n; j++) {
                var 
encapsulado = document.createElement("DIV");                    // creamos el DIV
                
encapsulado.className = "pal";                                        // lo ponemos inline
                
encapsulado.appendChild( document.createTextNode(palabras[j]) );    // le dibujamos la palabra al DIV
                
loPongoEn.appendChild(encapsulado);                                    // lo añadimos a la columna
                
loPongoEn.appendChild( document.createTextNode(" ") );                // añadimos a la columna el espacio detrás de la palabra    
                
if( lineasCaben == undefined )                    // si no estaba definido lineasCaben, ahora lo podemos definir
                    
lineasCaben = Math.floor( alturaMaxLoPongoEn / (encapsulado.offsetHeight+1) );
                var 
pos = findPos(encapsulado)[0];                // hallamos su coordenada X
                
if( x0 == undefined ) x0 = pos;                    // si x0 no estaba definido, ahora que colocamos la primera palabra la podemos definir
                
else if( x0 == pos ) lineasVamos++;                // si comenzamos una nueva línea, la contabilizamos
                
if( lineasVamos >= lineasCaben ) {                // Hemos puesto una línea más de las que cabían. Nos tenemos que arrepentir de haber puesto la ultima palabra
                    
loPongoEn.removeChild( loPongoEn.lastChild );        // eliminamos el espacio en blanco (nodo de texto)
                    
loPongoEn.removeChild( loPongoEn.lastChild );        // eliminamos la última palabra, la de arrepentimiento
                    
j--;                                        // repetir la palabra, pero ya en c2
                    // reseteamos las variables principales
                    
loPongoEn = c2;    
                    
lineasVamos = 0;
                    
x0 = undefined;
                }
 
            }
            
loPongoEn.appendChild( document.createElement("P") );        // dejamos un espacio entre párrafo y párrafo
            
lineasVamos++;                                                // contabilizamos el espacio como linea nueva
            
if( lineasVamos >= lineasCaben ) {                            // Hemos puesto una línea más de las que cabían. Nos tenemos que arrepentir de haber la última separación P
                
loPongoEn.removeChild( loPongoEn.lastChild );                // eliminamos la separación
                // reseteamos las variables principales
                
loPongoEn = c2;
                
lineasVamos = 0;
                
x0 = undefined;
            }
        }
    }
    
// Eliminación del texto original
    // elimino todos los hijos de capa que no sean DIVS!
    
for(var i=0; i<hijos.length; i++) {
        if( !(
hijos[i].nodeType==1 && hijos[i].tagName.toUpperCase()=="DIV") ) {
            
capa.removeChild( hijos[i] );
            
i--;
        }
    }
}
 
 
// créditos findPos: http://www.quirksmode.org/js/findpos.html
function findPos(obj) {
    var 
curleft = curtop = 0;
    if (
obj.offsetParent) {
        
curleft = obj.offsetLeft
        curtop 
= obj.offsetTop
        
while (obj = obj.offsetParent) {
            
curleft += obj.offsetLeft
            curtop 
+= obj.offsetTop
        
}
    }
    return [
curleft,curtop];
} 
 
 
 
 
// -->
</script>
 
</body>
</html> 
Bueno la verdad esta bueno salvo que tiene un problemita, cuando le volves a dar al boton se agranda el campo pero no vuelve a ponerlo en una columna o no tiene la posibilidad de poner en tres, pero el aporte esta muy bien, mis felicitaciones y felicidades para este año que comienza
__________________
---->Sin ayuda no se llega a ningun lado<----
Virla