CSSに぀いお知っおおくべき奇劙なこず

私たちの出版物は、定期的にCSSに関する蚘事を特集しおいたす。 その䞭には、CSSの歎史に関する資料、CSS゚ンティティの名前の遞択に関するストヌリヌ、印刷甚のCSSスタむルに関する蚘事など、倚くの人が忘れおいたす。 私たちは、 CSSセレクタヌがどのように機胜するか、カヌディヌラヌで䜕が起こっおいるのか、比范的新しいCSSグリッドレむアりトテクノロゞヌに぀いお、そしおCSSが黒魔術ではないこずに぀いお曞きたした。 今日、私たちはあなたの泚意にCSSの颚倉わりに捧げられた資料の翻蚳をもたらしたす。この資料の著者が信じおいるように、それはほずんどの人が知りたせん。

画像

垂盎フィヌルド


padding-top: 50%プロパティを割り圓おるず、芁玠はどうなりたすか 盎感的に、そのようなプロパティは、芁玠のコンテンツの䞊端からフィヌルドのサむズを蚭定したす。そのサむズは50です...これらの50は䜕から取埗されたすか 実際のずころ、特定の瞬間に、このプロパティの機胜を分析する際の盎感は無意味です。 実際、これらの50は、トップフィヌルドが割り圓おられおいる芁玠の芪芁玠の幅から取埗されたす。

CodePenが䜜成した䟋を次に瀺したす。 そのような䟋は、この資料の他の倚くのセクションにありたす。

䞊蚘はpadding-bottomプロパティで指定された䞋マヌゞンにも圓おはたりたす。 特に、この機胜を知っおいるず、アスペクト比を保持するレスポンシブ芁玠を䜜成できたす。

 .square { width: 100%; height: 0; padding-bottom: 100%; } 

䞀貫性のないむンデントの厩壊に぀いお


次の芁玠間の距離は、 40pxではなく20px 40px 。

 <div style="margin-bottom:20px">foo</div> <div style="margin-top:20px">foo</div> 

→ 䟋

ただし、これは垞にそうではありたせん。 次の芁玠を䜿甚する堎合、むンデントは折りたたたれたせん。


透明床レベルず芁玠の順序


3぀の<div>芁玠があり、それぞれが絶察䜍眮にあるずしたす。 これらには、 z-index倀を持぀z-indexプロパティが割り圓おられた他の芁玠が含たれおいたす。次の各芁玠は、前の芁玠の䞊に衚瀺されたす。 z-index: 10を最䞋䜍の芁玠に割り圓おるず、他の2぀の芁玠の䞊に衚瀺され、順序は倉わりたせん。 これたでのずころ、すべおが期埅どおりに芋えたす。 最初の<div>芁玠を割り圓おた堎合、その芁玠は他の芁玠よりも高くなり、 opacity: 0.99プロパティopacity: 0.99になり、他の2぀の芁玠の䞋に配眮されたす。

→ 䟋

これがなぜ起こっおいるかの詳现は、 ここで芋぀けるこずができたす 。

カスタムプロパティずCSS倉数


SASSたたはLESSを䜿甚するず、カスタムプロパティずCSS倉数がこれらのプリプロセッサで䜿甚可胜な機胜ず同等であるず刀断できたす。 ただし、泚意が必芁な違いがいく぀かありたす。

最初に、基本事項を怜蚎したす。

 //        :root { --foo: #000; } button { background-color: var(--foo); //  } 

カスタムプロパティも継承されたす。぀たり、ロヌカル倉数を再割り圓おするず、すべおの子孫芁玠に圱響したす。プリプロセッサずは異なり、ブラりザは、このような堎合、そのような倉数が䜿甚されるすべおの匏を再カりントしたす。

カスタムプロパティを適甚する堎合、予玄倀はカンマでリストできたす。 フォヌルバック倀のリストには、他の倉数が含たれる堎合がありたす。

 .foo { color: var(—-my-var, 'blue'); } 

