2016-03-14 9 views
13

画面サイズに反比例してfont-sizeを達成するための@mediaクエリの代替手段はありますか? (例えば、小さな画面ではフォントが小さくなる2vwの反対の効果)。@mediaクエリやjavascriptを使用しない、より小さい画面上の大きなフォント?

私の最初の試みは、ビューポートの幅の増分で値を分割していましたが、が動作し、残念なことに、font-size: calc(100/2vw);は機能しません。定義により

codepen of my first try

+1

"not a number"で分けることができないためです。ディメンション値を数値で割ることは、10vwを2で割った値が5vwであるために機能します。しかし、2vwで10を分けるとどうなるでしょうか?結果は5/vw、または「1/vwの5倍」となりますが、これは意味をなさないものです。コメントのために –

+0

ありがとう、マイク;そのより明確な今。私の目的は、フォントサイズを画面サイズに反比例させるために 'calc()'メソッドを使用していましたが、この方法では不可能だと思われます。 –

+0

最終的な価値は何になりますか... 50vw ??? – Aziz

答えて

13

あなたは、ビューポート幅の増加によりpx値を分割することはできませんが、ビューポート幅の増加によりpx値を減らすこの逆のサイズの挙動を達成することができます。

例:vhvminvmax
font-size: calc(40px - 2vw);

Codepen DEMO

代わりに、ビューポートのサイズに関連した他の3台を使用することができます。

例:
font-size: calc(40px - 2vh);
font-size: calc(200px - 20vmin);
font-size: calc(200px - 20vmax);

VW - ビューポートの幅の1%と比較*。
vh - ビューポートの高さの1%に相当*。
vmin - ビューポートの*小さい方の寸法の1%に相対します。
vmax - ビューポートの*より大きい次元の1%に相対します。

*ビューポート =ブラウザのウィンドウサイズ。

出典:w3schools

+0

私はこの解決策を今すぐ見つけました。とにかく、新しいアイデアや情報が歓迎されるように、質問にはまだオープンな賞金があります。 –

+1

私の答えの利点は、最小/最大サイズを持つことができ、非常に小さなパフォーマンスヒットで、1つのアイテムのみを対象とするためです。 – LGSon

2

、VWは、ビューポートの幅の1/100です。それでおしまい。 2vw =画面の2/100です。数学はそのようには機能しないので、反比例するような方法はありません。私は思考実験としてこれをやっていると仮定しています。あなたのコードの問題を解決しようとするよりも、私はそれを残しておきます。

JavaScriptのサイズに反比例するフォントのサイズを計算することができます。 Here's a codepen

HTML:

<div > 
    This is text 
</div> 

JS:

$(window).resize(function() { 
    area = 50000; 
    width = $(window).width(); 
    fontSize= (Math.ceil(area/width)); 
    $('div').css('font-size', fontSize); 
    }).resize(); 
1

私はあなたが行うことができる最高のビューポートに相対ではないフォントサイズを使用することであると思います。たとえば、1emはモバイルデバイスでは比較的大きく、デスクトップクライアントでは比較的小さくなります。流体レイアウトを使用する場合、emは完璧です。静的レイアウトを使用する場合、最適なオプションはおそらくpxになります。しかし、pxを使用するのは、モバイルデバイスが潜在的にデスクトップクライアントと同じくらい多くのピクセルを持つ可能性があるため、ちょっとしたことです。

5vw

前者評価さと距離の表現ではない50/vw後者評価するからであるcalc(100/2vw)ないcalc(10vw/2)動作することが、理由。より正確には、エンジンはスカラーでしか分割できません

合計で、やりたいことをするには流体レイアウトがあり、フォントサイズの単位としてemを使用する必要があります。しかし、JavaScriptなしでビューポートのサイズの直接の比率を得ることはできません。もちろん、レイアウトの目的には一般的に頼らないといけません。この1つはパフォーマンスは非常に少ないと一度だけリサイズあたり1つののみの要素、体のために実行する必要が影響を与えるのにここ

1

は、スクリプトソリューション(あなたが望んでいた場合でも、見つかった、唯一のCSS)です。

これはCSSに比べて1つの利点があります。最小/最大サイズを持つことができ、スクリプトを有効にしてリスクのない方法でプログレッシブエンハンスメントとして機能します。

var fontMax = 40, fontMin = 14; 
 

 
function sizeBodyFont() { 
 
    var fontSize = ((screen.width/window.innerWidth) * 10); 
 
    document.body.style.fontSize = Math.min(Math.max(fontSize,fontMin),fontMax) + 'px'; 
 
} 
 

 
sizeBodyFont(); 
 

 
(function(el) { 
 
    window.addEventListener('resize', sizeBodyFont); 
 
}(document.querySelector('#test')))
body { 
 
    font-size: 20px; 
 
} 
 
span { 
 
    font-size: 100%; 
 
} 
 
div { 
 
    font-size: 150%; 
 
}
<span>Hey there</span> 
 
<div>Hey there</div>

+1

の**賞金の理由**:** a **)のためのものです。プレーンなjavascriptは目標(css-only)以上ですが、jQueryよりも軽いです。 ** b **)間違った情報が取り除かれ、答えが更新されます** c **)スニペットの例は非常にうまく動作します。 –

0

あなたは相対的なフォントスタイルを使用することができます。 like -

html, body { 
font-size: 16px; 
} 

h1 { 
font-size: 2.5em; 
} 

p { 
font-size: 1em; 
} 
関連する問題