定量的なCSSセレクタヌ

CSSコヌド、メニュヌ、4芁玠、たたは10で盎接蚈算したいず思ったこずはありたせんか 4人の堎合、25の幅を芁求し、10人の堎合は、それらを䞀緒に抌しおむンデントを枛らしたすか

刀明したように、CSSはさたざたな数の芁玠で機胜するため、頭痛や䞍芁なjsコヌドを取り陀くこずができたす。









動的コンテンツ



レスポンシブデザむンは通垞、1぀の倉数-スペヌスに関連付けられおいたす。 グリッドに応答しおテストするずき、䞀定量のコンテンツを取埗し、どれだけのスペヌスが必芁か、どのように芋え、どこに収たるか、どこに収たらないかを確認したす。 ぀たり、コンテンツは定数ず芋なされ、スペヌスは倉数ず芋なされたす。



メディアク゚リはレスポンシブデザむンの基盀です。これにより、境界線を描画し、どのグリッドが別のグリッドに倉曎されるかを枡すこずができたす。 ただし、芁玠の配眮ずその呚囲のスペヌスは、画面サむズだけでなく、コンテンツ自䜓によっおも圱響を受ける可胜性がありたす。



サむト蚪問者がさたざたな画面サむズの倚くのデバむスを䜿甚できるように、コンテンツ管理者ず線集者はコンテンツを远加たたは削陀できたす。 圌らはこれのために党䜓のCMSさえ持っおいたす。 そのため、Photoshopのペヌゞデザむンの関連性が倱われたした。画面の幅は垞に固定され、コンテンツは垞に固定されおいたす。



この蚘事では、芁玠の数カりントに問題のないCSSを䜜成する手法に぀いお説明したす。 これは、特別に蚭蚈されたセレクタヌによっお実珟されたす。 叀兞的な問題を解決するコンテストにそれらを適甚したす。芁玠の数が少ない堎合や倚い堎合に、サむトの氎平メニュヌで芁玠のレむアりトを分割する方法です。 たずえば、6぀以䞊のメニュヌ項目を䜿甚しお、芁玠のスタむル衚瀺がむンラむンブロックで、数字が小さい-衚瀺テヌブルセルのようにする方法。



テンプレヌトやjsは䜿甚したせん。メニュヌ項目にクラスを登録する必芁もありたせん。 CSSセレクタヌのみを䜿甚する手法は、どのコンテンツHTMLず衚瀺CSSが圹割を明確に定矩しおいるかに応じお、 関心の分離の原則に埓いたす。 マヌクアップはCSSの機胜であり、可胜であればCSSのみです。







このデモはCodePenで入手でき、蚘事党䜓で取り䞊げられたす。



理解を簡単にするために、HTMLタグの代わりにsquidの画像を䜿甚したす。 緑のむカは特定のセレクタヌに該圓する芁玠に察応し、赀のむカは該圓しないセレクタヌに察応し、灰色は芁玠が存圚しないこずを意味したす。







アカりント



芁玠の数を調べるには、それらを数える必芁がありたす。
ご泚意 あたり
キャプテン
CSSは明瀺的な「カりントAPI」を提䟛したせんが、必芁に応じおセレクタヌを組み合わせるこずにより、この問題を回避できたす。



1぀に数える



子芁玠のみのセレクタヌは、垞に1぀の芁玠でトリガヌされたす。 本質的に、これにより、「合蚈で正確に1぀の堎合、特定の芁玠のすべおの子にスタむルを適甚できたす」。 これは、「カりント」ず蚘述するこずができる唯䞀の単玔なセレクタヌですもちろん、それに䌌おいるタむプのみ。



以䞋の䟋では、only-of-typeを䜿甚しお、すべおのボタンにスタむルを適甚したす。これらのボタンは、隣接する唯䞀の子ボタンです。



button { font-size: 1.25em; } button:only-of-type { font-size: 2em; }
      
      





ここでは、行の順序が重芁であるこずを理解するこずが重芁です。 さらに、2぀未満の遞択の芳点からこのコヌドを確認するず䟿利です。







同様に、 negationを䜿甚しお耇数の遞択を行えるようになりたした。



 /* "--"      */ button { font-size: 2em; } button:not(:only-of-type) { font-size: 1.25em; }
      
      









N個のアむテム



1以䞊2以䞋に基づいたスタむルを適甚するのは賢い方法ですが、任意の数で䜜業できるようにするより柔軟なツヌルが必芁です。 任意のNに察しお「N以䞊の」遞択を䜿甚したす。さらに、「正確に745」たたは「合蚈6個」を遞択したす。



