我可以为TextField指定多个CSS类吗?

时间:2012-03-31 14:09:58

标签: actionscript-3 flash

我正在添加带有html文字的TextField。我正在申请StyleSheet

如何在我的html元素上应用多个类

<span class='classOne  classTwo'>my text </span>

我试过这个看起来像flash无法处理这个,它渲染没有任何样式的文本。

3 个答案:

答案 0 :(得分:2)

StyleSheets可以包含带空格的名称,因此,例如“classOne classTwo”是一个有效的标识符 - 您只需将引用的样式组合到组合名称下的新样式中,您的文本就会正确显示。

您可以通过扩展TextField类并手动将class的{​​{1}}属性中的所有引用样式组合到一个新的StyleSheet中来实现,然后将其传递给htmlText原来的一个:

super.styleSheet

答案 1 :(得分:1)

这最终会崩溃,但如果你只是想要结合几种风格,你可以做这样的事情,而不必像上面建议的那样使用FTE或TLF:

嵌套&lt; span&gt;第一个样式在另一个&lt; span&gt;内有第二种风格。内部范围的样式属性将覆盖外部范围上的样式属性,就像CSS继承一样。

package
{
    import flash.display.Sprite;
    import flash.text.StyleSheet;
    import flash.text.TextField;

    public class CSSTEst extends Sprite
    {
        public function CSSTEst()
        {
            var style:StyleSheet = new StyleSheet(); 
            var redStyle:Object = {}; 
            redStyle.color = "#FF0000"; 
            style.setStyle(".darkRed", redStyle);
            var bigStyle:Object = {};
            bigStyle.fontWeight = "bold";
            bigStyle.fontSize = 36;
            style.setStyle(".big", bigStyle);
            var greenStyle:Object = {};
            greenStyle.color = "#00FF00";
            style.setStyle(".green", greenStyle);
            var tf:TextField = new TextField(); 
            tf.styleSheet = style; 
            tf.htmlText = "<span class='darkRed'><span class='big'>Red</span></span> apple, Granny's <span class='big'>big <span class='green'>green</span> apple</span>"; 
            tf.width = tf.textWidth + 10;
            addChild(tf);
        }
    }
}

答案 2 :(得分:0)

这可能是由于Flash解释HTML的方式与大多数主要供应商浏览器解释HTML的方式不同。我的猜测是更细粒度的控制,你可以使用这个例子http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS2AEF3551-BB6C-4e20-8865-83CD7E685263.html并构建一些东西,允许你加载flash文本引擎中使用的样式的多个类。

只有想到的其他事情是在普通的flash组件之外使用某种html包装器来显示将解释class属性的html。