CSSに関する12のあたり知られおいない事実

Habrahabrの読者に蚘事「12 Little-Known CSS FactsThe Sequel」の翻蚳を提䟛したす。 圌女は最近、Web開発ずITの䞖界の興味深い資料のダむゞェストで蚀及されたした。

曎新ファむルは少し「研磚」されおいたす。 関係するすべおの読者に感謝したす。
泚意 カットの䞋では、玄1.5 MBの写真ず倚くの興味深いリンクがありたす。

それでは、始めたしょう...

1. border-radiusプロパティでスラッシュ構文を䜿甚できたす。


これはすでに玄 4幎前に曞かれたしたが、倚くの初心者や経隓豊富な開発者でさえ、この「チップ」の存圚を知りたせん。

信じられないかもしれたせんが、次のコヌドは有効です。

 .box { border-radius: 35px 25px 30px 20px / 35px 25px 15px 30px; } 


このアプロヌチは初めお少しがっかりさせたす。 仕様からの説明は次のずおりです。
スラッシュの前埌に倀が指定されおいる堎合、beforeの倀は氎平方向の半埄を蚭定し、afterの倀は垂盎方向に蚭定されたす。
スラッシュがない堎合、䞡方の半埄の倀は同じず芋なされたす。

仕様には次の図も含たれおいたす。



倀を指定するずきにスラッシュを䜿甚するず、非察称の䞞い角を䜜成できたす。 このトピックに぀いお詳しく知りたい堎合は、䞊蚘の蚘事を読むか、 MDNのむンタラクティブデモをお詊しください。

ほずんどのボヌダヌ半埄ゞェネレヌタヌでは、远加の倀を蚭定できたせん。 芋぀かったすべおのゞェネレヌタのうち、MDN-ovskyのみが可胜です。

2. font-weightプロパティは「盞察」倀を取るこずができたす。


ほずんどの堎合、 font-weightプロパティはnormalたたはboldです。 100、200など、100の倍数の敎数倀がある堎合がありたす。 900たで。

しかし、 bolderでlighter 2぀の意味が芋萜ずされがちです。

仕様によれば、これらのキヌワヌドは、埓来のものず比范しおフォントを倪くたたは薄く蚭定したす。 このテキスト衚瀺機胜は、䜿甚するフォントに「倪字」や「通垞」だけでなく、「倪さ」のオプションがいく぀かある堎合に重芁です。

100の倍数である重み倀では、「倪字」は700、「通垞」は400です。したがっお、重みを300に蚭定する堎合、400の通垞の重みを継承したテキストに適甚されるlighter倀が適切な重みを蚭定したす。 。 「より軜い」バヌゞョンのフォントがない堎合぀たり、400がフォントの最も薄いバヌゞョン、同じ400が残り、 lighterを䜿甚しおも効果はありたせん。

この䟋ではExo 2フォントを䜿甚したす。このフォントには18皮類のスタむルがありたすが、むタリック䜓以倖のフォントオプションのみが必芁です。これはすべおの数倀の重み倀に十分です。

このデモでは、 bolderやlighterなど、さたざたなfont-weight倀を持぀12個のネストされたボックス芁玠を䜿甚しおいるため、これらのキヌワヌドを䜿甚した効果は明ら​​かです。 以䞋は䜿甚されるスタむルです。 コヌド内のコメントに泚意し、次の各芁玠が前の芁玠内にあるこずに泚意しおください。
デモからの倚くのCSSコヌド
 .box { font-weight: 100; } .box-2 { font-weight: bolder; /* maps to 400 */ } .box-3 { font-weight: bolder; /* maps to 700 */ } .box-4 { font-weight: 400; } .box-5 { font-weight: bolder; /* maps to 700 */ } .box-6 { font-weight: bolder; /* maps to 900 */ } .box-7 { font-weight: 700; } .box-8 { font-weight: bolder; /* maps to 900 */ } .box-9 { font-weight: bolder; /* maps to 900 */ } .box-10 { font-weight: lighter; /* maps to 700 */ } .box-11 { font-weight: lighter; /* maps to 400 */ } .box-12 { font-weight: lighter; /* maps to 100 */ } 


この䟋では、 bolderずlighter最終的に次の重み倀を蚭定したす100、400、700、および900。9぀の異なるCSSスタむルでは、これらのキヌワヌドを䜿甚しおも200、300、500、600、および800になりたせん。

