logo
コーディング

更新日

【第5弾】少しのコードで実装可能な10のCSS小技集

CSS小技集シリーズの第5弾!「【第4弾】少しのコードで実装可能な10のCSS小技集」から約2年。またまた便利でサクッと使えるコードが続々登場しています!初心者さんからベテランさんまで要チェック!

【第 4 弾】少しのコードで実装可能な 10 の CSS 小技集

目次

  1. ネストで親子セレクターを管理
  2. チェックボックスやラジオボタンの色を変更
  3. アスペクト比を指定する
  4. 新しいメディアクエリーの範囲指定方法
  5. 背面の要素をぼかす
  6. 要素を画面のど真ん中に固定表示
  7. 空の要素にスタイルをあてる
  8. 条件に合致しないセレクターにスタイルをあてる
  9. スムーススクロールのジャンプ位置
  10. 動いている CSS アニメーションを止める

HTML・CSS の全コードは各サンプルの「HTML」や「CSS」タブを、別タブでのサンプル表示は右上の「EDIT ON CODEPEN」をクリックしてご覧ください!

1. ネストで親子セレクターを管理

親セレクターを何度も記述しなくても、ネスト(入れ子)にすることで子セレクター管理も簡単にできます。これだけでコーディングの時間を短縮できますよね。ブロックごとのまとまりも把握しやすくなり、メンテナンスも楽になります。

書き方は、親セレクターのブロックの中に、子セレクターのスタイルを記述していけます。Sass と同じ書き方ですね。また、& を使って親セレクターにつなげることもできます。例えば以下の例で .item:hover としたいところでは、.item のブロックの中に &:hover のブロックを記述しています。

CSS

.item {
  background: #fff;
  .title {
    color: #0bd;
    font-size: 2rem;
  }
  &:hover {
    box-shadow: 0 0 1rem #999;
  }
  &:first-of-type {
    margin-top: 3rem;
  }
}

目次へ。

2. ラジオボタンやチェックボックスの色を変更

これまではフォームのパーツを装飾するのはなかなか難しかったのですが、 accent-color を使ってラジオボタンやチェックボックスの色を変更できるようになりました。手軽にブランドカラーに合わせてデザインできるので、覚えておくといいですね!

CSS

form {
  accent-color: #f55;
}

目次へ。

3. アスペクト比を指定する

コンテンツの横:縦の比率のことをアスペクト比と言います。決まったピクセル数を指定できるならそれでもいいのですが、レスポンシブ対応がめんどうだったり、そもそも数値がわからないこともありますよね。

そんな時は aspect-ratio で比率を指定するといいでしょう。書き方は、幅 / 高さ というように、スラッシュで区切って比率を値に指定します。例えば YouTube 動画でおなじみの 16:9 にしたい時は aspect-ratio: 16/9 、以下の例のように正方形にしたいときは aspect-ratio: 1/1 を記述します。画像や動画、 iframe などに使えます。

CSS

img {
  width: 100%;
  aspect-ratio: 1/1;
  object-fit: cover;
}

目次へ。

4. 新しいメディアクエリーの範囲指定方法

これまでのメディアクエリーと言えば min-widthmax-width などを使ってブレークポイントを指定していました。もちろん慣れればこれでも問題なく記述できるのですが、なんか直感的でないというか、わかりにくいような、不思議な書き方ですよね…?プログラミングをしている人なら、<<= といった記号(比較演算子)で記述できないものか…と考えた人も多いでしょう。

そして長い月日を経て、ようやく記号を使った記述ができるようになりました!例えばこれまで

CSS

@media (min-width: 400px) and (max-width: 799px) {
  body {
    background: #0bd;
  }
}

と記述していたところを

CSS

@media (400px <= width < 800px) {
  body {
    background: #0bd;
  }
}

のように記述できますよ!

↓ デモ画面右上の「EDIT ON CODEPEN」をクリックして、別タブで開いて幅を変えてご確認ください! ↓

目次へ。

5. 背面の要素をぼかす