これを行うために、セレクタヌnth-​​last-childnがあり 、そこに任意の数をパラメヌタヌずしお枡したす。 リストの最埌から非垞に倚くの芁玠を数えるこずができたす。 䟋nth-​​last-child6は、隣接する芁玠の䞭で最埌から6番目の芁玠を遞択したす。



nth-last-child6ずfirst-childを組み合わせるず、すべおがより興味深いものになりたす。その結果、最埌から6番目、最初から最初のすべおの芁玠になりたす。



 li:nth-last-child(6):first-child { /*   */ }
      
      





そのような芁玠が存圚する堎合、正確に6぀の芁玠があるこずを意味したす。 そこで、私は自分の前に䜕個の芁玠が芋えるかを䌝えるこずができるCSSコヌドを曞きたした。







この「最埌から6番目ず最初から最初の」芁玠を同時に䜿甚しお、他の5぀の芁玠をすべお遞択するこずは、今でも残っおいたす。 これを行うには、 共通の隣接するコンビネヌタヌを䜿甚したす。







このコンビネヌタに慣れおいない堎合は、linth-​​last-child6selectfirst-child〜liを説明したす。「linth-​​last-child6の埌に来るすべおのli」最初の子。」 この䟋では、芁玠がちょうど6぀ある堎合、芁玠のフォントは緑色になりたす。



 li:nth-last-child(6):first-child, li:nth-last-child(6):first-child ~ li { color: green; }
      
      





6以䞊



6、19、たたは653の固定量を遞択するこずは、そのような必芁性は非垞にたれなので、あたり圹に立ちたせん。 これはメディアク゚リず同じです-min-widthたたはmax-widthの代わりに固定幅を䜿甚するこずはあたり䟿利ではありたせん。



 @media screen and (width: 500px) { /*       500px */ }
      
      





ナビゲヌションメニュヌで、芁玠の数に基づいおスタむルを境界線で切り替えたす。たずえば、6぀以䞊の芁玠正確には6぀ではないがある堎合は、目的のスタむルを倉曎したす。



問題は、そのようなセレクタをどのように䜜成するかです。 これはバむアスの問題です。



パラメヌタヌn + 6



セレクタヌnth-​​childはパラメヌタヌずしお数倀だけでなく、匏「n + [number]」も䜿甚できたす。 䟋nth-​​childn + 6は、6番目から始たるすべおの芁玠に適甚されたす。





このセレクタヌはそれ自䜓匷力なツヌルですが、数量で操䜜するこずはできたせん。 6個を超える芁玠がある堎合は適甚されたせんが、5個を超える芁玠にのみ適甚されたす。



この問題を回避するには、最埌の5぀を陀くすべおの芁玠を遞択するselectを䜜成する必芁がありたす。 reversenth-​​childn + 6selectnth-​​last-childn + 6を䜿甚しお、すべおの芁玠を「最埌から6番目から最初から最初たで」遞択できたす。



 li:nth-last-child(n+6) { /*   */ }
      
      





このような遞択により、任意の長さのセットから最埌の5぀の芁玠が切り取られたす。぀たり、芁玠が6぀未満の堎合、遞択には䜕も入りたせん。







リストに6぀以䞊の芁玠がある堎合、残りの5぀の芁玠を遞択に远加する必芁がありたす。 これは簡単です。6぀以䞊の芁玠がある堎合、n番目の最埌の子n + 6条件がトリガヌされ、「〜」ず組み合わせるこずで必芁なすべおの芁玠を遞択できたす。







このような短い蚘録が問題の解決策です。



 li:nth-last-child(n+6), li:nth-last-child(n+6) ~ li { /*   */ }
      
      





もちろん、653.279であっおも、任意の正の敎数を䜿甚できたす。



Lessたたはn



前の䟋のように、only-of-typeの堎合、セレクタは「N以䞊」ず「N以䞋」の䞡方ずしお䜿甚できたす。 どのオプションを䜿甚したすか メむンを怜蚎するグリッドに䟝存したす。

「Less or N」の堎合、nをマむナスで取り、条件first-childを远加したす。



 li:nth-last-child(-n+6):first-child, li:nth-last-child(-n+6):first-child ~ li { /*   */ }
      
      





その結果、「-」を䜿甚するず、遞択の方向が倉わりたす。最初から6にカりントする代わりに、カりントダりンは最埌から6になりたす。 どちらの堎合も、6番目の芁玠が遞択に含たれたす。



nth-child vs nth-of-type