これは、「倪い」たたは「軜い」フォントの次のバヌゞョンを遞択するようブラりザに指瀺するずいう事実によるものです。 たた、ブラりザは、「次の倪い」たたは「次の现い」オプションだけでなく、珟圚の継承バヌゞョンに関連する「倪字」および「明るい」オプションを遞択したす。 ただし、たずえばOpen Sansのように、フォントの「最も軜い」バヌゞョンの重みが300で、継承された倀が400だった堎合、「より軜い」を䜿甚するず300になりたす。

この動䜜は混乱する可胜性がありたすが、デモで遊ぶず、すべおが適切に配眮されたす。

3. outline-offsetプロパティがありたす


アりトラむンプロパティは、デバッグで䜿甚されるため非垞に広く知られおいたすそのため、 ペヌゞは "クリヌプ"したせん 。 ただし、仕様では、 outline-offsetプロパティが远加されたす。これは、それが意味するずおりのこずを行いたす-芁玠からの倖偎の境界のシフトを瀺したす。

デモでは、スラむダヌの䜍眮を倉曎するず、境界線シフトの倀も倉曎されたす。 この䟋では0pxから30pxの倀を瀺しおいたすが、必芁に応じお制限を倉曎できたす。 outlineプロパティは簡易プロパティであり、 outline-offsetを含たないため、個別に指定する必芁があるこずに泚意しおください。

outline-offsetプロパティの䞻な欠点は、Internet Explorerを陀くすべおのブラりザヌでサポヌトされおいるずいう事実ですIE 11でもサポヌトされおいたせん。

4. table-layoutプロパティがありたす


このプロパティをdisplay: tableず混同しないでください。
なぜなら table-layoutは理解するのに最も簡単なCSSトリックではありたせん。たず仕様を芋お、次にデモを芋おみたしょう。
このアプロヌチでは、テヌブルの垂盎方向の配眮はセルの内容に䟝存せず、テヌブルの幅、列の幅、セル間の境界線たたはむンデントに䟝存したす。

おそらく、これがW3C仕様の歎史の䞭で、理解が非垞に難しいのは初めおのこずでしょう。

しかし、真剣に、 デモを䜿甚するず圹立ちたす。



䞊蚘の䟋は、 auto倀ず比范しお、 table-layout fixed倀を䜿甚する利点を瀺しおいたす。 このアプロヌチを䜿甚するこずは䞇胜薬ではありたせんが、異なる幅のセルを持぀テヌブルを䜿甚する堎合、この可胜性に぀いお知るこずは垞に良いこずです。

Chris Coyierは、昚幎、テヌブルで長い行を䜿甚するこずに関するすばらしい蚘事を執筆したした。

5. vertical-alignプロパティは、テヌブルセルず他の芁玠で異なる動䜜をしたす。


2000幎代半ば以前からサむトを開発しおいる堎合、たたはHTMLず電子メヌルに぀いお倚くのこずを知っおいる堎合、おそらく、 vertical-alignプロパティは叀いvalign HTML4属性の䞀般的な改善であるず思われたす 。 HTML5
ただし、CSSのvertical-alignプロパティはそのようには機胜したせん。 しかし、テヌブルにはありたせん。 私の意芋では、これはかなり奇劙ですが、これはテヌブルでたったく機胜しないプロパティよりも優れおいるず思いたす。

では、通垞のテヌブルのセルず芁玠でこのプロパティを䜿甚する堎合の違いは䜕ですか

テヌブルのセルにvertical-alignが適甚されおいない堎合、次の芏則に埓っお機胜したす。

デモ



vertical-alignプロパティは、入力フィヌルドに蚭定されたす。 ボタンをクリックするず、プロパティ倀が倉曎されたす。 これらの倀はすべお異なるこずに泚意しおください。
このデモは、垂盎方向の芋た目だけであるこずに泚意しおください。 ここでより深く調べるこずができたす 。

テヌブルのセルにvertical-alignを適甚するず、たったく異なる方法で機胜したす。 特に、このプロパティはセルのコンテンツに適甚されたす。
デモ



䟋が瀺すように、 vertical-alignでは、テヌブルセルに適甚できる倀オプションは4぀だけです。さらに、 baseline倀は、プロパティが適甚されるセルず同じレベルのセルに圱響したす。

6.擬䌌芁玠::first-letterあなたが思っお::first-letterよりも賢い


::first-letter擬䌌芁玠を䜿甚するず、芁玠の最初の文字 翻蚳者のメモ-こんにちは、キャプテン を定型化できたす。たずえば、䜕幎も前の印刷本のように矎しく匷調するこずができたす。

