2011-10-19 14 views
1

多分簡単な質問ですが、明らかな答えはないようです。テキストを表のセルに縮小する

私はレイアウトが固定されたテーブルを持っています(レイアウト全体をねじ込むことなくセルのサイズを変更することはできません)。テキストがオーバーフローした場合、テキストはクリップされるかラップされるのではなく、セルの内側に収まるように縮小されます。

私は実際には良いCSSソリューションでなければならないと期待していましたが、見つけられませんでした。 JavaScriptを使用して手動でこれを行う必要がありますか?

(最良の解決策は、固定レイアウトテーブルの中に動的テキストを入れないことですが、この場合は回避できません)。

+0

私は素晴らしいアルゴリズムの可能性以外に、1のためにチェックする必要があるだろう、と考えていますオーバーフロー、縮小、チェック、シュリンクなど、テキストが収まるまで続きます。 – JCOC611

+0

問題は最終的にはHTMLにまったくエクスポートせず、代わりにPostScript - > GhostScript - > PNGパスを実行することで解決しました。最終的に、Excelスプレッドシートを公開することは、予想よりも複雑になりました。 – leoluk

答えて

2

「あなたはできない」と言う人は嫌いですが、今日はその人にしなければなりません。残念ながら、CSSだけを使用してテキスト文字列の長さに基づいてテキストのサイズを動的に変更する方法はありません。 JavaScriptを使用してこれを解決する必要があります。テーブルの上に

+0

もう一つのオプションはもちろん、例えばPHPやJavaでページサーバー側を構築している場合、次のようにサイズを変更する必要のあるセルにインラインスタイルを追加することができます: '' –

+0

もちろん、テキストを前処理してコンテンツの長さに基づいて追加することができます。しかし、私は何か良いものを探しています。 – leoluk

2

異なるフォントサイズは、人々が、この中にまだ興味がある人のために切り取られたテキスト

1

を見ることができるので、overflow: hidden; text-overflow: ellipsis;でテキストをクリップし、ツールチップを追加許容できるならば、恐ろしい見に行くされて、私はPHPを書きましたスパンクラスのテキストをラップしてサイズを制御する機能。あなたは正しいあなたのテーブルのためにそれを得るために$maxLength$divisor変数と遊ぶし、その後、グローバル関数を適用することができます

function ShrinkText($text) 
    { 
     $maxLength = 20; // The length at which to start shrinking. 
     $divisor = 5; // The factor to shrink by 

     /* 
     * A divisor of 5 with a string of 30 would do the following: 
     * 
     * $diff = (30 - 20)          [10] 
     * $multiplier = ($diff/$divisor) * 10  [(10/5)*10 = 20] 
     * $percentage = 100 - $multiplier   [100 - 20 = 80] 
     * 
     * Output = '<span style="font-size:80%;">' . $text . '</span>' 
     * 
     */ 

     if(strlen($text) > $maxLength) 
     { 
      $diff = (strlen($text) - $maxLength); 
      $multiplier = ($diff/$divisor) * 10; 
      $percentage = 100 - $multiplier; 

      return '<span style="font-size:' . $percentage . '%;">' . $text . '</span>'; 
     } 
     else 
     { 
      return $text; 
     } 
    } 
関連する問題