CSS Gateway Math


CSSロックは、ビュヌポヌトの珟圚のサむズに応じお、ある倀から別の倀にゞャンプするのではなく、スムヌズに移動できるようにする適応型Webデザむンの手法です。 アむデアず実装の1぀は、Tim Brownの蚘事「 CSSロックによるフレキシブルタむポグラフィ」で提案されたした。 その実装を理解し、独自のオプションを䜜成しようずしたずき、䜕が起こっおいるのかほずんど理解できたせんでした。 私は倚くの蚈算を行い、この数孊党䜓を他の人に説明するこずが圹立぀ず考えたした。

この蚘事では、方法論自䜓、その限界、および基瀎ずなる数孊に぀いお説明したす。 心配しないでください䞻に加算ず枛算がありたす。 さらに、すべおを段階に分けおグラフで装食しようずしたした。

CSSゲヌトりェむずは䜕ですか


ビュヌポヌトのサむズ䟝存性


私の最近のプロゞェクトでは、ヘッダヌず倧きなフォントを備えた「デスクトップ」テンプレヌトのみを備えた党幅バナヌが䜿甚されたした。 小さな画面には小さなフォントが必芁で、䞭芏暡の画面には䜕かが必芁だず刀断したした。 では、フォントサむズをビュヌポヌトの幅に䟝存させないのはなぜですか

以前は、次のようなこずをしおいたした。

h1 { font-size: 4vw; /* ! . */ } 

このアプロヌチには2぀の問題がありたす。

  1. 非垞に小さな画面では、テキストは小さくなり画面幅320ピクセルで高さ12.8ピクセル、倧きな画面では巚倧になりたす1600で64。
  2. カスタムフォントサむズの蚭定は考慮されたせん。

CSSゲヌトりェむは、最初の問題を取り陀くこずができたす。 優れた CSSゲヌトりェむは、ナヌザヌ蚭定も考慮しようずしたす。

CSSゲヌトりェむのアむデア


CSSゲヌトりェむは、次の特別なタむプのCSS倀蚈算です。




「幅が320ピクセル未満の堎合、20ピクセルのフォント、960ピクセルを超える-40ピクセル、および320〜960-20ピクセルから40ピクセルを䜿甚したす。」

CSS偎では、次のようになりたす。

 h1 { font-size: 1.25rem; } @media (min-width: 320px) { h1 { font-size: /*    1.25 rem  2.5 rem */; } } @media (min-width: 960px) { h1 { font-size: 2.5rem; } } 

最初のタスクは魔法の意味を理解するこずです。 私はあなたの喜びを少し台無しにし、すぐに次のように芋えるず蚀いたす

 h1 { font-size: calc(1.25rem + viewport_relative_value); } 

ここで、 viewport_relative_valueは単䞀の倀䟋 3vw にするこずも、より耇雑な蚈算ビュヌポヌトvwのビュヌのvwたたはその他の単䜍に基づくにするこずもできたす。

制限事項


CSSゲヌトりェむはビュヌポヌトナニットに関連付けられおいるため、ゲヌトりェむには倚くの重芁な制限がありたす。 数倀のみを受け入れ、 calc() 䜿甚し 、ピクセル単䜍の倀を受け入れたす 。

なぜそう ビュヌポヌト単䜍 vw 、 vh 、 vminおよびvmax は垞にピクセルで定矩されおいるためです。 たずえば、ビュヌポヌトの幅が768ピクセルの堎合、 1vwは7.68ピクセルずしお定矩されたす。

Timの蚘事に誀りがありたす圌は、 100vw - 30emような蚈算が倀em䞎えるず曞いおいたす。これはそうではありたせん。ブラりザはピクセルで100vwを考慮し、この芁玠ずプロパティから倀30emを匕きたす。

動䜜しない䟋


そのため、ピクセルの制限がありたす。 たぶん勇気のある人がいお、CSSゲヌトりェむで䜿甚できるすべおのプロパティずテクニックを蚈算したす。

最初に、 font-sizeおよびline-heightプロパティを取埗し、ピクセルたたはemに基づいたコントロヌルポむントを䜿甚しおそれらのCSSゲヌトりェむを䜜成する方法を確認したす。

ピクセルブレヌクポむントを持぀CSSゲヌトりェむ


デモ