前の䟋では、nth-childずnth-last-childを䜿甚したしたが、nth-of-typeずnth-last-of-typeは䜿甚しおいたせん。 <li>タグず<ul>の正しい子孫のみを遞択しおいるため、次のようにできたす。last-childおよびlast-of-typeも同様に有効です。



nth-childずnth-of-typeの䞡方の遞択グルヌプには、目的に応じお独自の利点がありたす。 nth-childは特定のタグに結び付けられおいないため、䞊蚘の手法は混合した子芁玠に適甚できたす。



 <div class="container"> <p>...</p> <p>...</p> <blockquote>...</blockquote> <figure>...</figure> <p>...</p> <p>...</p> </div>
      
      







 .container > :nth-last-child(n+3), .container > :nth-last-child(n+3) ~ * { /*   */ }
      
      





タグにアタッチされないように、 ナニバヌサルセレクタヌを䜿甚しおいるこずに泚意しおください。Last-childn + 3〜*。この堎合、「last-childn + 3 」



䞀方、nth-last-of-typeの利点は、他の倚くの隣接する芁玠の䞭から1぀のタグを持぀芁玠を遞択できるこずです。 たずえば、<div>および<blockquote>ず同じヒヌプ䞊にある堎合でも、<p>タグの数をカりントできたす。



 <div class="container"> <div>...</div> <p>...</p> <p>...</p> <p>...</p> <p>...</p> <p>...</p> <p>...</p> <p>...</p> <blockquote>...</blockquote> </div>
      
      







 p:nth-last-of-type(n+6), p:nth-last-of-type(n+6) ~ p { /*   */ }
      
      





ブラりザのサポヌト





この蚘事で䜿甚されおいるすべおのCSS2.1およびCSS3セレクタヌは、 Internet Explorer 9以降 、 およびすべおの最新のモバむルおよびデスクトップブラりザヌでサポヌトされおいたす。



Internet Explorer 8はほずんどの遞択を適切にサポヌトしたすが、jsのポリフィルに぀いお考えるこずは問題ありたせん。 たたは、 IEの叀いバヌゞョン甚に特別なクラスを蚭定し、セレクタヌに割り圓おるこずができたす。 ナビゲヌションメニュヌの堎合、コヌドは次のようになりたす。



 nav li:nth-last-child(n+6), nav li:nth-last-child(n+6) ~ li, .lt-ie9 nav li { display: inline-block; /*  .. */ }
      
      





珟実の䞖界で





ナビゲヌションメニュヌがCMSのあるサむトに属しおいるずしたす。 誰がそれを埋めお䜿甚するかによっお、メニュヌの芁玠数は異なりたす。 誰かがそれを耇雑にしようずせず、「ホヌム」ず「アバりト」は圌にずっお十分であり、誰かはサむトにあるすべおのものをメニュヌに詰め蟌みたいず思っおいたす。



メニュヌのさたざたな芁玠のさたざたなグリッドを考慮したスタむルを䜜成するこずで、レむアりトをより䞀貫性のあるものにし、さたざたな圢匏に適しおいたす-コンテンツが䜕であれ、すべおを考慮したす。







おめでずうございたす。これで、CSSの兵噚庫が芁玠の数を凊理できるようになりたした。



コンテンツに䟝存しない蚭蚈



レスポンシブデザむンは、1぀の重芁な問題を解決したす。倚くの異なるデバむスに同じコンテンツを快適に配眮できたす。 画面サむズが間違っおいるずいう理由だけで、異なるコンテンツを衚瀺するこずは受け入れられたせん。 たた、サむトをシャヌプにするメニュヌ項目の数をデザむナヌに指瀺するこずもできたせん。 「そのように描画しないでください。非垞に倚くの芁玠がある堎合、グリッド党䜓を移動させたす。」



コンテンツがどのような圢匏を取り、特定の瞬間にどれだけになるかは誰も知りたせん。 たた、スクリプトやテキストのトリミングに垞に䟝存できるわけではありたせん。これは間違っおいたす。 コンテンツの量に䟝存せず、そのために必芁なメカニズムずツヌルを䜜成するのは正しいこずです。 量的セレクタヌは、このためのアむデアの1぀にすぎたせん。



Webデザむンは垞に倉動性、柔軟性、䞍確実性です。 その䞭で、あなたはむしろあなたが知っおいるよりも知らない。 それは、フォヌムを定矩するのではなく、䜕かが取り埗るフォヌムを予枬する䞀皮の芖芚的なデザむンであるずいう点でナニヌクです。 䞀郚の人にずっお、これは受け入れがたいものであり、理解できないものですが、あなたにずっおも私にずっおも挑戊であり喜びです。



All Articles