【コーディング】2026年、今旬の実装テクニック4選

デザオ
最近のコーディングって何か変わってきてます?
デザコト
jQueryでやってたことがCSSだけでできるようになったりしてますよー。今旬のを4つ紹介しますね

ここ数年で、CSSだけでできることがぐっと増えました。今までjQueryやJavaScriptに頼っていた実装が、CSSのプロパティひとつで済んでしまうことも。今回は125naroomで最近気になっている、旬なコーディング技術を4つ紹介します。

:has() ── 親を選べるセレクタ

今まで「子要素の状態によって親要素の見た目を変える」のはJavaScriptの仕事でした。:has()を使うと、CSSだけで「〇〇を含む要素」を選べます。

/* 画像がある見出しだけ余白を広げる */
h2:has(img) {
  margin-bottom: 40px;
}

/* チェックボックスがオンになったカードの枠線を変える */
.card:has(input:checked) {
  border-color: #E4DE49;
}

「チェックが入ったら親のスタイルを変える」みたいな、今までjQueryで書いていた処理がCSS一行で済むのは地味に嬉しいポイントです。

コードを見る(HTML・CSS)

HTML

<div class="cardList">
  <div class="card">
    <div class="thumb"></div>
    <p>デザインのメモ</p>
    <label><input type="checkbox"> あとで読む</label>
  </div>
  <div class="card">
    <div class="thumb"></div>
    <p>実装サンプル集</p>
    <label><input type="checkbox" checked> あとで読む</label>
  </div>
</div>

CSS