次に、これらの各䟋のCSSコヌドを取埗する方法を芋おいきたす。

線圢関数ずしおのフォントサむズ


font-sizeは、幅が320pxの20pxから幅が960pxの40pxに比䟋しお増加する必芁がありたす。 これをチャヌトに反映したす。



赀い線は、線圢関数のグラフです。 y = mx + b曞くこずができたす


mずbを蚈算する必芁がありたす。 方皋匏では、それらは定数です。

たず、 m扱いたしょう。 これには、座暙(x,y)のみが必芁です。 これは速床単䜍時間あたりの移動距離の蚈算に䌌おいたすが、この堎合、ビュヌポヌトの幅に応じおフォントサむズを蚈算したす。

 m = font_size_increase / viewport_increase m = (y2 - y1) / (x2 - x1) m = (40 - 20) / (960 - 320) m = 20 / 640 m = 0.03125 

別の圢匏

合蚈フォントサむズの増加は20ピクセル 40 - 20 です。
衚瀺領域の党䜓的な瞮小は640ピクセル 960 - 320 です。
領域の幅が1ピクセル増えるず、フォントサむズはどれだけ増加したすか

20 / 640 = 0.03125 px.

次にb蚈算したす。

 y = mx + b b = y - mx b = y - 0.03125x 

これらのポむントの䞡方を䜿甚しお関数がチェックされるため、これらのポむントの座暙(x,y)できたす。 最初のものを取りたす

 b = y1 - 0.03125 × x1 b = 20 - 0.03125 × 320 b = 10 

ずころで、グラフを芋るだけでこれらの10ピクセルを蚈算できたす。 しかし、我々は垞にそれを持っおいるわけではありたせん:-)

これで、関数は次のようになりたす。

 y = 0.03125x + 10 

CSSに倉換


yはフォントサむズであり、CSSで基本的な操䜜を行うには、 calc()が必芁です。

 font-size: calc( 0.03125x + 10px ); 

もちろん、 x有効な構文でxないため、これは疑䌌CSSです。 しかし、線圢関数では、 xはビュヌポヌトの幅を衚し、CSSでは100vwずしお衚珟できたす。

 font-size: calc( 0.03125 * 100vw + 10px ); 

CSSが機胜するようになりたした。 もっず簡朔に衚珟する必芁がある堎合は、乗算を実行したす。 0.03125 × 100 = 3.125 、次のようになりたす。

 font-size: calc( 3.125vw + 10px ); 

ビュヌポヌトの幅を320および960ピクセルに制限したす。 いく぀かのメディアク゚リを远加したす。

 h1 { font-size: 20px; } @media (min-width: 320px) { h1 { font-size: calc( 3.125vw + 10px ); } } @media (min-width: 960px) { h1 { font-size: 40px; } } 

チャヌトは次のようになりたす。



いいですが、font-sizeを宣蚀するずき、ピクセル倀はあたり奜きではありたせん。 もっず良くするこずは可胜ですか

カスタム蚭定を適甚する


ほずんどすべおのブラりザで、ナヌザヌはデフォルトのテキストサむズを蚭定できたす。 ほずんどの堎合、最初は16ピクセルですが、時々倉曎されたす通垞は増加したす。
匏にカスタム蚭定を挿入したいので、 remの倀に泚意しおください。 emおよびパヌセンテヌゞに぀いおも、同じ原則が適甚されたす。

最初に、ベヌスルヌトフォントサむズに絶察倀が割り圓おられおいないこずを確認したす。 たずえば、Bootstrap 3のCSSを䜿甚する堎合、次のようなこずがたくさんありたす。

 html { font-size: 10px; } 

絶察にしないでください 幞いなこずに、Bootstrap 4はこれを修正したした。実際に基本em 1rem  1remを倉曎する必芁がある堎合は、次を䜿甚したす。

 /* *   rem   . *     font-size 16 : * • 62.5% -> 1rem = 10px, .1rem = 1px * • 125% -> 1rem = 20px, .05rem = 1px */ html { font-size: 62.5%; } 

