Actionscript 3.0: Aplicar estilos CSS a campos de texto

Actionscript 3.0: Aplicar estilos CSS a campos de texto

Etiquetas: StyleSheet parseCSS styleSheet htmlText

Imagen en reemplazo de flash

Los campos de texto en flash pueden contener texto simple o texto en formato HTML. El texto en formato HTML se almacena en la propiedad htmlText. Sobre los campos con texto HTML podemos aplicar hojas de estilo CSS, creadas en el código de la aplicación o cargadas en tiempo de ejecución.

En este ejemplo vamos a ver como cargar un archivo css, y aplicar estos CSS a un TextField que contiene un teto HTML. La hoja de estilos que vamos a utilizar, es esta:

  1.  
  2.   h1 {
    
  3.   font-family: Times New Roman, Times, _serif;
    
  4.   font-size: 30;
    
  5.   font-weight: bold;
    
  6.   }
    
  7.   h2 {
    
  8.   font-family: Arial, Helvetica, _sans;
    
  9.   font-size: 24;
    
  10.   }
    
  11.   p{
    
  12.   font-size: 15;
    
  13.   }
    
  14.   a{
    
  15.   color: #009900;
    
  16.   }
    
  17.   a:hover{
    
  18.   color: #00ff00;
    
  19.   }
    
  20.  

Lo primero que tenemos que hacer, es cargar la hoja de estilos. Para ello, utilizamos una instancia de Loader:

  1.  
  2. cargador = new URLLoader();
  3. cargador.addEventListener(Event.COMPLETE, onCSSFileLoaded);
  4. cargador.load(new URLRequest("http://www.esedeerre.com/ejemplos/as3/css/ejemplo.css")); 
  5.  

Una vez cargado el archivo, salta el evento COMPLETE, y creamos una instancia de StyleSheet, parseamos el CSS cargado, y se lo aplicamos al campo de texto. Después de aplicar el CSS al campo de texto, podemos rellenar el campo con el texto HTML que queramos:

  1.  
  2.   public function onCSSFileLoaded(event:Event):void
  3.   {
  4.   var sheet:StyleSheet = new StyleSheet();
  5.   sheet.parseCSS(cargador.data);
  6.   campo.styleSheet = sheet;
  7.   campo.htmlText = texto;
  8.   }
  9.  

El código completo, y el ejemplo en Flash, tras el salto.


  1. package 
  2. {
  3. 	import flash.display.MovieClip;
  4. 	import flash.net.URLRequest;
  5. 	import flash.events.Event;
  6. 	import flash.net.URLLoader;
  7. 	import flash.text.*;
  8.  
  9. 	public class  EjemploCSS extends MovieClip
  10. 	{
  11.         var cargador:URLLoader;
  12.         var campo:TextField;
  13.         var texto:String = "<h1>Esto es una cabecera h1</h1></br>" + 
  14.             "<h2>Esto es una cabecera h2</h2></br>" + 
  15. 			"<p>Este es el contenido donde vamos a meter varios enlaces:</p>" + 
  16. 			"<p><a href='http://www.google.com'>Google</a></p>" + 
  17. 			"<p><a href='http://www.yahoo.com'>Yahoo</a></p>" + 
  18. 			"<p><a href='http://www.altavista.com'>Altavista</a></p>"
  19.  
  20. 		public function EjemploCSS():void
  21. 		{
  22.             campo = new TextField();
  23.             campo.width = 300;
  24. 			campo.multiline = true;
  25.             campo.autoSize = TextFieldAutoSize.LEFT;
  26. 			campo.selectable = false;
  27.             addChild(campo);
  28.             cargador = new URLLoader();
  29.             cargador.addEventListener(Event.COMPLETE, onCSSFileLoaded);
  30.             cargador.load(new URLRequest("http://www.esedeerre.com/ejemplos/as3/css/ejemplo.css"));
  31. 		}
  32.  
  33.         public function onCSSFileLoaded(event:Event):void
  34.         {
  35.             var sheet:StyleSheet = new StyleSheet();
  36.             sheet.parseCSS(cargador.data);
  37.             campo.styleSheet = sheet;
  38.             campo.htmlText = texto;
  39.         }
  40. 	}
  41.  
  42. }

Descargar archivos

Comentarios
    • Autor
    • Gonzalo
    Muchas gracias por el ejemplo. Tengo una duda, es posible evitar los saltos de linea que mete el flash. Me explico, creo un estilo para un tag que cambia a rojo el color de la fuente y lo añado al fichero css. Si lo uso dentro de otro etiquetado, por ejemplo tu

    , es decir:

    hola que tal estás?

    pretendiendo en la misma linea poner solo el "que" en rojo, obtengo en el swf: hola que tal estas? ¿Se puede evitar?. GRACIAS.

    • Autor
    • Gonzalo
    Muchas gracias por el ejemplo. Tengo una duda, es posible evitar los saltos de linea que mete el flash. Me explico, creo un estilo para un tag -j- que cambia a rojo el color de la fuente y lo añado al fichero css. Si lo uso dentro de otro etiquetado, por ejemplo tu -p-, es decir: -p- hola -j- que -/j- tal estás? -p- pretendiendo en la misma linea poner solo el "que" en rojo, obtengo en el swf: hola que tal estas? ¿Se puede evitar?. GRACIAS.
    • Autor
    • hamoto
    excelente!!
    • Autor
    • qborreda
    Hola Daniel Oye, las propiedades CSS para flash, no cambian un poco con respecto a las de CSS de toda la vida .. ? Es decir .. no deberían ser fontFamily, fontSize, fontWeight ?? para que Flash las parseara bien?
    • Autor
    • victor
    Muy buenas y gracias por el aporte! Tengo dos problemas y después de 2 horas ya no puedo mas... seguro que tu ya lo has hecho xD 1. Como puedo importar un txt para poder editarlo más facilmente? En este caso está dentro de la clase y es una movida. 2. Me gustaría que fuera en un campo de texto que yo creara, no generarlo nuevo. ¿Es posible? Mil gracias por el aporte y si me ayudas con esto ya no te digo...
    • Autor
    • josue h
    tengo una tarea me preguntan en que parte de del codigo html podemos ingresar el css?
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: