Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/12/2007, 17:36
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Redimensionar Imagen (en DIV), sentido Left y Top

Hola otra vez:

Bien, ahora empiezo a entender todo un poquito mejor. Como bien me citas, para que la imagen crezca hasta 150px midiendo inicialmente 64, hay que reservar un total de 150px en la celda. Como ya tenemos los 64 que ocupa la imagen, los márgenes deben ser de 150-64, osea de 86px. Si compruebas esta página verás que todo sigue funcionando bien:
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">
td {
    
width95px
    
font-size0.5em;
    
padding0;
    
margin0;
}
</
style>
</
head>

<
body>



<
TABLE border="1" style="border-collapse: collapse; ">
<
TR>
    <
TD><p>Mauris vestibulum tempus felisNulla ipsum loremauctor necpretium quisauctor egettortor.</p></TD>
    <
TD><p>iaculis feugiatInteger metus enimlaoreet idfeugiat atblandit sit ametmassa.</p></TD>
</
TR>
<
TR>
    <
TD><img id="carita" src="http://www.forosdelweb.com/images/icons/icon10.gif" style="width: 64px; height: 64px; margin-top:86px; margin-left: 86px;" onmouseover="aumentar()" onmouseout="reducir()" /></TD>
    <
TD><p>Cras at nibh nec purus lobortis tinciduntIn pretiumVestibulum blandit sagittis leoAenean ut nisiPellentesque non nislPhasellus vel massaNam ut risus..</p></TD>
</
TR>
<
TR>
    <
TD><p>Condimentum idconsequat bibendumtortorDonec eros felisaliquam eumattis noncursus veljusto.</p></TD>
    <
TD><p>egestas velit at nisiInteger laoreet fermentum eratAliquam mollis orci porttitor felis fringilla condimentum.</p></TD>
</
TR>
</
TABLE>



<
script type="text/javascript">
<!--


// document.getElementById abreviado
function $(x) { return document.getElementById(x); }


var 
aumentandoreduciendo;                // los procesos
function aumentar() {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Parámetros principales
    
var imagen = $("carita");
    var 
hastaCuanto 150;
    
// Proceso aumentativo
    
aumentando setInterval( function() {
        var 
anchuraActual parseIntimagen.style.width );
        var 
alturaActual parseIntimagen.style.height );
        if( 
anchuraActual<hastaCuanto && alturaActual<hastaCuanto ) {        // Si podemos aumentar todavía, aumentamos
            //dimensiones
            
imagen.style.width = (anchuraActual+1) +"px";
            
imagen.style.height = (alturaActual+1) +"px";
            
//margen
            
imagen.style.marginLeft = (parseInt(imagen.style.marginLeft)-1) +"px";
            
imagen.style.marginTop = (parseInt(imagen.style.marginTop)-1) +"px";
        }
        else                                                                
// Si no, paramos
            
clearInterval(aumentando);
    }, 
10);
}
function 
reducir() {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Parámetros principales
    
var imagen = $("carita");
    var 
hastaCuanto 64;
    
// Proceso reductivo
    
reduciendo setInterval( function() {
        var 
anchuraActual parseIntimagen.style.width );
        var 
alturaActual parseIntimagen.style.height );
        if( 
anchuraActual>hastaCuanto && alturaActual>hastaCuanto ) {
            
//dimensiones
            
imagen.style.width = (anchuraActual-1) +"px";
            
imagen.style.height = (alturaActual-1) +"px";
            
//margen
            
imagen.style.marginLeft = (parseInt(imagen.style.marginLeft)+1) +"px";
            
imagen.style.marginTop = (parseInt(imagen.style.marginTop)+1) +"px";
        }
        else
            
clearInterval(reduciendo);
    }, 
10);
}

// -->
</script>

</body>
</html> 


Ahora llega tu problema, que no puedes modificar los anchos de tus celdas. Si tiene que quedarse el ancho de la celda a 95px y quieres que la imagen sea de 150px, no queda más remedio que poner la imagen en position: absolute.

Igual hay que parirse un pequeño script para detectar la posición de una imagen en el documento, y pasarla a position: absolute sin que se entere el usuario... y después volverla a encajar en su sitio y ponerle position: relative y todos contentos... recuerdo que lo hice una vez.
Pero fíjate que para FF no hace falta hacer nada de ésto, lo interpreta como es y no varía a la tabla para nada:
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">
td {
    
width95px
    
font-size0.5em;
    
padding0;
    
margin0;
}
</
style>
</
head>

<
body>

<
div style="float: left; width: 50%;">
    <