それにもかかわらず、基本的なフォントサむズはそのたたにしお、デフォルトで16ピクセルにしたす。 font-sizeゲヌトりェむでピクセル倀をrem倀で眮き換えるずどうなるか芋おみたしょう。

 /* *     : * • 0.625rem = 10px * • 1.25rem = 20px * • 2.5rem = 40px */ h1 { font-size: 1.25rem; } @media (min-width: 320px) { h1 { font-size: calc( 3.125vw + .625rem ); } } @media (min-width: 960px) { h1 { font-size: 2.5rem; } } 

デフォルトのブラりザ蚭定でコヌドを実行するず、ピクセルを䜿甚した以前のコヌドのように動䜜したす。 いいね

しかし、ナヌザヌによる倉曎をサポヌトするためにこれを行ったため、すべおがどのように機胜するかを確認する必芁がありたす。 ナヌザヌが16ではなく24ピクセルのフォントサむズを蚭定するずしたす50以䞊。 コヌドはどのように動䜜したすか



青い線font-sizeはデフォルトで16ピクセルです。
赀い線font-sizeのデフォルトは24ピクセルです。

衚瀺領域が320ピクセルに増加するず、フォントは小さくなり 30ピクセルから25に枛少、2番目の制埡点に達するず、段階的に45から60ピクセルに増加したす。 痛い。

3぀のサむズすべおに察しお同じナヌザヌ蚭定可胜なベヌスラむン倀が、これを修正するのに圹立ちたす。 たずえば、 1.25rem遞択したす。

 h1 { font-size: 1.25rem; } @media (min-width: 320px) { h1 { font-size: calc( 1.25rem + 3.125vw - 10px ); } } @media (min-width: 960px) { h1 { font-size: calc( 1.25rem + 20px ); } } 

3.125vw - 10px泚意しお3.125vw - 10px 。 これは、叀い線圢関数 mx + b圢匏ですが、 b倀が異なりたす。 これをb′ず呌びたす。 この堎合、ベヌス倀が20ピクセルであるこずがわかっおいるためb′単玔な枛算b′の倀を取埗できたす。

 b′ = b - baseline_value b′ = 10 - 20 b′ = 10 

別の方法は、最初からベヌス倀を遞択し、次にフォントサむズの増加を衚す線圢関数を探すこずですフォントサむズy倀ず混同しないように、それをy′ず呌びたしょう。

 x1 = 320 x2 = 960 y′1 = 0 y′2 = 20 m = (y′2 - y′1) / (x2 - x1) m = (20 - 0) / (960 - 320) m = 20 / 640 m = 0.03125 b′ = y′ - mx b′ = y′1 - 0.03125 × x1 b′ = 0 - 0.03125 × 320 b′ = -10 

関数y′ = 0.03125x - 10を取埗したした。これは次のようになりたす。



remのベヌス倀ずvwおよび/たたはpx远加倀を䜿甚しお、最終的にfont-sizeの本栌的な䜜業ゲヌトりェむを䜜成できたす。 ナヌザヌがデフォルトのフォントサむズを倉曎しおも、システムはそれに合わせお調敎し、砎損したせん。



マれンタラむンフォントサむズが増加する床合い。
青い線font-sizeはデフォルトで16ピクセルです。
赀い線font-sizeのデフォルトは24ピクセルです。

もちろん、これはナヌザヌが芁求したものずたったく同じではありたせん。ナヌザヌはフォントを50増やしたいず思っおいたした。小さな衚瀺領域では50、倧きな衚瀺領域では25増やしたした。 しかし、これは良い劥協案です。

行の高さのゲヌトりェむを䜜成する


この堎合、「シナリオでは、行の高さが140で衚瀺領域が320ピクセル、180が960である段萜」が必芁になりたす。

基準倀に加えお動的に倉化するピクセル単䜍の倀を䜿甚しお䜜業するため、係数1.4および1.8のピクセル数を知る必芁がありたす。 ぀たり、段萜のfont-sizeを蚈算する必芁がありたす。 基本フォントサむズが16ピクセルだずしたしょう。 取埗するもの


基本倀ずしお、 140% = 22.4pxたす。 党䜓的なフォントの増加は6.4ピクセルです。 次の線圢匏を䜿甚したす。

 x1 = 320 x2 = 960 y′1 = 0 y′2 = 6.4 m = (y′2 - y′1) / (x2 - x1) m = (6.4 - 0) / (960 - 320) m = 6.4 / 640 m = 0.01 b′ = y′ - mx b′ = y′1 - 0.01 × x1 b′ = 0 - 0.01 × 320 b′ = 3.2 y′ = 0.01x - 3.2 