/* ===== 見本の箱(動きが分かりやすいように付けた見た目。なくても動きます) ===== */
.cardList {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
  max-width: 560px;
  margin: 24px auto 0;
}
.card .thumb { height: 96px; border-radius: 4px; background: #f3efe6; }
.card p { margin: 12px 0; font-weight: 700; }
.card label { display: flex; align-items: center; gap: 8px; font-size: 14px; cursor: pointer; }
.card input { width: 18px; height: 18px; accent-color: #2b2a27; }

/* ===== :has() ── チェックが入ったカードだけ、枠の色を変える ===== */
.card {
  padding: 16px;
  border: 2px solid #e8e3d8;
  border-radius: 8px;
  background: #fff;
  transition: border-color .3s;
}
.card:has(input:checked) {
  border-color: #e8dc6a;
}

@media (prefers-reduced-motion: reduce) {
  .card { transition: none; }
}

コンテナクエリ ── 画面幅じゃなく「親の幅」で切り替える

メディアクエリは「画面の幅」で切り替わりますが、コンテナクエリは「親要素の幅」で切り替わります。同じカードパーツでも、置く場所によって幅が違う、というときに便利です。

.card-area {
  container-type: inline-size;
  container-name: card-area;
}

@container card-area (min-width: 400px) {
  .card {
    display: flex;
  }
}

サイドバーに置いたら縦並び、メインエリアに置いたら横並び、みたいな「置き場所によって形が変わるパーツ」を作りたいときに、コンテナクエリだと綺麗に解決できます。

コードを見る(HTML・CSS)

HTML

<div class="layout">
  <section class="card-area">
    <h2>sidebar</h2>
    <div class="card"><div class="thumb"></div><p>同じカード</p></div>
  </section>
  <section class="card-area">
    <h2>main</h2>
    <div class="card"><div class="thumb"></div><p>同じカード</p></div>
  </section>
</div>

CSS

/* ===== 見本の箱(動きが分かりやすいように付けた見た目。なくても動きます) ===== */
.layout {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 16px;
  margin-top: 24px;
}
.layout > section { padding: 12px; border: 1px dashed #e8e3d8; border-radius: 8px; }
.layout h2 { margin: 0 0 8px; font: 500 11px/1 "Jost", sans-serif; letter-spacing: .18em; color: #6b675f; }
.card { gap: 12px; padding: 12px; border: 1px solid #e8e3d8; border-radius: 8px; background: #fff; }
.card .thumb { flex: none; min-width: 140px; height: 88px; border-radius: 4px; background: #f3efe6; }
.card p { margin: 0; font-size: 14px; font-weight: 700; }
@media (max-width: 600px) {
  .layout { grid-template-columns: 1fr; }
}

/* ===== コンテナクエリ ── 親の幅が 400px 以上なら横ならび ===== */
.card-area {
  container-type: inline-size;
  container-name: card-area;
}
.card {
  display: grid;
}
@container card-area (min-width: 400px) {
  .card {
    display: flex;
  }
}

スクロール連動アニメーション ── JSなしで「ふわっと表示」

125naroomでも紹介しているinview.jsのような「スクロールして画面に入ったらふわっと表示」の動き、実はCSSのanimation-timeline: view()だけでも作れるようになりました。

.fade-in {
  animation: fadeIn linear both;
  animation-timeline: view();
  animation-range: entry 0% cover 30%;
}

@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

スクロールイベントを監視するJavaScriptがいらないので、パフォーマンス的にも気持ちがいいです。ただ、対応ブラウザはここ数年で増えてきたところなので、使う前に主要ブラウザでの表示は確認しておくと安心です。

コードを見る(HTML・CSS)

HTML

<div class="section">
  <div class="imgBox fade-in">
    <img src="https://125naroom.com/demo/common/img/slide01.svg" alt="">
  </div>
  <div class="imgBox fade-in">
    <img src="https://125naroom.com/demo/common/img/slide03.svg" alt="">
  </div>
  <div class="txtBox fade-in">
    <p>ふわっと</p>
  </div>
</div>

CSS

/* ===== 見本の箱(動きが分かりやすいように付けた見た目。なくても動きます) ===== */
.section {
  display: flex;
  flex-direction: column;
  gap: 40px;
  max-width: 560px;
  margin: 0 auto;
  padding: 0 24px;
}
.imgBox img { width: 100%; height: auto; border-radius: 4px; }
.txtBox p {
  margin: 0;
  padding: 32px 0;
  border-top: 1px solid #e8e3d8;
  border-bottom: 1px solid #e8e3d8;
  font-size: 28px;
  font-weight: 700;
  text-align: center;
}
.note { max-width: 560px; margin: 0 auto 24px; padding: 0 24px; font-size: 12px; color: #6b675f; display: none; }
@supports not (animation-timeline: view()) {
  .note { display: block; }
}

/* ===== スクロール連動アニメーション ── JS なしで「ふわっと表示」 ===== */
.fade-in {
  animation: fadeIn linear both;
  animation-timeline: view();
  animation-range: entry 0% cover 30%;
}
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .fade-in { animation: none; }
}

AIコーディングアシスタント ── コーディングの相棒が変わってきた

技術というより「作り方」の変化ですが、Claude CodeのようなAIコーディングアシスタントを実装作業に組み込むのが、今かなり旬です。125naroomでも実際に「Coding Toolkit」として使ってみた記録を別記事で紹介しています。

コードを書くだけじゃなく、サーバーにSSHして本番の確認をしたり、GA4のデータを取りに行ったり。ちょっとした雑用ごと相談できる相棒がいる、という感覚に近いかもしれません。

さいごに

「今までJSでやっていたことがCSSだけでできる」という流れが、ここ数年でどんどん進んでいる印象です。とはいえ古いブラウザ対応が必要な現場もあるので、jQueryの実装サンプルたちも125naroomでは引き続き残していきます。新旧どちらも知っておくと、選択肢が広がって楽になりますね。

デザオ
CSSだけでできることが増えましたねー
デザコト
でも古いブラウザのことも忘れずにー

ふたりの小言

デザコトauthor

あ、いいな、と思うWebデザインを紹介しています。デザインの参考に。やさしいデザインが多いです。Webデザインギャラリー『デザインのこと - Web design gallery』を運営しています。