REM察EM-倧論争



どのナニットをレむアりトに䜿甚するかに぀いおの氞遠の議論に぀いお、 em sたたはremのかなり倧きくおボリュヌムのある蚘事の翻蚳を玹介したす。 その堎合、䞀郚のナニットを䜿甚する䟡倀があり、他のナニットを䜿甚する䟡倀がありたす。 倚くのコヌド、䟋、およびそれらの説明がありたす。

タむポグラフィず盞察単䜍の䞖界ぞようこそ=

************

Web䞊で最も効果的なタむポグラフィ技術の1぀は、盞察的な枬定単䜍remおよびemの䜿甚です。

質問は䜕を䜿甚するのですか 長い間、「圌らの」ナニットを䜿甚する必芁があるこずを蚌明しようずしおいるrem'ovずem'ovの支持者の間の議論。

この蚘事では、remずemを比范する自由を取りたす。 remずは䜕か、emずは䜕か、それらを䜿甚しおモゞュラヌコンポヌネントを構築する方法を孊びたす。

EMずは䜕ですか


りィキペディアは次のように語っおいたす。
em-タむポグラフィでは、珟圚のフォントのサむズに等しい長さの盞察的な単䜍


ポむントサむズを䜿甚しないため、このステヌトメントはWebでは意味がありたせん。 しかし、ポむントサむズをフォントサむズfont-sizeで眮き換えるず意味がありたす。

これは、次のこずを意味したす。cssセレクタヌにfont-sizeルヌルがある堎合、1em = 20px。
h1 { font-size: 20px } /* 1em = 20px */ p { font-size: 16px } /* 1em = 16px */ 


emナニットを䜿甚しお、フォントサむズを指定できたす。 実際、font-sizeにemのような盞察倀を䜿甚するこずをお勧めしたす。

 h1 { font-size: 2em } /*    ?! */ 


h1の実際のフォントサむズは

このh1のフォントサむズを蚈算するには、芪芁玠を確認する必芁がありたす。 芪がhtmlであり、そのfont-sizeが16pxに蚭定されおいるずしたしょう。

これに続いお、h1の蚈算倀は32px、぀たり2 * 16pxであるこずがわかりたす。

 html { font-size: 16px } h1 { font-size: 2em } /* 16px * 2 = 32px */ 


実際、htmlのフォントサむズをピクセルpxで蚭定するのは悪い考えです。これにより、ナヌザヌのブラりザ蚭定が䞊曞きされたす。

代わりに、フォントサむズの倀ずしおパヌセンテヌゞを遞択するこずも、HTMLでパヌセンテヌゞを蚭定しないこずもできたす。

泚ご自身で指定しなかった堎合、font-sizeは100に蚭定されたす。

 html { font-size: 100% } /*  ,       16px*/ 


ほずんどのナヌザヌおよびブラりザヌの堎合、ブラりザヌ蚭定で倉曎するたで、100のフォントサむズはデフォルトで16pxになりたす。 めったに誰もこれをしたせんが。

さお、次は䜕ですか emに戻る。

Emは 、font-sizeに加えお、 他のプロパティの倀を蚭定するためにも䜿甚されたす 。 マヌゞンずパディングは、emで枬定される2぀のプロパティです。

これは、ほずんどの人がem倀ず混同される堎所です。

次のコヌドを怜蚎しおください。 h1ずpの䞡方の芁玠のmargin-bottom倀はどうなりたすか html芁玠のfont-sizeが100に蚭定されおいるず仮定したす

 h1 { font-size: 2em; /* 1em = 16px */ margin-bottom: 1em; /* 1em = 32px */ } p { font-size: 1em; /* 1em = 16px */ margin-bottom: 1em; /* 1em = 16px */ } 


1emに蚭定されたmargin-bottom倀が䞡方の堎合で異なるこずに驚いおいたすか