CSSに倉換

 line-height: calc( 140% + 1vw - 3.2px ); 

泚 基本倀は、140たたは1.4emずしお衚珟する必芁がありたす。 無次元1.4はcalc()内では機胜したせん。

次に、メディアク゚リを远加し、 すべおの line-height広告が同じベヌス倀 140% を䜿甚しおいるこずを確認したす 。

 p { line-height: 140%; } @media (min-width: 320px) { p { line-height: calc( 140% + 1vw - 3.2px ); } } @media (min-width: 960px) { p { line-height: calc( 140% + 6.4px ); } } 

思い出しおください。広い衚瀺領域では、 180%だけを䜿甚するこずはできたせん。基本倀に远加されるピクセルで衚される郚分が必芁です。 180%を取埗するず、基本的なフォントサむズは16ピクセルになり、ナヌザヌが倉曎するたですべおが正垞になりたす。

さたざたな基本的なフォントサむズの倀に぀いお、コヌドの動䜜をプロットしお確認したす。



青い線font-sizeはデフォルトで16ピクセルです。
赀い線font-sizeのデフォルトは24ピクセルです。

line-height匏は独自のフォントサむズに䟝存しおいるため、フォントサむズを倉曎するず匏が倉曎されたす。 たずえば、 このデモでは、次のように定矩された拡倧テキストを含む段萜を瀺しおいたす。

 .big { font-size: 166%; } 

これにより、ブレヌクポむントが倉曎されたす。


蚈算を実行し、曎新された匏y′ = 0.0166x - 5.312たす。 次に、CSSでこれず以前のスタむルを組み合わせたす。

 p { line-height: 140%; } .big { font-size: 166%; } @media (min-width: 320px) { p { line-height: calc( 140% + 1vw - 3.2px ); } .big { line-height: calc( 140% + 1.66vw - 5.312px ); } } @media (min-width: 960px) { p { line-height: calc( 140% + 6.4px ); } .big { line-height: calc( 140% + 10.624px ); } } 

CSSに蚈算を割り圓おるこずもできたす。 暙準の段萜ず同じコントロヌルポむントず盞察的な行の高さを䜿甚するため、1.66の係数を远加するだけで枈みたす。

 p { line-height: 140%; } .big { font-size: 166%; } @media (min-width: 320px) { p { line-height: calc( 140% + 1vw - 3.2px ); } .big { line-height: calc( 140% + (1vw - 3.2px) * 1.66 ); } } @media (min-width: 960px) { p { line-height: calc( 140% + 6.4px ); } .big { line-height: calc( 140% + 6.4px * 1.66 ); } } 

フォントサむズずラむンハむトのゲヌトりェむを組み合わせる


それでは、すべおをたずめたしょう。 シナリオH1ずいく぀かの段萜を含むアダプティブテキスト列流䜓列がありたす。 次の倀を䜿甚しお、font-sizeずline-heightを倉曎する必芁がありたす。

芁玠ずプロパティ320pxの倀960pxでの倀
H1フォントサむズ24ピクセル40 ppi
H1線の高さ133.33120
フォントサむズ15 ppi18 ppi
Pラむンの高さ150166.67

行の高さで2぀のこずを行うこずがわかりたす。 䞀般的なルヌルがありたすテキストが増加するずき、行の高さは枛少しなければならず、列が広くなるずき-増加したす。 しかし、このシナリオでは、䞡方の状況が同時に矛盟しおいたす したがっお、優先順䜍を遞択する必芁がありたす。


次に、幅が320ピクセルず960ピクセルの衚瀺領域の2぀のコントロヌルポむントを遞択したす。 font-sizeのゲヌトりェむを曞くこずから始めたしょう。

 h1 { font-size: 1.5rem; } /* .9375rem = 15px     */ p { font-size: .9375rem; } @media (min-width: 320px) { h1 { font-size: calc( 1.5rem + 2.5vw - 8px ); } /* .46875vw - 1.5px   0  3px */ p { font-size: calc( .9375rem + .46875vw - 1.5px ); } } @media (min-width: 960px) { h1 { font-size: calc(1.5rem + 16px); } p { font-size: calc( .9375rem + 3px ); } } 

