Foros del Web » Programando para Internet » Javascript »

CSS de objeto dinámico

Estas en el tema de CSS de objeto dinámico en el foro de Javascript en Foros del Web. Hola, tengo un problema con el css. Cuando creo un elemento que antes no existia en el DOM y a este quiero cambiarle el estilo ...
  #1 (permalink)  
Antiguo 19/11/2012, 06:22
 
Fecha de Ingreso: diciembre-2009
Mensajes: 79
Antigüedad: 14 años, 4 meses
Puntos: 1
CSS de objeto dinámico

Hola,

tengo un problema con el css. Cuando creo un elemento que antes no existia en el DOM y a este quiero cambiarle el estilo del css, pues lleva uno u otro dependiendo de unas cosas, no puedo.

Por ejemplo se que existe el evento live, pero no me sirve, porque ya lo probé.

Alguien me podria dar una solución, u orientarme al menos??

Gracias y un saludo.
  #2 (permalink)  
Antiguo 19/11/2012, 06:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: CSS de objeto dinámico

Hola:

Cita:
Iniciado por Krlinhos Ver Mensaje
...se que existe el evento live...
Pues no... ese evento no existe en javascript

A los elementos creados dinámicamente no hay problema en aplicarle estilos o clases...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 19/11/2012, 07:03
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: CSS de objeto dinámico

Ejemplo para cambiar "dinamicamente" css mediante jsvascript :

Código Javascript:
Ver original
  1. document.getElementById('id').style.(propiedad)
  2.  
  3. /*El id puedes crearlo mediante un node, la propiedad puede ser cualquiera de CSS3 (en chrome) ne firefox y en IE hay reestricciones.*/
  4.  
  5. document.getElementById('id').style.backgroundImage = 'parametro'
  6.  
  7. //el parametro tiene que ir entre comillas simples, no como en un array.
¿Que pasa si quiero añadir valores tipo int/float? , me alegra que me hagas esa pregunta (de nada, brais) gracias brais!** xD , veamos un ejemplo :
Código Javascript:
Ver original
  1. document.getElementById('id').style.webkitTransform ='translateX('+(valor)+'px)';
  2. /*simplemente utilizamos el digno de concatenar elementos , es decir + a la apertura y al cierre.
  3. ejemplo completo : */
  4. document.getElementById('divCAJABOX').style.webkitTransform ='translateX('+(120)+'px)';



Espero que te sea de ayuda. Recuerda que Javascriopt es un lenguaje imperativo y el termino "dinamico" es pura redundancia.


ps. **me llamo brais, era una pequeña irreverencia por mi parte.

Última edición por Albuss; 19/11/2012 a las 07:10
  #4 (permalink)  
Antiguo 19/11/2012, 07:11
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: CSS de objeto dinámico

Hola:

Cita:
Iniciado por Albuss Ver Mensaje
//el parametro tiene que ir entre comillas simples, no como en un array.
No sé quién es el autor de los comentarios (no me refiero al código)... pero el tipo de comillas no tiene importancia... incluso podría ser una variable...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 19/11/2012, 07:14
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: CSS de objeto dinámico

Cita:
Iniciado por Krlinhos Ver Mensaje
Hola,

tengo un problema con el css. Cuando creo un elemento que antes no existia en el DOM y a este quiero cambiarle el estilo del css, pues lleva uno u otro dependiendo de unas cosas, no puedo.

Por ejemplo se que existe el evento live, pero no me sirve, porque ya lo probé.

Alguien me podria dar una solución, u orientarme al menos??

Gracias y un saludo.
Eso de live, me suena a que estás utilizando jquery, lo cual desvirtuaría la respuesta a tu pregunta, en casos como este debés acompañar la pregunta del código utilizado, incluso si no te funciona.
De estar creando un elemento y en base aciertas condiciones modificar su estilo, lo apropiado sería
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7. /*<![CDATA[*/
  8. /* estilos */
  9. .rojo{
  10. color: red;
  11. }
  12. /*]]>*/
  13. <script type="text/javascript">
  14. //<![CDATA[
  15. function crearCapa(){
  16. var capa=document.createElement("div");
  17. var texto=document.createTextNode("hola");
  18. capa.appendChild(texto);
  19. /* aqui ponés una condición para asignar una clase o definir un estilo */
  20. capa.className = "rojo";
  21. capa.style.border="1px solid #000";
  22. document.body.appendChild(capa);
  23. };
  24. onload=crearCapa;
  25. //]]>
  26. </head>
  27.  
  28. </body>
  29. </html>

Pero eso es solo orientativo ya que no se sabe, repito, que estás haciendo al momento

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 19/11/2012, 07:18
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: CSS de objeto dinámico

Cita:
Iniciado por caricatos Ver Mensaje
Hola:
No sé quién es el autor de los comentarios (no me refiero al código)... pero el tipo de comillas no tiene importancia... incluso podría ser una variable...
Saludos
Nop, lo se, lo he intentado y al menos ami solo me funcionan las comillas simples, creo que tiene algo que ver con la interpretacion que hace el interprete, aunque puedes ponerme un ejemplo si me equivoco.


