WEBサイトのスタイルを構成するCSSを正しい記法で管理できる開発者はそれほど多くありません。
というか正解がどれなのか、正しい答えを知っている人はいないかもしれません。
しかし、知っていると便利で、開発で役立つコードは存在しています。
本記事では知っておくとベンチな20超のCSSトリックとヒントが書かれているので、ぜひコード効率化のための参考にしてみてください。
スムーズスクロール
Webサイト内のアンカーリンクなどでセクションに移動する際、スムーズにスクロールします。
html { scroll-behavior: smooth; }
テキストエリアのサイズ変更制御
サイズ変更プロパティを使用して、フォーム内ののtextarea要素サイズが変更されないようにすることができます。
textarea.no-resize { resize: none; } textarea.horizontal-resize { resize: horizontal; } textarea.vertical-resize { resize: vertical; }
ドロップキャップ
疑似要素を使用して、段落にドロップキャップを追加できます。
::first-letter { font-size: 300%; }
入力範囲の疑似クラス
input要素の最小プロパティ(min)と最大プロパティ(max)で指定された範囲にあるinput要素に適用されます。
視覚的に簡単なバリデーションチェックが可能です。
input:in-range{ background: rgba(255, 0, 0, 0.6); } input:out-of-range { background: rgba(255, 0, 0, 0.2); }
便利なCSS疑似要素
疑似要素は、要素の特定の部分を選択してスタイルを設定する方法です。標準のHTML要素の一部として作成されるサブ要素と考えることができます。
::beforeと::after
選択した要素の子である疑似要素を作成します。::before擬似要素は、最初の子として割り当てられ、::after最後のものです。
.main-text{ font-style: italic; } .main-text::before, .main-text::after { content: ' " ' ; color: wheat; }
::first-line
ブロックレベル要素の最初の行のスタイルを適用します。
最初の行の長さは、要素またはビューポートの幅に依存するので注意が必要です。
p::first-line { color: wheat; text-decoration: underline; }
::placeholder
要素のプレースホルダーテキストを表します。疑似要素で使用できるのは、CSSプロパティのサブセットのみです。
input::placeholder { color: wheat; font-size: 1.2em; }
::selection
ユーザーが強調表示したドキュメントの部分にスタイルを適用します。
::selection { color: #ffffff; background-color: #fa5094; } p::selection { color: lightblue; background-color: #wheat; }
SASSによる効率化
SASSを使用すると、CSSコードが非常に効率的になります。
SASSはCSSプリプロセッサであり、ほぼすべてのプロジェクトで使用されています。
ここでは、コードを効率的にするために使用できるSASSのmixinをいくつか紹介します。
センタリング
ブロック要素を中央に配置するのに便利です。
@mixin center-block { margin: { left: auto; right: auto; } } // 利用ケース .wrapper { @include center-block(); }
比率
スケーラブルな要素(通常は画像)を作成するための比率を設定します。アスペクト比はあまりサポートされていないため、この手法はけっこう便利です。
@mixin responsive-ratio($x, $y) { padding-top: unquote(($y / $x) * 100 + "%"); } // 利用ケース .wide-image { @include responsive-ratio(16, 9); }
テキストの省略
テキストの省略は、構文を忘れがちなため、mixinで指定すると便利です。
@mixin truncate ($width-limit) { max-width: $width-limit; white-space: nowrap; overflow: hidden; text-overflow: hidden; text-overflow: ellipsis; } // 利用ケース .excerpt { @include truncate(10rem); }
カバーの背景
カバーの背景画像が多く利用されている場合は便利です。
@mixin cover-background ($image-src) { background-image: url($image-src); background-repeat: no-repeat; background-size: cover; background-position: center; } // 利用ケース .hero { @include cover-background("../image/main.png") }