ここでは新しいこずは䜕もありたせん。倀のみが倉曎されおいたす。

次に、 line-heightゲヌトりェむを蚈算したす。 前回よりもずっず難しいでしょう。

芁玠H1から始めたしょう。 line-height 、120の盞察ベヌス倀を䜿甚しline-height 。 芁玠のフォントサむズは倉曎可胜であるため、これらの120により、2぀のポむントによっお決定される動的な線圢倀を蚘述するこずができたす。


䞋郚のコントロヌルポむントでは、133.33のline-height倀が必芁です。これは玄32ピクセルです。

「120のベヌス倀に远加されるもの」を蚘述する線圢関数を芋぀けたす。 これらの120を削陀するず、2぀の倉曎された倀が埗られたす。


負の募配が埗られたす。

 m = (y′2 - y′1) / (x2 - x1) m = (0 - 3.2) / (960 - 320) m = -3.2 / 640 m = -0.005 b′ = y′ - mx b′ = y′1 - (-0.005 × x1) b′ = 3.2 + 0.005 × 320 b′ = 4.8 y′ = -0.005x + 4.8 

CSSに倉換

 h1 { line-height: calc( 120% - .5vw + 4.8px ); } 

チャヌトを芋おみたしょう



青い線行の高さを枛らしたす。
赀い線line-heightの基本倀ヘッダヌのfont-sizeの120。
マれンタラむン最終的なラむンの高さ。

グラフは、結果の行の高さマれンタの線が120の基本倀ず行の高さの枛少青い線に等しいこずを瀺しおいたす。 GraphSketch.comで蚈算を自分で確認できたす 。

段萜の堎合、 150%基本倀を䜿甚したす。 行の高さを増やす

 (1.75 - 1.5) × 18 = 4.5px. 



私の蚈算機では、匏は次のようになりたす。

 y′ = 0.00703125x - 2.25 

CSSコヌド党䜓を確認するには、 font-sizeずline-heightを組み合わせたデモの゜ヌスコヌドをご芧ください。 ブラりザりィンドりのサむズを倉曎するず、匱い効果ではあるが、効果があるこずがわかりたす。

デフォルトのフォントサむズを倉曎しお、このデモをテストするこずもお勧めしたす。 ここで、行の高さの比率はわずかに異なりたすが、かなり蚱容できるこずに泚意しおください。 行の高さが基本倀よりも小さくなっおも問題はありたせん。

オヌトメヌションコンピュヌティング


このセクションの準備では、すべおの蚈算を手動で、たたはSoulver蚈算機を䜿甚しお実行したした。 しかし、それはかなり面倒であり、゚ラヌの可胜性は高いです。 人的芁因を排陀するために、自動化を導入するずよいでしょう。

最初の方法は、すべおの蚈算をCSSに転送するこずです。 これは、すべおの倀を詳现に調べたずきに、font-sizeを䜿甚した䟋で䜿甚されおいる匏の倉圢です。

 @media (min-width: 320px) and (max-width: 959px) { h1 { font-size: calc( /* y1 */ 1.5rem /* + m × x */ + ((40 - 24) / (960 - 320)) * 100vw /* - m × x1 */ - ((40 - 24) / (960 - 320)) * 320px ); } } 

しかし、それはあたりにも倚くの手玙が刀明したので、もっず簡朔に曞くこずができたす

 @media (min-width: 320px) and (max-width: 959px) { h1 { font-size: calc( 1.5rem + 16 * (100vw - 320px) / (960 - 320) ); } } 

偶然にも、この匏は蚘事「 CSSロック付きの柔軟なタむポグラフィ」でティムブラりンが䜿甚したしたが、倉数倀にはemではなくピクセルが䜿甚されおいたす。 これは、font-sizeずline-heightを組み合わせたバヌゞョンでは機胜したすが、特に負の募配の堎合、それほど明癜ではない堎合がありたす。

 @media (min-width: 320px) and (max-width: 959px) { h1 { font-size: calc( 1.5rem + 16 * (100vw - 320px) / (960 - 320) ); /*        */ line-height: calc( 120% + 3.2 * (100vw - 960px) / (320 - 960) ); } } 

2番目の方法は、SassプラグむンたたはPostCSS mixinを䜿甚しお蚈算を自動化するこずです。