Por cierto, ¿que pasa si queremos pasar una variable en vez de un integer o un valor puro? , veamos :

Código Javascript:
Ver original
  1. document.getElementById('divCAJABOX').style.webkitTransform ='translateX('+(MiVariable)+'px)';
  2. /*Vease lo facil que resulta
  3.  Podriamos complicar un poco mas el asunto aunque seria tarea dificil, pues para modificar una variable en el mismo aprametro solo hay que usar operadores logicos como en una sentencia normal :*/
  4. document.getElementById('divCAJABOX').style.webkitTransform ='translateX('+(120+MiVariable)+'px)';
  #7 (permalink)  
Antiguo 19/11/2012, 08:20
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: CSS de objeto dinámico

Cita:
Iniciado por Albuss Ver Mensaje
aunque puedes ponerme un ejemplo si me equivoco.
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9.  
  10. #divCAJABOX{
  11. background: lime;
  12. width: 300px;
  13. height: 200px;
  14. }
  15. /*]]>*/
  16. <script type="text/javascript">
  17. //<![CDATA[
  18. function tr(MiVariable){
  19. document.getElementById('divCAJABOX').style.margin ="10px " + MiVariable + "px";
  20. document.getElementById('divCAJABOX').style.border ='solid #000 '+(3+MiVariable)+'px';
  21. document.getElementById('divCAJABOX').innerHTML ="texto <br \/> " +(3*MiVariable) + "<br \/>texto<br \/>" + (3+MiVariable);
  22. }
  23. //]]>
  24. </head>
  25. <button  onclick="tr(20);">modificar</button>
  26. <div id="divCAJABOX">
  27. xxxxx
  28. </div>
  29. </body>
  30. </html>

Funciona de las dos formas
SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 19/11/2012, 08:26
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: CSS de objeto dinámico

He observado que has utilizado el signo de concatenar como si fuera un operador de suma, aunque no sea necesario al igual que en los if/else, siempre hay que tender a utilizar las llaves de apertura y cierre, que en este caso son los paréntesis.

'12px' no es igual que 'parametro('+(12)+'px)'; , luego vienen los fallos ¿aleatorios? y nos volvemos locos buscando algo simple. Hablo desde la experiencia.
  #9 (permalink)  
Antiguo 19/11/2012, 08:58
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: CSS de objeto dinámico

Cita:
Iniciado por Albuss Ver Mensaje
He observado que has utilizado el signo de concatenar como si fuera un operador de suma, aunque no sea necesario al igual que en los if/else, siempre hay que tender a utilizar las llaves de apertura y cierre, que en este caso son los paréntesis.

'12px' no es igual que 'parametro('+(12)+'px)'; , luego vienen los fallos ¿aleatorios? y nos volvemos locos buscando algo simple. Hablo desde la experiencia.
querías un ejemplo en el que las comillas simples y las comillas dobles fuesen indistintos en el funcionamiento, pues bien, en ese ejemplo se demuestra.
la modificación de un estilo requiere en este caso la especificación del tipo de unidad en la que se trabaja,
miVariable + 'px' representa dicho valor para la propiedad a modificar, border.
No veo diferencia con hacer

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. //<![CDATA[
  3. function tr(MiVariable){
  4. document.getElementById('divCAJABOX').style.margin ="10px " + MiVariable + "px";
  5. document.getElementById('divCAJABOX').style.border ='solid #000 '+(3+MiVariable)+'px';
  6. document.getElementById('divCAJABOX').style.borderRadius =(2*MiVariable+(50))+'px';
  7. document.getElementById('divCAJABOX').innerHTML ="texto <br \/> " +(3*MiVariable) + "<br \/>texto<br \/>" + (3+MiVariable);
  8. document.getElementById('divCAJABOX').style.webkitTransform ='translateX('+(MiVariable)+'px)';
  9. document.getElementById('divCAJABOX').style.webkitTransform ="translateY("+(620+MiVariable)+"px)";
  10. }
  11.  
  12. //]]>
  13. </script>

Los paréntesis son necesarios para definir la operación, no es lo mismo
"translateY("+(620+MiVariable)+"px)"
que
"translateY("+620+MiVariable+"px)"

en cuanto a los paréntesis contenidos entre las comillas, simple o dobles, son solo parte de la cadena que corresponde a la propiedad css.
Utilizo el signo + ya sea para concatenar y crear la cadena final ó para definir la operación según vaya siendo necesario.

Fallos aleatorios?

No encuentro la relación

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 19/11/2012, 09:04
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: CSS de objeto dinámico

Gracias por el ejemplo extendido, por cierto en cuanto a lod e fallos aleatorios , ¿Mi lexico se confunde demasiado como para apreciar ironias?
  #11 (permalink)  
Antiguo 19/11/2012, 09:23
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: CSS de objeto dinámico