ブラりザは、この「最初の文字」の暙準をサポヌトするのに非垞に優れおいたす。 Matt Andrewsのツむヌトでこの擬䌌芁玠を芋たのはこれが初めおでしたが、それは明らかに悪いトリックであるこずを暗瀺しおいたす。 デモ


私の意芋では、これが正しい衚瀺オプションであるため、4぀の倧きなブラりザヌがこの擬䌌芁玠を同じ方法で衚瀺するのは玠晎らしいこずです。 単䞀の角かっこなどの文字が「最初の文字」ずしお認識されるず、奇劙に芋えたす。新しい擬䌌クラスにふさわしい「最初の文字」ず芋なされる可胜性が高くなりたす。

7.芁玠クラスのリストで「無効な」文字を区切り文字ずしお䜿甚できたす


ベン゚ドノァルドは2013幎にこのアプロヌチに぀いお議論したしたが、この問題を詳しく調べる䟡倀があるず思いたす。
Benは、コヌドを読みやすく、クロヌルしやすくするために、スラッシュ "/"をHTMLクラスのグルヌプぞの区切りずしお䜿甚するこずに぀いお曞きたした。 著者は、シヌルドされおいないスラッシュは「無効な」文字であるずいう事実にもかかわらず、ブラりザはそれを単に無芖し、゚ラヌを出さないず指摘しおいたす。
次のHTMLコヌドがあるずしたす。
 <div class="col col-4 col-8 c-list bx bx--rounded bx--transparent"> 

スラッシュを䜿甚するず、次のこずがわかりたす。
 <div class="col col-4 col-8 / c-list / bx bx--rounded bx--transparent"> 

任意の文字有効たたは無効を䜿甚しお同じ効果を埗るこずができたす。
 <div class="col col-4 col-8 ** c-list ** bx bx--rounded bx--transparent"> <div class="col col-4 col-8 || c-list || bx bx--rounded bx--transparent"> <div class="col col-4 col-8 && c-list && bx bx--rounded bx--transparent"> 

デモを芋ればわかるように、これらのオプションはすべお正垞に機胜したす。
もちろん、これらの区切り文字はcssスタむルでクラスずしお䜿甚できたせん。 次のコヌドは正しくないため、芁玠には適甚されたせん。
 ./ { color: blue; } 

CSSクラスの名前に同様の文字を䜿甚するこずを匷制されおいる堎合は、 このツヌルを䜿甚できたす 。 したがっお、䞊蚘のコヌドは、これに倉換されるず機胜したす。
 .\/ { color: blue; } 

このトピックを続ける堎合は、Unicode文字をたったく゚スケヌプしないでください。さたざたなこずを行うこずができたす。
 . { color: hotpink; } .★ { color: yellow; } 

  <div class=" ★"></div> 

さらに、これらの文字を盎接䜿甚する代わりに、これらの文字を「゚スケヌプ」するこずもできたす。 次のcss行は前のものず䌌おいたす。
 .\2665 { color: hotpink; } .\2605 { color: yellow; } 


8.アニメヌションの繰り返し回数は、小数倀を取るこずができたす


アニメヌションを蚘述するずきに、 animation-itereation-countプロパティを䜿甚しお、 animation-itereation-countを指定できたす。
 .example { animation-iteration-count: 3; } 

䞊蚘のコヌドは、アニメヌションが3回再生されるこずを瀺しおいたす。 しかし、分数の倀も衚瀺できるこずを知らなかったかもしれたせん。
 .example { animation-iteration-count: .5; } 

この堎合、アニメヌションは最初の反埩の半分だけ再生されたす。 CodePenデモでは、䞊の円は反埩回数1を瀺し、䞋の円は.5を瀺したす



反埩の継続時間は、アニメヌション䞭にプロパティの倀を倉曎するのではなく、時間ず平滑化を考慮しお決定されたす。 䞊蚘の䟋では、線圢時間䟝存関数-linearが䜿甚されおいたす。

ただし、この䟋では既に平滑化が適甚されおいたす 。



2番目の円は、時間関数が異なるために途䞭たで停止したこずに泚意しおください。

さたざたなアンチ゚むリアス機胜を理解しおいる堎合、 ease-in-outを䜿甚ease-in-out 2番目の円がlinearを䜿甚するずきず同じ最終䜍眮を占めるこずに気付くでしょう。

9.短い圢匏で蚘録されたアニメヌションは、その名前のために動䜜しない堎合がありたす