emチェックポむントを持぀CSSゲヌトりェむ


新しいデモ


最初の3぀のデモを取り、コントロヌルポむントず増分のピクセル倀の代わりに、 rem基づいお倀を挿入したした。


次のセクションでは、これらのデモで特定の構文がどのように機胜するかを芋おいきたす。

emベヌスのメディアク゚リのm×100vw構文はお勧めできたせん


䞊蚘では、構文m × 100vw たずえば、 calc(base + 2.5vw)ではcalc(base + 2.5vw) を䜿甚したした。 emベヌスのメディアク゚リでは䜿甚できたせん。

メディアク゚リのコンテキストがすべおです。 単䜍emずremは、同じこず、぀たりナヌザヌ゚ヌゞェントの基本フォントサむズを指したす。 そしお、すでに䜕床か芋おきたように、通垞は16ピクセルですが、倀は異なる堎合がありたす。 なんで

  1. ブラりザたたはOSの意志により䞻にTVブラりザやリヌダヌのような特定の堎合。
  2. ナヌザヌの意志により。

したがっお、コントロヌルポむント20emおよび60em堎合、それらは実際のCSS幅に察応したす。


これらはハヌドりェア ピクセルではなくCSSピクセルであるこずに泚意しおください。この蚘事では、蚈算に圱響を䞎えないため、ハヌドりェアピクセルは考慮したせん。

䞊蚘のコヌド䟋は次のずおりです。

 font-size: calc( 3.125vw + .625rem ); 

この構文ですべおのコントロヌルポむントをemを䜿甚しお眮き換え、メディアリク゚ストで1 emが16ピクセルであるず仮定するず、次のようになりたす。

 h1 { font-size: 1.25rem; } /*    :((( */ @media (min-width: 20em) { h1 { font-size: calc( 1.25rem + 3.125vw - 10px ); } } /*  . */ @media (min-width: 60em) { h1 { font-size: calc( 1.25rem + 20px ); } } 

これは、OS、ブラりザ、およびナヌザヌがデフォルトのフォントサむズを倉曎しない堎合に機胜したす。 そうでなければ、それは悪いでしょう



青い線font-sizeはデフォルトで16ピクセルです。
赀い線font-sizeのデフォルトは24ピクセルです。

ここで䜕が起こっおいたすか ベヌスフォントサむズを倉曎するず、 emベヌスのブレヌクポむントがより高いピクセル倀にシフトされたす。 特定のポむントの唯䞀の真の倀は3.125vw - 10pxです


コントロヌルポむントが高い堎合、さらに悪いこず


emベヌスのチェックリストを䜿甚する堎合は、別の方法で行う必芁がありたす。

蚈算をやり盎したす


この手法は、Tim Brownの蚘事で実蚌されおいたす 。 これは、ほずんどの蚈算がCSSで2぀の倉数郚分を䜿甚しお行われるこずを意味したす。


次の匏を䜿甚したす。

 y = m × (x - x1) / (x2 - x1) 

なぜ圌女なのか 手順を芋おいきたしょう。 , font-size line-height :

 y = mx + b 


CSS x ( 100vw ). m b vw , , , , em , .

m b , (x1,y1) (x2,y2) .

b :

 b = y - mx b = y1 - m × x1 

:

 y = mx + b y = mx + y1 - m × x1 

b !

, font-size line-height , , . y′ :

 y = y1 + y′ y′ = y - y1 

y :

 y′ = mx + y1 - m × x1 - y1 y′ = mx + y1 - m × x1 - y1 

+ y1 - y1 !

 y′ = m × x - m × x1 y′ = m × (x - x1) 

m :

 m = (y2 - y1) / (x2 - x1) 

次に

 y′ = (y2 - y1) / (x2 - x1) × (x - x1) 

:

 y′ = max_value_increase × (x - x1) / (x2 - x1) 

CSS


CSS. « 20 40 »:

 @media (min-width: 20em) and (max-width: 60em) { h1 { /* :    ! */ font-size: calc( 1.25rem /*   */ + 20px /*       */ * (100vw - 20rem) /* x - x1 */ / (60rem - 20rem) /* x2 - x1 */ ); } } 

. , , calc() CSS , .

100vw - 20rem . .

, font-size — 16 , — 600 , 280 ( 600 - 20 × 15 ). font-size — 24 , — 600 , 120 ( 600 - 20 × 24 ).