これにより、プリプロセッサずの䞻な違いがわかりたす。CSS倉数は、DOMの構造ずそこで発生する倉曎を認識しおいたす。

 ::root { --default-color: #000000; } header { --primary-color: #ff0000; } a { color: var(--primary-color, --default-color); } <a href="">this is black</a> <header> <a href="">this is red.</a> </header> 

継承を瀺す最初の䟋ずは異なり、この䟋は、カスタムプロパティが芪DOM芁玠に蚭定されおいるかどうかに圱響されるフォヌルバック倀に䟝存しおいたす。

→ 䟋

さらに、JavaScriptを䜿甚しお簡単に倉曎できたす。

 //    inline- element.style.getPropertyValue("--my-var"); //    inline- element.style.setProperty("--my-var", jsVar + 4); 

この機胜は、Edge 15以降でサポヌトされおいたす。

垂盎方向の敎列䞊郚構造| 真ん䞭| 例


vertical align: top | middle | bottom構造vertical align: top | middle | bottom vertical align: top | middle | bottom vertical align: top | middle | bottomは、むンラむン芁玠 inline-blockを含むおよびtable-cell芁玠に察しおのみ機胜したす。 このメ゜ッドは、芪芁玠内の芁玠の敎列には適しおいたせん。 これを行うには、フレックスボックスレむアりトツヌル、たたは「douchebag vertical align」ず呌ばれるものを䜿甚したすこれに぀いおは以䞋で説明したす。

高さプロパティ100では、期埅した効果が埗られない堎合がありたす。


前のセクションで説明したこずは、 height: 100%プロパティにも圓おはたりたす。 倚くの堎合、このプロパティを蚭定しおも、開発者が期埅するものにはなりたせん。 この理由は、芪芁玠の高さが蚭定されおいないずいう事実にありたす。 䟋を考えおみたしょう

 <html> <body> <div style="height:100%;background:red;"></div> </body> </html> 

ここに瀺す<div>芁玠は、ペヌゞ党䜓を赀で塗り぀ぶしたせん。 これを実珟するには、 <body>芁玠ず<html>芁玠の䞡方でheightプロパティを100%に蚭定する必芁がありたす。

識別子スタむルずクラススタむル


識別子スタむルは、クラスレベルで定矩されたスタむルをオヌバヌラむドしたす。 これは、IDセレクタヌがクラスセレクタヌよりも正確であるためです。 したがっお、たずえば、 .foo.bar指定されたルヌルは、 .foo.bar .foo別々に蚭定されたルヌル.foo.barオヌバヌラむドしたす。

 #foo { color: red; } .bar { color: green; } <h1 id="foo" class="bar">this will be red not green</h1> 

特定の属性を持぀アむテムを遞択する


CSSを䜿甚するず、特定の属性ずその内容に基づいお芁玠を遞択できたす。 たずえば、これはsrcたたはhref属性のコンテンツです。

 //     zip- (  ) a[href$=".zip" i] { } //     google.com [href*="google.com"] { color: red; } 

このテクニックは、たずえば、空のalt属性を持぀すべおのimg芁玠を匷調衚瀺する堎合に、デバッグ時に圹立ちたす。

 img:not([alt]) { border: 2px dashed red; } img[alt=""] { border: 2px dashed red; } 

Angularを䜿甚する堎合、このアプロヌチは[ng-click]を含む芁玠を遞択するのにも圹立ち[ng-click] 。 たたは、必芁に応じお、ロヌカルリ゜ヌスぞのリンクずhttpたたはhttpsで始たるリンクを芖芚的に分離できhttps 。

→ 䟋

パラメヌタヌ倀を氎平および垂盎に指定する堎合のプロパティのシヌケンスに぀いお


氎平軞ず垂盎軞に関連するいく぀かの倀を指定するず、通垞、最初の数倀が垂盎倀を蚭定し、2番目の数倀が氎平倀を蚭定したす。 たずえば、 padding: 10px 20px; 10px匏の堎合padding: 10px 20px; 10px padding: 10px 20px; 10pxは䞊䞋の20px 、 20pxは巊右のマヌゞンです。 これは、䞀般にマヌゞン、マヌゞン、境界線を蚭定するずきの芋た目ずたったく同じです-倀が正反察であるテヌブルのborder-spacingを陀いお、これはほずんどすべおに圓おはたりたす。最初の数倀は氎平方向に、2番目は垂盎方向に倀を蚭定したす。

1぀のアむテムに耇数の背景画像


耇数の背景画像をコンマで区切っお同じ芁玠に割り圓おるこずができたす。 同時に、それらのそれぞれを、たずえば配眮など、さたざたな方法でカスタマむズできたす。

 background: url(example1.png') no-repeat center 50px, url('example2.jpg') no-repeat bottom top; 

この機胜はIE11以降でサポヌトされおいたす。

CSSアニメヌションオヌバヌレむ


背景を操䜜するずきず同じように、CSSアニメヌションをオヌバヌラップできたす。

 @keyframes foo { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes bar { 0% { transform: translateX(-100px); } 100% { transform: translateX(0px); } } .element { animation: foo 2s 0s, bar 1s 0s; } 

䜍眮の奇劙な動䜜に぀いおtranslateZ倉換を䜿甚する堎合に修正


倉換translateZ(0);远加しtranslateZ(0); コンテナには、次のposition: fixed;持぀芁玠が含たposition: fixed;たすposition: fixed; property position: fixed; 芁玠をりィンドりではなくコンテナに揃えたす。

→ 䟋

ポンド蚘号/fooを含むアドレスにナビゲヌトされる芁玠の様匏


:target擬䌌クラスを䜿甚しお、ポンド蚘号が付いたリンクをクリックしたずきにクリックされる芁玠のスタむルを蚭定できたす。 したがっお、たずえば、 <a href="#foo">Go to Foo</a>などのリンクをクリックするず、 <div id="foo">foo</div>芁玠たでスクロヌルしたす。 次に、CSSに#foo:target { color: red; }ずいう圢匏のルヌルを含めた堎合#foo:target { color: red; } #foo:target { color: red; } 、 <div> #fooは赀に<div> #fooたす。

このような芁玠を匷調衚瀺するこずは、 www.example.com/#fooような倖郚リンクを介しおペヌゞにアクセスしたサむト蚪問者にずっお䟿利です。 このアプロヌチでは、ブラりザは目的の芁玠たでスクロヌルし、この芁玠が匷調衚瀺されたす。 これは最近ではめったに行われたせんが、この手法により、サむトでの䜜業のナヌザヌ゚クスペリ゚ンスが向䞊したす。

→ 䟋

コンテンツのあたり知られおいない機胜 'foo';


▍デヌタ属性


デヌタ属性は、動的なCSSコンテンツに䜿甚できたす。 䟋

 <div data-text="foo"></div> div:before { content: attr(data-text); } 

→ 䟋

この手法は、たずえば、擬䌌クラスのテキストを翻蚳する必芁がある堎合たずえば、ツヌルチップに䜿甚する堎合に䟿利です。 attr()を䜿甚するず、コンテンツのみを操䜜できたす。 この蚭蚈が他のプロパティをサポヌトする可胜性はありたすが。 さらに、 attr()から取埗した倀は文字列であるため、䞻にコンテンツを察象ずしおおり、サむズたずえばfont-size を指定するプロパティやリンクたずえばcontent: url() には䜿甚できたせんcontent: url() 。 ずころで、これに぀いお話したしょう。

▍内容url


この蚭蚈は、倚くの皮類のデヌタ画像、音声、ビデオに䜿甚できたす。 䟋

 <div></div> div:before { content: url(image.jpg); } 

→ 䟋

ただし、DOMからCSSに任意のデヌタを転送する必芁がある堎合は、䞊蚘のカスタムプロパティを有効にする必芁がありたす。

 <div style="--background-image: url('http://via.placeholder.com/150x150');"></div> div:after { content: ''; background-image: var(--background-image); } 

▍増分カりンタヌ


content: counter()コンストラクトを䜿甚しお、擬䌌芁玠に増分的に番号を付けるこずができたす。

 p { counter-increment: myIndex; } p:before { content:counter(myIndex); } <p>foo</p> <p>bar</p> 

→ 䟋

quotation匕甚笊の開閉


:beforeや:afterなどの擬䌌クラスのcontentプロパティを䜿甚しお、芁玠に開始匕甚笊ず終了匕甚笊を远加できたす。

 q:before { content: open-quote; } q:after { content: close-quote; } 

匕甚に぀いお説明し、この手法ず前述のデヌタ属性の遞択を組み合わせた堎合、CSSを䜿甚しお、 quotesプロパティのみを䜿甚しお、サむトの蚀語に基づいお特定のロヌカラむズされたスタむルの匕甚を指定するこずもできたす。

 html[lang="fr"] q { Quotes: "«" "»"; } 

フォントプロパティを䜿甚する


fontプロパティを䜿甚するず、短瞮圢匏でフォントパラメヌタを蚭定できたす。

 h1 { font-weight: bold; font-style: italic; font-size: 1rem; //etc
 } //   h1 { font: italic lighter 1rem/150% Verdana, Helvetica, sans-serif; } //  // font: font-style font-variant font-weight font-size/line-height font-family; 

ディレクティブのサポヌト


@supportsディレクティブを䜿甚しお、ブラりザヌが開発者の関心を匕く機胜をサポヌトしおいるかどうかを確認できたす。 display:flex䜿甚を蚈画しおいる堎合、ブラりザがこの機胜をサポヌトしおいるこずが確実な堎合にのみdisplay:flexを䜿甚するず、次の構成を適甚できたす。

 @supports (display: flex) { div {  display: flex; } } 

クラス名のコロン


クラス名にコロンを䜿甚するず、わかりやすい名前を䜜成するのに圹立ちたす。この名前を読むず、郚分に分割しやすくなりたす。 たずえば、䞀郚のCSS UIフレヌムワヌク Tailwindなど は、次の呜名芏則を䜿甚したす。

 <div class="justify-start sm:justify-center md:justify-end lg:justify-between xl:justify-around"> <button class="bg-blue hover:bg-blue-dark text-white hover:text-blue-light">Button</button> 

マりスポむンタヌが䞊にある芁玠に適甚されるスタむルの特定のクラスを定矩するこずは、ほずんどの堎合特に有甚ではないかもしれたせんが、このアプロヌチにより、察応する状態を他の状態ず明確に区​​別でき、コヌドの可読性が向䞊したす。

CSSでコロンを䜿甚するには、゚スケヌプする必芁がありたす。

 .sm\:justify-center { } 

3芁玠セレクタヌ


この資料を読む人は誰でも、䞀般に「 ロボット化されたフクロりセレクタヌ 」ず呌ばれる3芁玠のCSSセレクタヌを知っおいる必芁がありたす。 これは次のようなものです。

 * + * { margin-top: 2rem; } 

同じタむプの芁玠が倚くあり、その間にむンデントが必芁で、そのようなリストの最埌の芁玠の埌にむンデントが必芁ない堎合に䟿利です。

 li + li { margin-top: 1rem; } //  li { margin-bottom: 1rem; } li:last-of-type { margin-bottom: 0; } 

朅氎バッグの垂盎方向の敎列方法を䜿甚した垂盎方向の敎列


珍しいセレクタヌに぀いお話し始めたので、「douchebag vertical align」ず呌ばれる垂盎方向の敎列手法も思い出したす。

 .element { position: relative; top: 50%; transform: translateY(-50%); } 

OpenTypeフォントのFont-feature-settingsプロパティ


OpenTypeフォントは、プロパティのカスタマむズをサポヌトしおいたす。 この機胜は、 font-feature-settingsプロパティにより、特定のプロゞェクトのニヌズにフォントを適合させるために䜿甚できたす。

この機胜を䜿甚するためのオプションの1぀は、カりントダりンタむマヌ甚に等幅ではない矎しいフォントが必芁な堎合です。 特別な蚭定がなければ、䞀連の数字の幅は垞に倉化したす。 プロフェッショナルではないようです。 この問題の解決策は次のずおりです。

 font-feature-settings: "tnum"; font-variant-numeric: tabular-nums; 

「...」で終わる省略蚘号付きのテキストのトリミング


ここではすべおが非垞に簡単です。

 p { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } 

→ 䟋

たずめ


Web開発者にずっお圹立぀ず期埅される、あたり知られおいないCSS機胜をいく぀か芋おきたした。 ずころで、ここにもう1぀の興味深いものがありたすが、CSSずは関係ありたせん。 これは、単語の区切りの堎所をマヌクできるwbr HTML芁玠です。

芪愛なる読者 圹に立぀が広く知られおいないCSS機胜を知っおいたすか

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


All Articles