Cita:
Iniciado por Albuss Ver Mensaje
Gracias por el ejemplo extendido, por cierto en cuanto a lod e fallos aleatorios , ¿Mi lexico se confunde demasiado como para apreciar ironias?
De nada @Albuss.
Con respécto a tu léxico, tenés que entender lo siguiente, no todos los que participan de un post tiene el mismo nivel de conocimiento y por extensión de comprensión de lo que se señala. Por eso ciertos conceptos no los podemos dejar en el aire, por ejemplo:
Cita:
el parametro tiene que ir entre comillas simples, no como en un array.
(imaginate si la gente que esta empezando con js toma eso como una premisa cierta)
@caricatos te lo señalo y yo te lo ejemplifiqué, lo mismo se aplica al uso de 12 ó (12)
entre quienes manejamos un poco más la cosa, son aceptables la "ironías", pero no siempre los que están comenzando las van a interpretar correctamente.
Y te lo dice alguien que también se pone bastante irónico a veces
http://www.forosdelweb.com/f4/como-i...2/#post4313369
http://www.forosdelweb.com/f4/como-i...2/#post4313703

Saludos colega
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 19/11/2012, 10:06
 
Fecha de Ingreso: diciembre-2009
Mensajes: 79
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: CSS de objeto dinámico

Hola, si que dio q hablar jajaja gracias a todos. Como dice Emprear estoy usando jQuery. Probare lo que me deciis a ver si consigo de una vez arreglar el desaguisado :)

PD.- simplemente estoy intentando hacer que cuando se haga click sobre un icono, aparezca un div con un texto informativo, pero eso necesito dar "dinamicamente" el valor de 'left' y 'top' para que el div se posicione en el sitio correcto :)

Saludos!
  #13 (permalink)  
Antiguo 20/11/2012, 05:32
 
Fecha de Ingreso: diciembre-2009
Mensajes: 79
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: CSS de objeto dinámico

Hola os adjunto mi código para que podáis ver la función:

Código:
function mostrarAlt(info,event)
{
	$('body').prepend('<div id="wInfo"">'+info.attr("alt")+'</div>');
	//determina un margen de pixels del div al raton
	margin=5;

	//La variable IE determina si estamos utilizando IE
	var IE = document.all?true:false;
	//Si no utilizamos IE capturamos el evento del mouse
	var tempX = 0;
	var tempY = 0;

	if(IE)
	{ //para IE
		tempX = event.clientX + document.body.scrollLeft;
		tempY = event.clientY + document.body.scrollTop;
	}else{ //para netscape
		tempX = event.pageX;
		tempY = event.pageY;
	}
	if (tempX < 0){tempX = 0;}
	if (tempY < 0){tempY = 0;}

	document.getElementById('wInfo').style.top = (tempY+margin);
	document.getElementById('wInfo').style.left = (tempX+margin);
	document.getElementById('wInfo').style.display='block';
	return;
}
  #14 (permalink)  
Antiguo 20/11/2012, 05:51
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: CSS de objeto dinámico

Hola:

No creo que seas necesario usar una librería, pero ya que has puesto el código, no te olvides de las magnitudes, que creo que son pixeles...

Código:
document.getElementById('wInfo').style.top = (tempY+margin) + "px";
Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 20/11/2012, 07:48
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: CSS de objeto dinámico

@Krlinhos
Quizás no entendí lo que querés hacer, pero creo que algo asi bastaría
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <title>Sitio en Mantenimiento</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7. /*<![CDATA[*/
  8. .icono{
  9. width: 100px;
  10. height: 20px;
  11. margin: 10px 0;
  12. background: lime;
  13. cursor: pointer;
  14. }
  15. #wInfo{
  16. border: dotted 1px #666;
  17. width: 300px;
  18. height: 100px;
  19. position: absolute;
  20. top: -500px;
  21. margin: 10px;
  22. }
  23. /*]]>*/
  24.  
  25. <script type="text/javascript">
  26. //<![CDATA[
  27. function info(l,t,texto){
  28. if(l == undefined){
  29. document.getElementById('wInfo').style.top ="-500px";
  30. return false;
  31. }
  32. document.getElementById('wInfo').style.top = t + "px";
  33. document.getElementById('wInfo').style.left = l + 'px';
  34. document.getElementById('wInfo').innerHTML = texto;
  35. }
  36. //]]>
  37. </head>
  38. <div class="icono" onclick="info(100,300,'texto informativo para icono 1')">icono 1</div>
  39. <div class="icono" onclick="info(400,500,'texto informativo para icono 2')">icono 2</div>
  40. <div class="icono" onclick="info(650,50,'texto informativo para icono 3')">icono 3</div>
  41. <div id="wInfo" onclick="info();"><!-- click sobre esta capa oculta el mensaje --></div>
  42. </body>
  43. </html>
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #16 (permalink)  
Antiguo 23/11/2012, 10:41
 
Fecha de Ingreso: diciembre-2009
Mensajes: 79
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: CSS de objeto dinámico

Ey! gracias a todos, ya esta solucionao, es que soy medio tonto y no ponia lo de px... o cuando lo puse lo puse mal y por eso crei que ahí no andaba el fallo ;)

Gracias de nuevo!

Etiquetas: css, objeto
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




La zona horaria es GMT -6. Ahora son las 15:37.