この珟象は、1emが芁玠のフォントサむズに等しいずいう事実によっお説明されたす。 h1芁玠のfont-sizeは2emに蚭定されおいるため、このh1のその他のプロパティ同じmargin-bottomは、新しいfont-size倀から既に開始されたす。 ぀たり、それらの堎合、1emは32pxに等しくなりたす。

1emはコヌドのさたざたな郚分でさたざたな意味を持぀こずができるずいう事実に、人々は混乱しおいたす。 emの扱いを始めたばかりの堎合、これは特に混乱を招く可胜性がありたす。

これらはemです。 さお、さらに先に進みたしょう。 私たちの前はレムを埅っおいたす。

REMずは䜕ですか


RemはルヌトemルヌトEmです。 倚くの堎合に遭遇する蚈算䞊の問題を緩和するように蚭蚈されおいたす。
これは、ルヌトベヌスfont-size倀に等しい掻版印刷単䜍です。 これは、1remが垞にhtmlで定矩されたfont-size倀に等しいこずを意味したす。

䞊蚘ず同じコヌドを考えおみたしょうが、すでにレムを䜿甚したす。 マヌゞン底倀は珟圚どのように倉化したすか

 h1 { font-size: 2rem; margin-bottom: 1rem; /* 1rem = 16px */ } p { font-size: 1rem; margin-bottom: 1rem; /* 1rem = 16px */ } 


ご芧のずおり、1remは垞に16pxに等しい倀を取り、どこに適甚しおもかたいたせんhtml芁玠のfont-sizeを倉曎するたで
䟝存関係がありたす。 これは簡単に理解できたす。

これがレムです。 それらがどのように機胜するかを理解するこずはそれほど難しくありたせん。

それでは、蚘事の最もおいしい郚分に取り掛かりたしょう。 だからレムたたぱム

REMかEMか


これは非垞に物議を醞す問題です。

䞀郚の開発者は、これらのナニットを䜿甚するずコンポヌネントのモゞュヌル性が䜎䞋するず䞻匵しお、remの䜿甚を完党に避けたした。 他の開発者はすべおにそれらを䜿甚し、提䟛するシンプルさを奜みたす。

奇劙なこずに、私はただ開発のさたざたな段階で私の仕事にem'yずrem'yを䜿甚するずいうtrapに陥りたした。 emがモゞュラヌコンポヌネントの䜜成にどのように圹立ったかに満足したしたが、それらがコヌドに導入したすべおの困難に耐えるこずができたせんでした。 たた、すべおの蚈算がレムの助けを借りおはるかに簡単になったこずも気に入りたしたが、コンポヌネントをモゞュヌル化するために曞かなければならないハックに激怒したした。

emずremには長所ず短所の䞡方があるこずがわかりたす。 たた、状況に応じおさたざたな方法で䜿甚する必芁がありたす。

どうやっお 私には2぀の簡単なルヌルがありたす 

  1. プロパティがfont-sizeに比䟋しおスケヌリングする堎合は、emに倀を蚭定したす。
  2. その他の堎合はすべお、倀をremに蚭定したす。


少し楜になりたしたか さお、emずremの䞡方を䜿甚しお単玔なコンポヌネントタむトルにするを䜜成しおみたしょう。これら2぀のルヌルが動䜜しおいるのがわかりたす。

title芁玠の䜜成にはREMのみを䜿甚したす。


次のようなh2ヘッダヌ芁玠があるずしたす。

こんにちは 私が芋出しです

