“文本溢出:省略号;”在XUL应用程序中

时间:2010-10-04 04:34:22

标签: html css xul css3

我正在为现有的XUL应用程序conkeror编写扩展。在那里,在 我正在编写的用户界面的某些部分,我正在创建HTML元素 在这种情况下,固定宽度<span>,以显示各种结果。

在那些span内,有一些文字,有时候文字太长了 适合固定的容器。我想切断太长的零件, 并以省略号结束它。

这些span目前具有以下CSS属性:

display: inline-block;
width: 30%;
overflow: hidden;
white-space: nowrap;

除此之外,我还想使用text-overflow: ellipsis;,但它会转变 Gecko平台还没有实现。但是,对于纯HTML页面 对于常规样式表,碰巧有一个Firefox和的解决方法 其他基于Gecko的产品,可以切断超长文本并放置文本 无论如何,省略了它的最后工作。

描述了该技术的细节 here。它的 使用Gecko能够运行XUL代码来实现其魔力。

所以我也尝试在我的XUL应用程序中使用它。我改变了我的意见 样式表包括描述的 -moz-binding: url('ellipsis.xml#ellipsis');,也创造了 如上所述elipsis.xml文件。

然而,这样做(或类似的事情使用不同的URL,例如chrome://或 绝对文件:// URL)似乎在我的内容中没有任何影响 应用。实际上,它甚至没有尝试访问ellipsis.xml文件 所有,根据strace。

显然,XUL能够做我想做的事情,所以我假设我正在做某事 错了,或者我只是错过了我必须先处理的一些细节 为了获得理想的结果。

我正在寻找的是一种拉常规text-overflow: ellipsis;的方法 在XUL应用程序中跟踪,或者,获得相同结果的方法 没有上述技术。

2 个答案:

答案 0 :(得分:2)

对于某些(可能是安全性)原因,您需要在CSS文件中使用chrome://网址。我用conkeror 0.9.2和xulrunner 1.9.1测试了它。

-moz-binding: url("chrome://conkeror/content/ellipsis.xml#ellipsis");

ellipsis.xml位于/conkeror/install/path/modules/的位置(在debian / usr / share / conkeror / modules上)。您可以检查chrome.manifest文件以找到XML文件的正确位置,可能是样式文件夹。

答案 1 :(得分:1)

你说它没有任何影响吗?

使用

display:block; text-overflow:clip; overflow:hidden; white-space:nowrap;

它至少应该在没有“......”的情况下切断文本。

对xml文件的引用是否正确,css和xml文件是否在同一路径上?

另外,请尝试使用此代码:

<?xml version="1.0"?>
<bindings
  xmlns="http://www.mozilla.org/xbl"
  xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<binding id="none">
  <content><children/></content>
</binding>
<binding id="ellipsis">
  <content>
    <xul:label crop="end"><children/></xul:label>
  </content>
  <implementation>
    <field name="label"> document.getAnonymousNodes( this )[ 0 ] </field>
    <field name="style"> this.label.style </field>
    <property name="display">
       <getter>
         this.style.display
       </getter>
       <setter>
         if( this.style.display != val ) this.style.display= val
       </setter>
    </property>
    <property name="value">
      <getter>
         this.label.value
      </getter>
      <setter>
        if( this.label.value != val ) this.label.value= val
      </setter>
    </property>
    <method name="update">
      <body>
         var strings= this.textContent.split( /\s+/g )
         if( !strings[ 0 ] ) strings.shift()
         if( !strings[ strings.length - 1 ] ) strings.pop()
         this.value= strings.join( ' ' )
         this.display= strings.length ? '' : 'none'
      </body>
    </method>
    <constructor> this.update() </constructor>
  </implementation>
  <handlers>
    <handler event="DOMSubtreeModified"> this.update() </handler>
  </handlers>
</binding>
</bindings>