2017-07-20 2 views
1

私は、要素のfont-sizeがjavascriptによって決定されるウェブサイト(scibowltest.github.io)で作業してきました。ウェブサイトにアクセスすると、ブラウザをフルサイズと高さにしてラップトップ/デスクトップに表示すると問題なく表示されます。ただし、幅を小さくするようにウィンドウのサイズを変更すると、フォントが含まれているはずのdivをオーバーフローするようになります。Javascript Font-Resizer Overflow Div

次のコードは、フォントサイズの大きさを決定する関数font-sizerのコードです。

function fontSizer(text, box, scale) { 
    var textID = "#" + text; 
    var boxID = "#" + box; 
    var boxHeight = $(boxID).height(); 
    var boxWidth = $(boxID).width(); 
    var fontSize = 0; 
    if (boxHeight >= boxWidth) { 
    fontSize = (boxWidth * scale) + "px"; 
    } else if (boxHeight < boxWidth) { 
    fontSize = (boxHeight * scale) + "px"; 
    } else {} 

    var textHeight = $(textID).height(); 
    var textWidth = $(textID).width(); 

    if (textWidth > boxWidth) { 
    fontSize = ((fontSize * (scale * boxWidth))/(textWidth)) + "px"; 
    } else {} 

    $(textID).css("font-size", fontSize); 
} 

この関数は、テキストを含むdiv(ボックス)の小さい方の寸法に基づいて機能します。ただし、最後のif文は、テキストの幅がdivの幅より大きいため、テキストの幅がdivの幅とスケールの倍数になるようにフォントサイズを縮小しようとします。

明らかに、ウェブサイトを見ると、この最後のif文は機能しません。誰かが助けることができたら、私はそれを感謝します!

+0

私は新しいフォント対策( 'vw'、 'VH'、' vmin'、 'vmax')を使用して示唆している - これらのいくつかは、あなたのニーズに合う必要があります。 – Christoph

答えて

0

純粋なCSSソリューションでは、異なる画面サイズである正確な用途に合わせた新しいlength unitsの一部を使用することができます。

vwvhvminvmaxで遊んで、あなたに最高の結果を与えるものを見てください。私は個人的にはvminをたくさん使っています。

これは少しの手間が必要ですが、JavaScriptの使用を排除します。

また、この例では<wbr>を使用しましたが(必要ではありませんが)、オーバーフローを防ぐための「単語区切り」があります。

div { 
 
    width: 40vmin; 
 
    font-size: 8vmin; 
 
    border: 1px solid red; 
 
    resize: both; 
 
    text-align: center; 
 
} 
 

 
p { 
 
    width: 40vw; 
 
    font-size: 8vw; 
 
    border: 1px solid red; 
 
    resize: both; 
 
    text-align: center; 
 
}
resize the screen to see the fonts scale: 
 

 
<div>Start/<wbr>Stop</div> 
 

 
<p>Start/<wbr>Stop</p>

+0

お返事ありがとうございます - 私は別のstackoverflowの質問を見て、このソリューションを見つけましたが、私のCSSに実装するとき、私はそれを動作させることができませんでした。もう一度やり直してみますが、問題はdivレベルでfont-sizeを設定したときで、h1レベルで設定した場合とは違った表示になることがありました。誰にもこれについての推論がありますか? – user8338963

+0

また、私はこの解決策が再び同じ問題に遭遇すると思います。フォントサイズはvminに基づいて設定できますが、幅が高さより少し大きければ、フォントサイズは高さで計算されます、テキストはdiv境界をオーバーフローし続けます。 – user8338963

+0

私はこれをたくさん使っており、あふれさせることなくそれを行うことができると確信しています。フルスクリーンモードでコード例を試しましたか? – Christoph