, rem . em ? CSS- em font-size, font-size ( ) font-size ( font-size ).

CSS — , . . — rem , font-size, .

CSS :

 /*  */ html { font-size: 10px; } /*   */ :root { font-size: 16px; } /* ,      ,  20rem/1.25, 40em/1.25  . . */ :root { font-size: 125%; } 

calc


60rem - 20rem . , (x - x1) / (x2 - x1) 0 1. n .

16 600 :

 n = (x - x1) / (x2 - x1) n = (600 - 320) / (960 - 320) n = 280 / 640 n = 0.475 

, .

, calc() - CSS-. . ?

? calc((100vw - 20rem)/(60 - 20)) ?

— 16
CSS結果
20em (320px)(320px – 16px × 20) / (60 – 20)= 0px
40em (640px)(640px – 16px × 20) / (60 – 20)= 8px
60em (960px)(960px – 16px × 20) / (60 – 20)= 16px
— 24
CSS結果
20em (480px)(480px – 24px × 20) / (60 – 20)= 0px
40em (960px)(960px – 24px × 20) / (60 – 20)= 12px
60em (1440px)(1440px – 24px × 20) / (60 – 20)= 24px

, ( 20em 60em ) 0rem 1rem . !

CSS 20px . .

:

 font-size: calc( 1.25rem + 20px * n ); 

n 0 1. - calc() 0 1.

0rem — 1rem ; r .

calc() . calc(a * b) , a b .

r ( ), .

20 . 20 — 1.25rem , 1.25 :

 font-size: calc( 1.25rem + 1.25 * r ); 

動䜜するはずです。 , r :


CSS- , media-, :

 h1 { font-size: 1.25rem; } @media (min-width: 20em) { /*  (100vw - 20rem) / (60 - 20)   0-1rem,       ( 20em  60em). */ h1 { font-size: calc( 1.25rem + 1.25 * (100vw - 20rem) / (60 - 20) ); } } @media (min-width: 60em) { /*      rem.          font-size: 2.5rem,         rem,    calc. */ h1 { font-size: calc( 1.25rem + 1.25 * 1rem ); } } 

, font-size, , 50%, 50%: , . 30—60 20—40.



: font-size 16 .
: font-size 24 .

, em .

line-height c em/rem


line-height 140% 180%. 140% , , font-size .

 p { line-height: 140%; } @media (min-width: 20em) { p { line-height: calc( 140% + .4 * (100vw - 20rem) / (60 - 20) ); } } @media (min-width: 60em) { p { line-height: calc( 140% + .4 * 1rem ); } } 

line-height rem-, (100vw - 20rem) / (60 - 20) 0rem 1rem .

font-size 1rem , 40% .4rem . calc() -.

line-height . line-height H1 133,33% 120%. , font-size .

, :


120% , 3,2 0 . 16 , 3,2 = 0.2rem , .2 .

, , :

 h1 { line-height: calc( 120% + 0.2 * 1rem ); } @media (min-width: 20em) { h1 { line-height: calc( 120% + 0.2 * (100vw - 60rem) / (20 - 60) ); } } @media (min-width: 60em) { h1 { line-height: 120%; } } 

2぀のポむント

  1. .2rem , font-size 24 40 . , .
  2. , (100vw - 60rem) / (20 - 60) 60em 20em (). , 16 -640px / -40 . , , 0.2 .

おわりに


. CSS-:


— . , , font-size . em . , .

: media- em , . font-size CSS-:

 @media (min-width: 20em) and (max-width: 60em) { selector { property: calc( baseline_value + multiplier * (100vw - 20rem) / (60 - 20) ); } } 

multiplier — , rem , . : 0.75 0.75rem .

media- , font-size . . CSS-. em/rem -, :

 @media (min-width: 320px) and (max-width: 960px) { selector { property: calc( baseline_value + multiplier * (100vw - 320px) / (960 - 320) ); } } 

multiplier — , , . : 12 12px .

. , , , :

 @media (min-width: 320px) and (max-width: 960px) { selector { property: calc( baseline_value + 0.25vw - 10px; ); } } 

0.25vw -10px , , Sass PostCSS.

( mixin), .

Source: https://habr.com/ru/post/J315196/


All Articles