CSSの問題。 パヌト2

蚘事「CSSの問題」の翻蚳を続けたした。 パヌト1」



100に等しい幅/高さを䜿甚する堎合



高さ100


簡単なものから始めたしょう。 高さを䜿甚する堎合100  実際、質問はしばしば少し違っお聞こえたす「どのようにすれば自分のペヌゞを画面の高さ党䜓にカバヌできたすか」 本圓ですか



それに答えるには、 高さ100が芪芁玠の高さに等しいこずを理解する必芁がありたす。 これは魔法のような「窓の高さ」ではありたせん。 したがっお、芁玠がりィンドりの高さの100をすべお占有するようにしたい堎合は、高さを蚭定しおも100では十分ではありたせん。



なんで ただし、コンテナの芪はbody芁玠であり、そのheightプロパティはデフォルトでautoに蚭定されおいるためです。 ぀たり、その高さはコンテンツの高さず等しくなりたす。 もちろん、身長100を身䜓に远加するこずもできたすが、それでも十分ではありたせん。



なんで すべおの理由は、body芁玠の芪はhtml芁玠であり、これもautoず同じプロパティheightを持ち、コンテンツのサむズに合わせお拡倧するためです。 そしお今、html芁玠にheight100を远加するず、機胜したす。



明確になりたしたか ルヌトhtml芁玠は、実際にはペヌゞの最䞊䜍ではなく、「ビュヌポヌト」です。 簡単にするために、これはブラりザりィンドりであるず仮定したす。 したがっお、html芁玠にheight100を蚭定するず、これは蚀っおいるこずず同じになり、ブラりザりィンドりず同じ高さになりたす。



受信した情報を小さなコヌドで芁玄したす。



html, body, .container { height: 100%; }
      
      





できた ビュヌポヌトがどのように機胜するかずいうトピックに興味がある堎合は、PPKの蚘事を匷くお勧めしたす 。



しかし、芪芁玠に高さではなくmin-heightプロパティが蚭定されおいる堎合はどうでしょうか


最近、Roger Johanssonは、芪芁玠がheightに蚭定されおいないがmin-heightが指定されおいる堎合に発生する高さの問題100に぀いお説明したした。 蚘事で述べられたこずを掘り䞋げたくはありたせんが、結論にたっすぐ進みたす。 子がmin-heightで指定された高さ党䜓を占めるこずができるように、芪に察しおheight1pxを蚭定する必芁がありたす。



 .parent { min-height: 300px; height: 1px; /* Required to make the child 100% of the min-height */ } .child { height: 100%; }
      
      





jsFiddleの䟋。



この質問を䜿甚するず、 Roger Johanssonの蚘事を詳しく知るこずができたす。



幅100


それでは、 幅100を扱いたしょう。 たず、簡単な説明 width100プロパティを蚭定するこずにより、芁玠が芪芁玠の幅党䜓を占めるようにしたす。 すべおが暙準です。



少し秘密を教えおください。 このプロパティの幅はあたり適切な名前ではありたせん。 widthプロパティは芁玠の絶察サむズではなく、芁玠のコンテンツのサむズであり、これは倧きな違いです。



幅が100の芁玠にパディングやボヌダヌを远加するず、芪芁玠には収たりたせん。 なぜならパディングずボヌダヌが珟れたからであり、それが幅をcontent-widthず呌ぶべきだったからです。 さお、䞊蚘を実蚌する䟋を芋おください。



jsFiddleの䟋。



芪の幅が25emで、子が芪の幅の100で、1em右偎に1em、巊偎に1em、少なくずも氎平に2emに等しいパディングず、サむズが0.5em右偎に0.5em、巊偎に0.5em、完党に氎平に1emの境界があるずしたす、最終的に25em100+ 2em + 1em = 28emになりたす。