p>Lorem ipsum dolor sit ametconsectetuer adipiscing elitIn pharetrajusto hendrerit tincidunt adipiscingtortor nulla ultricies velitsit amet sodales turpis nunc quis nullaMorbi lacinia consectetuer risusVivamus commodoarcu vel interdum ultricesturpis nisi mollis tellusvitae vulputate lacus pede id nequeAliquam aliquet leo quis nibhSed tempusest in laoreet ornareligula lectus auctor arcuvitae sodales ipsum elit ut nisiVestibulum aliquet dolor vel nuncMaecenas gravida fermentum dolorAliquam laoreet metus in lacusMaecenas quis augue sed orci vulputate rutrumSed maurisEtiam nisi nullaviverra sedcommodo atsollicitudin sedtellusInteger sem quampharetra egetdictum asodales nondolorVivamus orciNunc vestibulum scelerisque semSed convallis iaculis loremVivamus odioQuisque a pede sed sem adipiscing mattisDonec nonummy ante venenatis diamUt ultricies rutrum ligulaNam nulla odiopretium necmolestie uttempor utsem.</p>
</
div

</
div>
<
TABLE border="1" style="border-collapse: collapse; float: left; ">
<
TR>
    <
TD><p>Mauris vestibulum tempus felisNulla ipsum loremauctor necpretium quisauctor egettortor.</p></TD>
    <
TD><p>iaculis feugiatInteger metus enimlaoreet idfeugiat atblandit sit ametmassa.</p></TD>
</
TR>
<
TR>
    <
TD><img id="carita" src="http://www.forosdelweb.com/images/icons/icon10.gif" style="position: relative; width: 64px; height: 64px; margin-left: 0; margin-top: 0;" onmouseover="aumentar(this, 150)" onmouseout="reducir(this, 64)" /></TD>
    <
TD><p>Cras at nibh nec purus lobortis tinciduntIn pretiumVestibulum blandit sagittis leoAenean ut nisiPellentesque non nislPhasellus vel massaNam ut risus..</p></TD>
</
TR>
<
TR>
    <
TD><p>Condimentum idconsequat bibendumtortorDonec eros felisaliquam eumattis noncursus veljusto.</p></TD>
    <
TD><p>egestas velit at nisiInteger laoreet fermentum eratAliquam mollis orci porttitor felis fringilla condimentum.</p></TD>
</
TR>
</
TABLE>


<
p>
    <
button type="button" onclick="elem2absolute()">a absoluta</button>
    <
button type="button" onclick="elem2relative()">a relativa</button>
</
p>

<
script type="text/javascript">
<!--
// document.getElementById abreviado
function $(x) { return document.getElementById(x); }




var 
aumentandoreduciendo;                // los procesos
function aumentar(elemhastaCuanto) {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Proceso aumentativo
    
var elem0 elem;        // closure
    
aumentando setInterval( function() {
        var 
anchuraActual parseIntelem0.style.width );
        var 
alturaActual parseIntelem0.style.height );
        if( 
anchuraActual<hastaCuanto && alturaActual<hastaCuanto ) {        // Si podemos aumentar todavía, aumentamos
            //dimensiones
            
elem0.style.width = (anchuraActual+1) +"px";
            
elem0.style.height = (alturaActual+1) +"px";
            
//margen
            
elem0.style.marginLeft = (parseInt(elem0.style.marginLeft)-1) +"px";
            
elem0.style.marginTop = (parseInt(elem0.style.marginTop)-1) +"px";
        }
        else                                                                
// Si no, paramos
            
clearInterval(aumentando);
    }, 
10);
}
function 
reducir(elemhastaCuanto) {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Proceso reductivo
    
var elem0 elem;        // closure
    
reduciendo setInterval( function() {
        var 
anchuraActual parseIntelem0.style.width );
        var 
alturaActual parseIntelem0.style.height );
        if( 
anchuraActual>hastaCuanto && alturaActual>hastaCuanto ) {
            
//dimensiones
            
elem0.style.width = (anchuraActual-1) +"px";
            
elem0.style.height = (alturaActual-1) +"px";
            
//margen
            
elem0.style.marginLeft = (parseInt(elem0.style.marginLeft)+1) +"px";
            
elem0.style.marginTop = (parseInt(elem0.style.marginTop)+1) +"px";
        }
        else
            
clearInterval(reduciendo);
    }, 
10);
}

// -->
</script>

</body>
</html> 
Mientras que IE sí. Aquí he puesto varios cambios ya, aumentar() y reducir() funcionan con parámetros directamente y el margin-top y left está definido a cero (el position:relative no hace falta creo). Además de introducir texto antes de la tabla para ver los resultados.


Voy al siguiente post para seguir respondiendo que el límite de 10 000 caracteres anda advirtiendo cositas...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.