remですべおを指定する堎合、ヘッダヌスタむルは次のようになりたす。

 .header { font-size: 1rem; padding: 0.5rem 0.75rem; background: #7F7CFF; } 


すべおが蚈画通りに進んでいたす。

次に、同じペヌゞに異なるサむズの芁玠を配眮できるため、より倧きなヘッダヌを䜜成したしょう。
これを行うずき、できるだけ倚くのスタむルを継承しおみたしょう。

2番目のヘッダヌのマヌクアップは次のようになりたす。

 <a href="#" class="header header--large">!</a> 


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

 .header { font-size: 1rem; padding: 0.5rem 0.75rem; background: #7F7CFF; } .header--large { font-size: 2rem; } 


残念ながら、私たちのコヌドは良く芋えたせんでした。 .header-large芁玠の端ずタむトルテキスト自䜓の間の空きスペヌスが少なすぎたす。


倧きいヘッダヌの゚ッゞずテキストの間に十分な空きスペヌスがありたせん

レムのみを䜿甚する堎合、この問題を解決する唯䞀の方法は、.header-largeでパディングをオヌバヌラむドするこずです。

 .header { font-size: 1rem; padding: 0.5rem 0.75rem; background: #7F7CFF; } .header--large { font-size: 2rem; padding: 1rem 1.5rem; } 



さお、今では呌吞しやすくなっおいたす

䜕か気づいたこずがありたすか .header芁玠のfont-sizeは、.header芁玠のfont-sizeの2倍です。 その結果、.header-large芁玠のパディングも.header芁玠のパディングの2倍になりたす。

異なるサむズの芋出しがさらにある堎合、たたは芋出しのサむズを倉曎する必芁がある堎合はどうなりたすか remsでプロパティ倀を指定するず、重耇や超耇雑なコヌドがどのように発生するかを既に理解しおいたす。

集玄でemずremの䞡方を䜿甚するこずを恐れない堎合、.header-large芁玠のパディングを再定矩する必芁がないようにコヌドを単玔化できたす。

 .header { font-size: 1rem; padding: 0.5em 0.75em; background: #7F7CFF; } .header--large { font-size: 2rem; } 


ご芧のずおり、芁玠のフォントサむズに合わせおスケヌリングする必芁があるプロパティがある堎合、emsは非垞に䟿利です。 ここから最初のルヌルが生たれたす。

次に、ヘッダヌでemのみを䜿甚するずどうなるかを芋おみたしょう。

EMのみを䜿甚しおタむトル芁玠を䜜成したす。


emsにヘッダヌを実装するためのコヌドは、すでに䌚ったレムのコヌドずあたり倉わりたせん。 レムをemsに眮き換えるだけです。

 .header { font-size: 1em; padding: 0.5em 0.75em; background: #7F7CFF; } .header--large { font-size: 2em; } 


.headerず.header-largeの䞡方は、remでのdoubleずたったく同じように芋えたす。

䜕が必芁ですか

いや

サむトにtitle芁玠が1぀だけ含たれ、それ以倖の芁玠が含たれるこずはほずんどありたせん。 他の芁玠ずどのように盞互䜜甚するかを考慮する必芁がありたす。

通垞、これらの芁玠は、次のようにヘッダヌの前埌に配眮されたす。


ヘッダヌは他の芁玠ずは異なる関係にありたす。

このブロックのマヌクアップは次のようになりたす。

 <div class="header header--large"></div> <p>  </p> <p>  </p> <div class="header"></div> <p>  </p> 


たた、段萜にmargin-rightずmargin-leftを远加したす。

 p { margin-left: 0.75em; margin-right: 0.75em; } 



゚ラヌ、最初の芋出しのパディングが段萜テキストに揃えられおいたせん

いや :(

.header芁玠の巊右のパディング-倧きすぎたす

emsのみを䜿甚する堎合、この問題を解決する唯䞀の方法は、.header-largeのpadding-leftプロパティずpadding-rightプロパティを再定矩するこずです。

 .header { font-size: 1em; padding: 0.5em 0.75em; /*   */ } .header--large { font-size: 2em; padding-left: 0.375em; padding-right: 0.375em; margin: 0.75em 0; } 



今、すべおが正しく芋えたす

䜕か気づいたこずがありたすか .header芁玠のfont-sizeは、.header芁玠のfont-sizeの2倍です。 ただし、.header芁玠のpadding-leftずpadding-rightは、.header芁玠のpadding-leftずpadding-rightの半分のサむズです

前のケヌスのように、emずremを䞀緒に䜿甚するこずに同意すれば、コヌドを単玔化できたす。 特に、padding-leftずpadding-rightにはremsを䜿甚し、padding-topずpadding-bottomにはemsを䜿甚したす。

 .header { padding: 0.5em 0.75rem; font-size: 1em; background: #7F7CFF; } .header--large { font-size: 2em; } 


ご芧のずおり、芁玠のフォントサむズに合わせおスケヌリングする必芁があるプロパティがある堎合、emsは非垞に䟿利です。 ただし、ルヌト初期フォントサむズ倀に関連するプロパティ倀を倉曎する必芁がある堎合は、問題が発生したす。

同じコンポヌネントでremずemがどのように機胜するかがより明確になりたした、同意したすか

それでは、ノッチを䞊げお、芋出しず段萜がグリッドずどのように盞互䜜甚するかを芋おみたしょう。

グリッドコンポヌネント


続行する前に、芋出しず段萜を単䞀のコンポヌネントに結合したしょう。



 <div class="component"> <div class="component__header"></div> <p>   </p> </div> 


コンポヌネントの基本スタむルは次のずおりです。

 .component { background: white; border: 2px solid #7F7CFF; } .component__header { font-size: 2em; padding: 0.5em 1.5rem; background: #7F7CFF; margin: 0; } .component p { padding-left: 1.5rem; padding-right: 1.5rem; margin: 1.5rem 0; } 


これたでのずころ良い。 ここでは、以前に䌚ったこずがあるすべおのものを芋るこずができたす。

どうぞ このコンポヌネントは、サむトのどこにでも配眮できたす。 䟋

  1. コンテンツ郚分。
  2. サむドバヌで;
  3. グリッドのどの郚分でも;
  4. ...



コンポヌネントを配眮できる可胜性のある堎所

コンポヌネントがサむトの狭い郚分サむドバヌなどにある堎合、コンポヌネントのヘッダヌは小さくなりたす぀たり、フォントサむズが小さくなりたす。


グリッドタむトル芁玠

これを行うオプションがありたす。 コンポヌネントのクラスを倉曎できたす。 マヌクアップは次のようになりたす。

 <div class="component component--small"> <!--    --> </div> 


たあ、スタむル

 .component--small .component__header { font-size: 1em; } 


次にコンポヌネントスタむルに぀いお説明したす。 同じルヌルがここに適甚されたす

  1. プロパティがfont-sizeに比䟋しおスケヌリングする堎合は、emに倀を蚭定したす。
  2. その他の堎合はすべお、倀をremに蚭定したす。


title芁玠の堎合のように、emsでサむズを蚭定する必芁があるプロパティを決定できたす。 これは、ペヌゞの残りの郚分ず盎接察話するプロパティに察しお行う必芁がありたす。 コンポヌネントを構築する最良の方法に぀いお考えるには、2぀の方法がありたす。

  1. すべおの内郚芁玠のプロパティは、コンポヌネントのフォントサむズに合わせおスケヌリングされたす。
  2. 䞀郚の内郚芁玠のプロパティのみが、コンポヌネントのfont-size倀ずずもにスケヌリングされたす。


䞡方のケヌスを芋お、それぞれのパスを芋おみたしょう。そうすれば、私が䜕を念頭に眮いおいたのか理解できたす。

最初の方法。 すべおの内郚芁玠のプロパティは、コンポヌネントのフォントサむズに合わせおスケヌリングされたす


そのようなコンポヌネントがどのように芋えるかを芋るために、䟋から始めたしょう



コンポヌネント内のすべおの芁玠のfont-size、margin、およびpaddingが同時に倉化するこずに泚意しおください。

サむズ倉曎時にコンポヌネントが同じように動䜜する堎合は、emsですべおのサむズを指定する必芁がありたす。 ぀たり、コヌドは次のようになりたす。

 .component { background: white; border: 2px solid #7F7CFF; } .component__header { font-size: 2em; padding: 0.5em 0.75em; /*     em */ background: #7F7CFF; margin: 0; } .component p { padding-left: 1.5em; /*     em */ padding-right: 1.5em; /*     em */ margin: 1.5em 0; /*     em */ } //   .component--small .component__header { font-size: 1em; padding-left: 1.5em; /*   padding  em' */ padding-right: 1.5em; /*   padding  em' */ } 


次に、サむズの倉曎を有効にするには、コンポヌネントのfont-sizeプロパティを倉曎する必芁がありたす。

 .component { //   @media (min-width: 800px) { font-size: 1.5em; } } 




これたでのずころ良い。

ここで䟋を少し耇雑にしたしょう。

このようなグリッドがあるず想像しおください。 すべおのデバむスの垂盎ず氎平のマヌゞンは同じたたである必芁がありたす審矎的な芳点からは、これは正しいでしょう。


グリッドタむプ1 + 2の同じむンデント

このグリッドのマヌクアップは次のずおりです。

 <div class="grid"> <div class="grid-item"> <div class="component"> <!--   --> </div> </div> <div class="grid-item"> <div class="component component--small"> <!-- A --> </div> <div class="component component--small"> <!-- B --> </div> </div> </div> 


基本font-sizeが16pxである堎合、グリッド芁玠間のギャップを2emで蚭定したす。 ぀たり、各ギャップの蚈算された幅は32pxです。

課題はこれです。小さなコンポヌネントAずBを32pxのむンデントで分離したす。 手始めに、マヌゞン䞊郚コンポヌネントBを2emに蚭定しおみおください。

 .component { /*   */ @media (min-width: 800px) { font-size: 1.25em; } } .component + .component { margin-top: 2em; } 


残念ながら、結果は幞せではありたせん。 小さなコンポヌネントAずBの間のマヌゞンは、800pxを超える可芖領域ビュヌポヌトを持぀垂盎方向のギャップの幅よりも倧きくなっおいたす。


小さなブロックAずBの間のスペヌスは、ビュヌポヌト> 800pxでの垂盎方向のギャップのスペヌスずは異なりたす

ブりりり:(

これは、衚瀺領域が800pxを超えるず、コンポヌネントのフォントサむズが1.5emたたは24pxになるためです。 その時点で、font-sizeが24pxになるず、蚈算された2em倀は48pxになりたす。これは、取埗しようずしおいた32pxずは異なりたす。

えっ ╯°□°╯┻━┻

ナニットをremに眮き換えるだけでこの問題を解決できるなんお、なんお恵たれおいるのでしょう。 結局のずころ、ギャップの幅はベヌスのフォントサむズによっお異なるこずがわかっおいたす。

 .component + .component { margin-top: 2rem; } 



垂盎むンデントが氎平になりたした

そうそう 問題は解決したした:)ここにCodepenの䟋を瀺したす。コヌドをいじっおみるこずができたす。

泚このようなグリッドを䜜成するには、Flexboxを䜿甚する必芁がありたす。 この蚘事の範囲を超えおいるため、どのように構築したかは説明したせん。 Flexboxに぀いお詳しく知りたい堎合は、 この蚘事を読むこずをお勧めしたす。

はい、ずころで、私はこのテクニックを思い぀きたせんでした。 クリス・コむダヌは1幎前にこれに぀いお曞いた 圌は倩才だ。

ずにかく、先ぞ進む準備はできたしたか はいの堎合、2番目のケヌスに進みたす。 そうでない堎合は、お気軜にコメントを残しおください。他の方法で説明しようず思いたす。

2番目の方法。 䞀郚の内郚芁玠のプロパティのみが、コンポヌネントのfont-size倀ずずもにスケヌリングされたす。


最初のケヌスは簡単に説明できたす。 ただし、デメリットは、モゞュラヌグリッド レヌンに泚意それが䜕であるか、 ここで読むこずができたす 、垂盎リズム レヌンに泚意䜕がありたすか 、 ここで読むこずができたす に埓う必芁があるこずです。すべおのコンポヌネントが同時に同じサむズであるこず特にレスポンシブサむトを䜜成する堎合。

他のすべおのサむズを倉曎せずに、コンポヌネントの小さな領域を倉曎する必芁がある堎合がありたす。

たずえば、より倧きな衚瀺領域ビュヌポヌトを持぀ヘッダヌのフォントサむズを倉曎する必芁がありたす。


衚瀺領域が倉曎されるず、ヘッダヌのサむズのみが倉曎されたす

䞊蚘で説明したスタむルを基瀎ずしお、この䟋のスタむルを説明したしょう。

 .component { background: white; border: 2px solid #7F7CFF; } .component__header { font-size: 2em; padding: 0.5em 1.5rem; background: #7F7CFF; margin: 0; } .component p { padding-left: 1.5rem; padding-right: 1.5rem; margin: 1.5rem 0; } .component--small .component__header { font-size: 1em; } 


1200pxの可芖領域の境界でヘッダヌのフォントサむズが倉曎されるずすぐに、各プロパティの枬定単䜍ずしおレムを安党に䜿甚できたすヘッダヌのpadding-topお​​よびpadding-bottomを陀く

 .component { background: white; border: 2px solid #7F7CFF; } .component__header { font-size: 2rem; /*     rem */ padding: 0.5em 1.5rem; /*     rem */ background: #7F7CFF; } .component p { padding-left: 1.5rem; /*     rem */ padding-right: 1.5rem; /*     rem */ margin: 1.5rem 0; /*     rem */ } .component--small .component__header { font-size: 1rem; /*     rem */ } 


その埌、 メディアを远加するだけで、さたざたなビュヌポヌトのヘッダヌのフォントサむズを倉曎できたす。

 .component__header { font-size: 2rem; @media (min-width: 1200px) { font-size: 3rem } } .component--small .component__header { font-size: 1rem; @media (min-width: 1200px) { font-size: 1.5rem } } 




そうそう ブラりザりィンドりのサむズを倉曎するず、タむトルのフォントサむズのみが倉曎されるこずに泚意しおください。 これは、2番目の堎合に必芁なこずです:)

もう䞀瞬


いく぀かのタむポグラフィサむズのみを䜿甚するこずをお勧めしおいるため、コンポヌネントからfont-sizeプロパティを抜象化するこずがよくありたす。 したがっお、タむポグラフィはすべおのコンポヌネントで同じたたであるず確信できたす。

 h2 { font-size: 2rem; @media (min-width: 1200px) { font-size: 3rem } } h3 { font-size: 1rem; @media (min-width: 1200px) { font-size: 1.5rem } } .component__header { @extend h2; } .component--small .component__header { @extend h3; } 


2番目の堎合はこれですべおです。 Codepenの䟋を次に瀺したす。コヌドをいろいろ詊しおみおください。

私はすでにあなたの質問を予想しおいるので、たず私はそれに答えたす どの方法を䜿うべきですか

私はそれがすべおデザむンに䟝存しおいるず蚀いたす。

個人的には、タむポグラフィを別のファむルに抜象化するこずを奜むので、私はしばしば最初ではなく2番目を䜿甚したす。

たずめるず


remたたはemの䜿甚察象 この質問は完党に正しいずは限りたせん。 remずemには䞡方ずも長所ず短所があり、䞀緒に䜿甚できたす。これにより、単玔なモゞュヌル匏コンポヌネントを䜜成できたす。

今あなたのために この論争のどちら偎を遞びたすか 以䞋のコメントで、私はあなたがこれに぀いおどう思うかを喜んで読むでしょう:)

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


All Articles