指定した要素そのものに効果を加える filter というプロパティーがありますが、backdrop-filter を使えば、背面にある要素に効果を加えられます。グラスモーフィズムなデザインにする時には必須ですね。実は私のポートフォリオサイトのヘッダー部分にも使用しているので、確認してみてください!Safari 用には -webkit- ベンダープレフィックスをつけておきましょう!

CSS

.box {
  backdrop-filter: blur(8px);
  background-color: rgba(255, 255, 255, 0.5);
}

この例では blur()(ぼかし)を使っていますが、他にも種類あるのでいろいろ試してみてください!

  • blur() … ぼかし
  • brightness() … 明度
  • contrast() … コントラスト
  • drop-shadow() … 影
  • grayscale() … グレースケール
  • hue-rotate() … 色相回転
  • invert() … 階調
  • opacity() … 透過
  • saturate() … 彩度
  • sepia() … セピア

目次へ。

6. 要素を画面のど真ん中に固定表示

モーダルウィンドウやライトボックスの画像など、画面の上下左右真ん中に表示したい時は inset:0margin:auto を加えましょう。余計な計算は不要です!便利になりましたねー!ちなみに固定する必要はないときは、 position: absolute を使っても同じように要素のど真ん中に表示されます。

CSS

.heart {
  position: fixed;
  inset: 0;
  margin: auto;
  width: 100px;
  height: 100px;
  fill: #f99;
}

↓ デモ画面をスクロールしてみてね! ↓

目次へ。

7. 空の要素にスタイルをあてる

表にデータが記述されていない空のセルがある時や、事前にメッセージが入る要素だけ用意しておくときなど、空の要素を指定するには :empty 擬似クラスが使えます。 content で表示したい文字列や画像などを加えてもいいでしょう。その場合は ::before 疑似要素と組み合わせます。

CSS

td:empty {
  background: #eee;
}
td:empty::before {
  color: #ccc;
  content: "―";
}

目次へ。

8. 条件に合致しないセレクターにスタイルをあてる

:not() は列挙されたセレクターに一致しない要素を表す擬似クラスです。カッコ内に含めたくないセレクターを記述して除外でき、否定擬似クラスとも呼ばれています。

例えばあらかじめ画像にぼかしをかけておき、カーソルをあわせたときだけぼかしをなしにする場合、これまではこのように記述していました。

CSS

img {
  filter: blur(4px);
}
img:hover {
  filter: none;
}

しかし、 :not() を使えばこのようにスッキリ記述できます:

CSS

img:not(:hover) {
  filter: blur(4px);
}

目次へ。

9. スムーススクロールのジャンプ位置

ページ内リンクをクリックすると、リンク先へスルスルッと移動するスムーズスクロール。過去記事「【第 3 弾】少しのコードで実装可能な 15 の CSS 小技集」でも紹介しましたね!ただ、scroll-behavior: smooth を指定しただけだと、ジャンプしたエリアの位置が微妙にずれたり、上の要素と重なったりして使いづらかったのです…。そこで、 scroll-padding-top を指定して、ジャンプ先エリアの位置を調整しましょう!

CSS

html {
  scroll-behavior: smooth;
  scroll-padding-top: 4rem;
}

目次へ。

10. 動いている CSS アニメーションを止める

画像がカルーセルや自動スクロールなどで動く Web サイトも多いですよね。過去記事「懐かしの marquee?テキストを自動スクロールさせる方法と実装例」でも CSS で自動スクロールを表現する方法を紹介しました。しかし、場合によってはアニメーションを止めてコンテンツをしっかり見せたいこともあるでしょう。

そこで animation-play-state プロパティーを使って、カーソルをあわせたときにアニメーションを停止できるように設定してみましょう。値は running がアニメーション実行、 paused が停止です。

CSS

div {
  display: flex;
  animation: marquee 16s linear infinite alternate;
}
div:hover {
  animation-play-state: paused;
}

@keyframes marquee {
  0% {
    translate: 0;
  }
  100% {
    translate: -100%;
  }
}

↓ 動いている画像にカーソルを乗せて動きを止めてみましょう! ↓

少しのコードで実装可能な CSS 小技集 シリーズ

目次へ。