LoginSignup
4
4

IEのいなくなった今こそ…モダンブラウザで使える便利CSSまとめ

Last updated at Posted at 2023-11-15

便利なプロパティが使えるようになっているので、備忘録も兼ねてまとめておきます。

aspect-ratio

今まではpadding-top: 56.25%;position: absolute;などでアスペクト比に応じた切り抜きを表現してきましたが、aspect-ratioプロパティで簡単にできるようになりました。

.image {
    aspect-ratio: 16 / 9;
    object-fit: cover;
    width: 100%;
    height: auto;
}
16:9 1:1
スクリーンショット 2023-09-06 19.50.47.png スクリーンショット 2023-09-06 19.51.10.png

ブラウザサポート状況

margin-inline

水平方向の中央揃えをしたい時に、今まではmargin-left: auto; margin-right: auto;などと書いていたところをmargin-inlineプロパティ一つで書くことができます。

.box {
    margin-inline: auto;
}

Group 1.png

:thinking: margin-inlineとはなんぞや?

CSS の一括指定プロパティで、論理的なインライン方向の先頭と末尾のマージンを設定します。
https://developer.mozilla.org/ja/docs/Web/CSS/margin-inline

「論理的なインライン方向」とは、上下左右など物理的な値ではなく「字を書く方向」といった言語によって変わる向きのことです。
横書きのサイトであれば「論理的なインライン方向」とは水平方向のことです。
垂直方向はmargin-blockで指定することができます。
こちらの記事が非常にわかりやすいです!

ブラウザ対応状況

place-content

place-contentalign-contentjustify-contentのショートハンドです。
上下左右中央揃えにしたい時、今まではflexabsoluteなどを駆使していましたが、CSS Gridを使えば2行で書くことができます。

.box {
    display: grid;
    place-content: center;
}

Group 2.png

:thinking: place-content: center;place-items: center;の違いはなんぞや?

place-contentはコンテナ自体の揃えを、place-itemsはコンテナ内の要素の揃えを指定します。
Gridセル内の要素も中央揃えにしたい場合はplace-itemsを利用します。
見出しを中央揃えにしたい時などに、個別でtext-alignを指定したりする必要がなくなります。

place-content:center; place-items:center;
localhost_3000_ (4).png localhost_3000_ (5).png

ブラウザ対応状況

コンテナクエリ @container

今までレスポンシブに見た目を変えたい時は@mediaクエリを利用していました。
@containerクエリを使うことで、画面幅ではなくコンテンツの表示幅に応じて見た目を変えることができ、利便性がかなり高まりました!
コンポーネントベースでの開発をしている場合レスポンシブ対応が楽になりそうです。

width > 500pxの時 width < 500pxの時
スクリーンショット 2023-09-20 19.44.04.png スクリーンショット 2023-09-20 19.44.16.png
<a className="link">
  <article class="card">
    <img src="パス" class="image" />
    <h2 class="title">タイトル</h2>
    <p class="date">日付</p>
  </article>
</a>    
.link {
    container-type: inline-size;
}
.card {
    grid-template-columns: '1fr'
}

@container (500px < width) {
    .card {
        grid-template-columns: '120px 1fr'
    }
}

ブラウザ対応状況

svh

スマートフォンなど画面の高さが可変のブラウザでも「画面高さいっぱいに表示する」がCSSのみでできるようになりました!

.hero {
    height: 100svh;
}
vh svh
Group 3.png Group 4.png

ブラウザ対応状況

:where()

引数に受け取ったセレクタに当てはまる要素を選択できます。
whereの素晴らしい点は詳細度を0に保ってくれることです。例えば特定のクラス配下にスタイルを当てている時に上書きが難しい問題を解消できます。

<article>
  <h2>タイトル</h2>
  <section class="content">
    メインコンテンツの<a href="#">リンク</a>
  </section>
  <aside class="content">
    サイドコンテンツの<a href="#">リンク</a>
  </aside>
  <footer class="content">
    フッターの<a href="#">リンク</a>
  </footer>
</article>
今まで
.content a {
  color: orange;
}

/* 詳細度の問題で上書きできない… */
footer a {
  color: blue;
}
whereを使う
:where(.content) a {
  color: orange;
}

/* whereなら上書きができる! */
footer a {
  color: blue;
}
今まで whereを使う
スクリーンショット 2023-11-15 20.24.02.png スクリーンショット 2023-11-15 20.24.59.png

参考::where() - CSS: カスケーディングスタイルシート | MDN

ブラウザ対応状況

終わりに

何かの参考になれば幸いです!間違いがあればぜひご指摘ください!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4