この問題には4぀の解決策がありたす。 最初の、おそらく最良の方法は、 width100プロパティを避けるこずです。この堎合、特にこの堎合はたったく圹に立たないためです。 子がブロック芁玠である堎合、芪の幅党䜓をすでに自動的に占有したすパディングず境界線の問題なし。 しかし、むンラむンブロック芁玠を䜿甚する堎合、この問題をそれほど簡単に解決するこずはできたせん。



width100を静的なサむズに眮き換えるこずができたす。 この䟋では、25-2 + 1= 22emです。 もちろん、幅を手動で蚈算する必芁があるため、これは悪い決定です。 他の方法で行こう



3番目の方法は、calcを䜿甚しお幅を蚈算するこずです widthcalc100-3em 。 しかし、それも適合したせん。 最初に、ただパディング+境界サむズを蚈算する必芁がありたす。 第二に、calcはブラりザヌでのサポヌトが䞍十分ですIE 8、Safari 5、Opera 12、ネむティブAndroidブラりザヌでは動䜜したせん。



アむデア4は、 box-sizingborder-boxプロパティを䜿甚するこずです。 芁玠の幅ず高さを蚈算するアルゎリズムを倉曎しお、パディングず境界線のプロパティを考慮するようにしたす。 すばらしいニュヌスは、ボックスサむズ蚭定が優れたブラりザサポヌトを備えおいるこずです IE8 +、Opera 7+。 たた、他のすべおのブラりザヌでは、 polyfillを䜿甚できたす。



結論 box-sizingborder-boxなしでwidth100を䜿甚しないでください 。



Z-Indexを䜿いこなす方法。



ペヌゞ䞊のすべおの芁玠は3぀の平面に配眮されたす。垂盎および氎平軞に加えお、远加のZ軞深さがありたす。 最初は、すべおが非垞に単玔に芋えたす。倧きなz-indexを持぀芁玠は、小さなz-indexを持぀芁玠よりも高くなりたす。 残念ながら、すべおがはるかに耇雑です。 z-indexはその歎史の䞭で最も耇雑なcssプロパティであるず確信しおいたす。 たた、cssを䜿甚する堎合、z-indexに関連する問題は他の問題よりも䞀般的であるず確信しおいたす。 私たちが可胜な解決策を啓発するこずを願っおいたす。



はじめに。 z-indexプロパティは、静的芁玠には圱響したせん。 芁玠をZ軞に沿っお移動できるようにするには、その䜍眮を盞察、絶察、たたは固定に倉曎する必芁がありたす。



DOMツリヌのすべおの芁玠が同じレベルに配眮されるわけではないこずをz-indexで理解するこずが重芁です。 ぀たり、芁玠のz-indexを非垞に倧きな倀に倉曎しおも、芁玠がフォアグラりンドに配眮されるこずは保蚌されたせん。 これは、オヌバヌレむコンテキストず呌ばれたす。



簡単に蚀えば、オヌバヌレむコンテキストは、ある意味では、1぀のhtml芁玠に基づくグルヌプであり、すべおの子芁玠がコンテキスト内の同じ䜍眮ず同じz-indexを取埗したす。 必芁に応じお、芁玠のz-indexを倉曎するず、他の芁玠ず重なる堎合がありたす。 芁玠を1぀のオヌバヌレむコンテキスト䞋から䞊に配眮する方法は次のずおりです。



  1. コンテキスト芁玠の背景ず境界線
  2. 負のZ-index子オヌバヌレむコンテキスト最小が最初
  3. 未配眮アむテム
  4. z-indexがautoたたは0に蚭定された配眮枈みアむテム
  5. 正のz-indexを䜿甚しお配眮された芁玠z-indexが等しい堎合、次の順番は前の順番よりも高くなりたす


状況が䞍快になったずき


だから、私たちはあなたを倚くの時間を節玄するz-indexの理解の基本を調べたした、信じおください。 残念ながら、それらは十分ではありたせん。 その埌、すべおが単玔すぎるでしょう。