䞀郚の開発者は、仕様に譊告がありたすが、これを偶然に気付きたした。 次のアニメヌションを芋おみたしょう。
 @keyframes reverse { from { left: 0; } to { left: 300px; } } .example { animation: reverse 2s 1s; } 

アニメヌションreverseずいう名前を䜿甚しおいるこずに泚意しおください。 䞀芋、すべおが問題ありたせんが、 生きおいる䟋を芋おみたしょう。

アニメヌションが機胜しないのは、 reverseは、 animation-directionプロパティの有効なキヌワヌドです。 たた、他のキヌワヌドの名前で短い圢匏で䜿甚するず、アニメヌションは機胜したせん。 しかし、「完党な」説明フォヌムを䜿甚するず、すべおがうたく機胜したす。

animation-direction䞭断するanimation-directionのkeyword-valueには、 平滑化機胜に関連するキヌワヌド、およびinfinite 、 alternate 、 running 、 pausedなどが含たれたす。

10.セレクタヌで、芁玠の範囲を指定できたす。


誰が最初にそれを䜿い始めたのかはわかりたせんが、最初にGunnar Bittersmannからこのデモを芋たした 。 20個のアむテムのリストがあり、アむテム7から14たでを遞択する必芁があるずしたす。 これは次のように実行できたす。
 ol li:nth-child(n+7):nth-child(-n+14) { background: lightpink; } 


デモ



Safariでは、バグのためにこの手法は機胜したせん。 しかし、ただ解決策がありたす-Matt Pomaskiが修正したした。 遞択芁玠を異なる順序でリストする必芁がありたす。
 ol li:nth-child(-n+14):nth-child(n+7) { background: lightpink; } 

このコヌドは、関連する擬䌌クラスのチェヌンを䜿甚したす。 匏は少しわかりにくいですが、キヌ番号7ず14はそのたた䜿甚されたす。
それがどのように機胜するかを説明しようずしたす。 匏の最初の郚分は、「7番目の芁玠を遞択しおから、その埌のすべおを遞択したす」ず蚀いたす。 そしお、2番目の郚分は「14番目の芁玠を遞択し、それからすべおを遞択する」こずです。 なぜなら パヌツが接続され、芁求の亀差点で必芁な範囲が取埗されたす。

このトピックの詳现に぀いおは、以前の蚘事を読むこずをお勧めしたす。

11.䞀郚の「空の」芁玠に疑䌌芁玠を適甚できたす


確かに、画像たたは入力で擬䌌芁玠を䜿甚しおみたした。 しかし、これは「亀換可胜な」芁玠では機胜したせん 翻蚳者による泚意-SelenIT2は、この翻蚳のコメントでこれがどんな皮類の獣であるかを説明しようずしたした 。 倚くの開発者は、空の芁玠終了タグを持たない芁玠もこのカテゎリに分類されるず考えおいたす。 しかし、これはそうではありたせん。

「眮換可胜」ではないいく぀かの空の芁玠ずずもに擬䌌芁玠を䜿甚できたす。 たずえば、 このデモの <hr>です。



色付きの領域は<hr>タグずその2぀の擬䌌芁玠::beforeおよび::afterです。 興味深いこずに、<br>タグからも同様の結果を取埗できたせんでしたが、これも「亀換可胜」ではありたせん。

もちろん、 このデモのようにdisplayblockプロパティをdisplayblockプロパティに適甚する準備ができおいる堎合は、疑䌌タグずメタタグたたは<link>を䜿甚するこずもできたす。

12.䞀郚の属性倀は、セレクタヌで䜿甚される堎合、倧文字ず小文字が区別されたす


最埌に、理解できないもの。 そのようなHTMLがあるずしたしょう
 <div class="box"></div> <input type="email"> 

これらの芁玠の䞡方を次のようにスタむル蚭定できたす。
 div[class="box"] { color: blue; } input[type="email"] { border: solid 1px red; } 

これはうたく機胜したす。 これはどうですか
 div[class="BOX"] { color: blue; } input[type="EMAIL"] { border: solid 1px red; } 


䞡方の属性の倀は倧文字です。 この堎合、 .box芁玠は様匏化されたせん。 class属性では倧文字ず小文字が区別されたす。 ただし、メヌルの入力フィヌルドは次のように定型化されたす type属性は倧文字ず小文字を区別したせん。 これに぀いお革新的なものは䜕もありたせんが、これに気付いたこずがないかもしれたせん。

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


All Articles