30 Seconds of CSS日本語訳１～１２

[**『30 Seconds of CSS』**](https://30-seconds.github.io/30-seconds-of-css/)
ご存知の方も多いと思いますが、CSSの役立つ小技集のようなサイトです。
誰でも知っているようなものもありますが、標準仕様とは言えないながらも覚えておくとお得なテクニックやデザイン的なテクニックなども多数載っていて、解説も分かりやすい。
その上文章も短く簡潔なので、私の貧弱な英語力でもそれなりに読めるのがありがたいという素晴らしいサイトです。

今回は英語の勉強も兼ねてこちらを翻訳していきたいと思います。
なお、コードサンプルやデモは転載しませんので元サイトの方でご確認ください。

この記事はブログで4個づつ翻訳したものをまとめたものになります。
この先はQiitaの前にブログで公開しているのでよろしくお願いします。
[TAMAのWEBデザイン勉強ノート+雑感](http://blackshepherd.net/)

|目次　|
|:-----------------|
|１．はずむ読み込み – Bouncing loader|
|２．Box-sizingの初期化 – Box-sizing reset|
|３．真円 – Circle|
|４．クリアーフィクス – Clearfix|
|５．高さの比率に対して一定の横幅 - Constant width to height ratio|
|６．自動連番 - Counter|
|７．スクロールバーのカスタマイズ - Custom scrollbar|
|８．テキスト選択範囲のカスタマイズ - Custom text selection|
|９．CSS変数 - Custom variables|
|１０．選択の禁止 - Disable selection|
|１１．テーブル要素内の中央配置 - Display table centering|
|１２．ドーナッツ型の回転アニメ―ション - Donut spinne|



##１．はずむ読み込み – Bouncing loader
https://30-seconds.github.io/30-seconds-of-css/#bouncing-loader
<img class="alignnone size-full wp-image-317" src="http://blackshepherd.net/wp-content/uploads/2018/10/Bouncing-loader.jpg" alt="" width="756" height="188" />

**はずむ読み込み動画を作ろう。**

**<<説明>>**
注：1remは通例16pxとする。

1. `@keyframes`で、要素の不透明度opacityの変化、また`transform: translateY()`を使った要素の二次元平面上の移動という２つ状態を持ったアニメーションを定義します。

1. `.bouncing-loader`セレクタは跳ねる円形の親コンテナ要素なので、その子要素を中央に位置させるために`display: flex`と`justify-content: center`を指定します。

1. `.bouncing-loader > div`セレクタは、親要素の中の3つの`div`を対象にスタイルを指定します。`div`要素はそれぞれ1remの高さと幅を与えられ、`border-radius: 50%`の指定によって角が球状に丸められています。

1. `margin: 3rem 0.2rem`が各円形に指定している上下3rem、左右0.2remのマージンは、円形同士が接触しないように余白を作るためです。

1. `animation`は各種アニメーションプロパティを表すためのショートハンドプロパティです。`animation-name`, `animation-duration`, `animation-iteration-count`, `animation-direction`プロパティが使用されています。

1. `nth-child(n)`はその親要素の中のｎ番目の子要素を対象にする疑似クラスです。

1. `animation-delay`は二番目と三番目の要素にそれぞれの値で使用されています。それによって、各々の要素が違うタイミングでアニメーションを開始するのです。
 

##２．Box-sizingの初期化 – Box-sizing reset
https://30-seconds.github.io/30-seconds-of-css/#box-sizing-reset
<img class="alignnone size-full wp-image-318" src="http://blackshepherd.net/wp-content/uploads/2018/10/Box-sizing-reset.jpg" alt="" width="404" height="257" />

**要素の幅と高さがそれらに指定されたborderやpaddingの影響を受けないよう、ボックスモデルの初期化をしよう。**

**<<説明>>**

1.` box-sizing: border-box`は追加し`たpadding`や`border`が要素の幅や高さに影響を与えないようにします。
1. `box-sizing: inherit`で、ある要素がその親要素の`box-sizing`規則に従うようにします。
 

##３．真円 – Circle
https://30-seconds.github.io/30-seconds-of-css/#circle
<img class="alignnone size-full wp-image-319" src="http://blackshepherd.net/wp-content/uploads/2018/10/Circle.jpg" alt="" width="99" height="105" />

**真円形の要素をCSSだけを使って作ろう。**

**<<説明>>**

`border-radius: 50%`で要素のフチを湾曲させて真円を作ります。
真円というものは中心から辺のどの点までの距離も同じでなければならないので、要素の幅と高さは必ず同じにします。違う値にした場合は楕円が作られるでしょう。

 

##４．クリアーフィクス – Clearfix
https://30-seconds.github.io/30-seconds-of-css/#clearfix


**子要素のフロート解除を親要素で確実に行おう。**
注：このテクニックは貴方がまだレイアウトにフロートを使っている場合のみ有効です。フレックスボックスやグリッドレイアウトを用いた近代的な手法の使用を検討してください。

**<<説明>>**

1. `.clearfix::after`で疑似要素にスタイルを指定します。
1. `content: ‘　’`を指定して、その疑似要素がレイアウトに影響を与えることを許可します。
1. `clear: both`はその要素の左右、あるいは両側の要素が`clear`を指定しているそのブロックの中で前出しているフロート要素に隣接できなくなることを示します。(この訳自信無し)


##５．高さの比率に対して一定の横幅 - Constant width to height ratio
<a href="https://30-seconds.github.io/30-seconds-of-css/#constant-width-to-height-ratio"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#constant-width-to-height-ratio</span></a>
<img class="alignnone size-full wp-image-320" src="http://blackshepherd.net/wp-content/uploads/2018/10/Constant-width-to-height-ratio.jpg" alt="" width="425" height="414" />

**要素に可変の横幅を与えることで、レスポンシブデザインでも高さが釣り合う状態を保持できるようになる。**(言い換えれば、その要素の高さに対する横幅の比率が一定になる)

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>

`::before`疑似要素に指定された`padding-top`によって、要素の高さは横幅に指定されている％と同じ値になります。従って`100%`という値を指定することでその要素の高さが常にその横幅の100％になり、レスポンシブな正方形を作り出せるのです。
(訳者補足：縦横関係なく、%を値に持つpaddingは横幅を基準にした%の長さを取るようです。)
この方法は、この要素の中に中身を正常に配置することにも使えるでしょう。


##６．自動連番 - Counter
<a href="https://30-seconds.github.io/30-seconds-of-css/#counter"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#counter</span></a>
<img class="alignnone size-full wp-image-321" src="http://blackshepherd.net/wp-content/uploads/2018/10/Counter.jpg" alt="" width="227" height="258" />

**カウンターとは要するにCSSによって運用される変数であり、使用された回数に適用されるCSSのルールに従って、その変数の値は追加されていく。**

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>

連番の入ったリストがどんなHTMLタグでも作れます。
<ol>
 	<li>`counter-reset`はカウンターの変数を初期化するプロパティで、値には対象となる任意のカウンター名を取ります。デフォルト値では、カウンターは0からのスタートです。またこのプロパティは初期値を特定の値に変えることも出来ます。</li>
 	<li>`counter-increment`はカウントされる要素に指定します。一度`counter-reset`によって初期値になったカウンターの値が増加あるいは減少を開始します。</li>
 	<li>`counter(name, style)`で、その項目ごとのカウンターの値を表示します。一般的に疑似要素の`content`プロパティ内で使用します。この機能は2つのパラメータを持ち、1つ目はカウンターの名前、2つ目は`decimal`と`upper-roman`のどちらかです。(初期値は`decimal`)
(※訳者注：この機能はサンプルでは使用されていません。)</li>
 	<li>`counters(counter, string, style)`もまた、その項目ごとのカウンターの値を表示し、一般的に疑似要素の`content`プロパティ内で使用します。この機能は3つのパラメーターを持っています。1つ目はそのカウンターの任意の名前、2つ目はカウンターの数値の後に来る任意の文字列、3つ目は`decimal`と`upper-roman`のどちらかです。(初期値は`decimal`)</li>
 	<li>CSSカウンターは特に概要のリストを作る際に便利でしょう、なぜなら子要素の中には自動的に新しい階層のカウンターが作成されるからです。`counters()`の機能を使うことで、階層が違う入れ子状のカウンターたちの間に区切り用の文字列を挿入することも出来ます。</li>
</ol>

##７．スクロールバーのカスタマイズ - Custom scrollbar
<a href="https://30-seconds.github.io/30-seconds-of-css/#custom-scrollbar"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#custom-scrollbar</span></a>
<img class="alignnone size-full wp-image-322" src="http://blackshepherd.net/wp-content/uploads/2018/10/Custom-scrollbar.jpg" alt="" width="749" height="141" />

**スクロールバーのスタイルをドキュメントやバー付きの要素によってカスタマイズしよう。(WebKit 系プラットフォーム限定)**

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>
<ol>
 	<li>`::-webkit-scrollbar`はスクロールバー要素全体にスタイルを指定します。</li>
 	<li>`::-webkit-scrollbar-track`はスクロールバートラックの要素(上下するパーツとそのレール部分)にスタイルを指定します。</li>
 	<li>`::-webkit-scrollbar-thumb`はスクロールバーサムの要素(上下するパーツ)にスタイルを指定します。</li>
</ol>
この他にもたくさんのスクロールバー用疑似クラスが用意されています。もしそれらも知りたい場合は、<a href="https://webkit.org/blog/363/styling-scrollbars/">WebKit Blog</a>をご覧ください。

<span style="color: #ff6600;"><span style="font-size: 18pt;">⚠</span><span style="color: #808080;">スクロールバーのスタイルはどの標準化過程にも載っていないと思われます。</span>
<span style="color: #808080;">(訳者注：前述のとおりWebKit 系のSafariやChromeでのみ使用可)</span></span>

(訳者補足：コメント欄より情報提供いただきました。
[『CSS Scrollbars Module Level 1』](https://www.w3.org/TR/css-scrollbars-1/#acknowledgments)にて同一の内容ではないもののスクロールバーのCSSプロパティが標準化過程に記載されているようです。)


##８．テキスト選択範囲のカスタマイズ - Custom text selection
<a href="https://30-seconds.github.io/30-seconds-of-css/#custom-text-selection"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#custom-text-selection</span></a>
<img class="alignnone size-full wp-image-323" src="http://blackshepherd.net/wp-content/uploads/2018/10/Custom-text-selection.jpg" alt="" width="256" height="139" />

**テキスト選択範囲(クリックやドラッグした時)のスタイルを変えよう。**

`::selection`はある要素の中のテキストが選択されたときに指定するスタイルを定義します。ただし他のセレクタをその前に結合して使わない場合は、指定したスタイルはドキュメントのルートレベルに適用され、選択可能な全ての要素が対象になるという点に留意してください。

##９．CSS変数 - Custom variables
<a href="https://30-seconds.github.io/30-seconds-of-css/#custom-variables"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#custom-variables</span></a>

**CSS変数は一つのドキュメントを通して使う特定の値を格納する。**

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>

`:root`疑似クラス内に定義された変数は、ドキュメントを構成する樹状に連なる要素の根っこ(root)の要素に適用されるため、グロバーバル変数として機能します。

`--variable-name:`の形で変数を宣言しましょう。

変数はドキュメント内であれば`var(--variable-name)`の値を使って呼び出すことができます。
##１０．選択の禁止 - Disable selection

<span style="color: #3366ff;"><a style="color: #3366ff;" href="https://30-seconds.github.io/30-seconds-of-css/#disable-selection">https://30-seconds.github.io/30-seconds-of-css/#disable-selection</a></span>
<img class="alignnone size-full wp-image-324" src="http://blackshepherd.net/wp-content/uploads/2018/10/Disable-selection.jpg" alt="" width="293" height="170" />

**コンテンツを選択できない様にしよう。**

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>

user-select: noneを指定することで、そのテキストは選択できない様になります。

<span style="color: #ff6600;"><span style="font-size: 18pt;">⚠</span><span style="color: #808080;">ブラウザへのフルサポートには各プレフィクスが必要です。
<span style="font-size: 18pt;">⚠</span>閲覧者がコンテンツをコピーすることを防ぐ確実な方法ではありません。
(訳者注：Devツールでこの指定を外せば通常通りの選択が可能になるため)</span></span>
##１１．テーブル要素内の中央配置 - Display table centering
<span style="color: #3366ff;"><a style="color: #3366ff;" href="https://30-seconds.github.io/30-seconds-of-css/#display-table-centering">https://30-seconds.github.io/30-seconds-of-css/#display-table-centering</a></span>
<img class="alignnone size-full wp-image-325" src="http://blackshepherd.net/wp-content/uploads/2018/10/Display-table-centering.jpg" alt="" width="753" height="319" />

**縦横の両方向に子要素を中央配置するためにその親要素にdisplay: tableを使おう。**(flexboxの代用手段として)

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>
<ol>
 	<li> `'.center'`セレクタに指定した`display: table`によって、その要素はHTMLの`<table>`タグと同じようにふるまいます。</li>
 	<li>縦横の幅に`100％`を指定することで、 `'.center'`セレクタは親要素内いっぱいの大きさを取ります。</li>
 	<li> `'.center > span'`セレクタに指定した`display: table-cell`によって、その要素はHTML要素と同じ働きをします。</li>
 	<li>`text-align: center`で子要素は横方向に中央配置されます。</li>
 	<li>`vertical-align: middle`で子要素は縦方向に中央配置されます。</li>
</ol>
なおこの外側の親要素(この例では`'.container'`)は高さと横幅が固定されている必要があります。


##１２．ドーナッツ型の回転アニメ―ション - Donut spinner
<a href="https://30-seconds.github.io/30-seconds-of-css/#donut-spinner"><span style="color: #3366ff;">https://30-seconds.github.io/30-seconds-of-css/#donut-spinner</span></a>
<img class="alignnone size-full wp-image-326" src="http://blackshepherd.net/wp-content/uploads/2018/10/Donut-spinner.jpg" alt="" width="296" height="107" />

**コンテンツが読み込み中であることを示す、ドーナッツ型の回転アイコンを作ろう。**

<span style="font-size: 14pt;"><strong><span style="color: #3366ff;">&lt;&lt;説明&gt;&gt;</span></strong></span>

半透明のborderを要素の全辺に適用し、その上で一辺だけに読み込み進行中の指針を表すように色を付けます。animationプロパティを使って、そのドーナツ型の要素を回転させます。

<span style="color: #ff6600;"><span style="font-size: 18pt;">⚠</span><span style="color: #808080;">ブラウザへのフルサポートには各プレフィクスが必要です。</span></span>