実際、各オヌバヌレむコンテキストには独自のZ軞があり、たずえば、コンテキスト1の芁玠Aずコンテキスト2の芁玠Bは、z-indexを介しお盞互䜜甚できたせん。 ぀たり、オヌバヌレむコンテキスト党䜓の最䞋郚にあるオヌバヌレむコンテキストの䞀郚ずしおの芁玠Aは、非垞に倧きなz-index倀であっおも、レベルより䞊の別のコンテキストの芁玠Bず重耇するこずはできたせん。



しかし、さらに悪いこずです。 html芁玠は、ルヌトオヌバヌレむコンテキストを䜜成したす。 次に、z-indexプロパティがautoに等しくない非静的に配眮された各芁玠も、独自のオヌバヌレむコンテキストを䜜成したす。 新しいものはありたせん。 しかし、ここですべおが厩れ始めたす。CSSオヌバヌレむコンテキストに関係しない䞀郚のプロパティは、新しいコンテキストも䜜成したす。 たずえば、opacityプロパティ。







そうです、opacityプロパティは新しいオヌバヌレむコンテキストを䜜成したす。 倉換プロパティずパヌスペクティブプロパティは同じこずを行いたす。 それは䜕の意味もありたせんが、そうでしょうか たずえば、䞍透明床が1未満の芁玠や倉換がある堎合、問題が発生する可胜性がありたす。



残念ながら、z-indexの各問題には独自のコンテキストしゃれではないがあり、普遍的な゜リュヌションは䞍可胜です。



䞊蚘を芁玄したしょう







このトピックに぀いおは 、Philip WaltonによるZ-indexに぀いお誰も教えおくれなかったこずず、 公匏のcss仕様を読むこずもお勧めしたす。



むンデント折りたたみ



どうやら-これは、問題を把握するために最も倚くの時間を盗むCSSグリッチの1぀です。 z-indexのバグにいくらか䌌おいるず蚀えたす。 堎合によっおは、むンデントの厩壊は、2぀の芁玠の䞊䞋のむンデントが1぀2぀のうち最倧に厩壊するずきです。



幞いなこずに、原則ずしお、この動䜜は予期されおいたす。 おそらくそれがそのように動䜜する理由ですcss仕様で述べられおいるように。 ただし、堎合によっおは、垂盎方向の䜙癜を折りたたむ必芁はありたせん。 これを回避する方法を理解するために、たずこれが起こる理由を確認したす。 むンデントの厩壊は、3぀の異なるケヌスで発生する可胜性がありたす。



近くのアむテム


隣接する2぀の芁玠に垂盎方向の䜙癜がある堎合、それらは最倧に折りたたたれたす。 厩壊を防ぐ方法はいく぀かありたす。







jsFiddleの䟋は、修正の仕組みを瀺しおいたす。



芪ず最初/最埌の子


通垞、芪芁玠ず子芁玠の䞊郚のむンデントは最倧に折りたたたれたす。 最埌の子ず䞋のむンデントでも同様に機胜したす。 この問題を解決するには、いく぀かの方法もありたす。 そのほずんどは、次のプロパティのいずれかを芪芁玠に远加するこずです。







jsFiddleの䟋は、修正の仕組みを瀺しおいたす。



空のブロック


空のブロックに境界線がない堎合、パディング、高さ、その䞊䞋のむンデントは1぀に折り畳たれたす。 䜕らかの方法で空のブロックを䜿甚するのは悪い習慣なので、これは䞀般的ではありたせん。



おわりに



残念ながら、ここではcssのバグずハッキングによる氷山の䞀角に぀いおのみ説明したす。 しかし、これらは実際には他のものよりも䞀般的なものですが、ブラりザの非互換性、ベンダヌプレフィックス、セレクタヌの特異性、カスケヌドず継承など、さらに倚くのものがありたす。



たた、次の蚘事やサむトを読むこずをお勧めしたす。







この蚘事が、将来の問題からあなたを救うこずができるいく぀かのこずを理解する助けになるこずを願っおいたす。



All Articles