[css3]CSS3は本当にSCSSに取って代わるのだろうか?
ウェブページをスタイリングするとき、私たちはプロジェクトでプレーンなCSSかSCSS(他の処理系も含む)のどちらかを選択することができます。SCSSは高度な機能と明確な構文のおかげで、CSSよりも使いやすいというのが多くの開発者の意見です。
今回は、SCSSの機能とCSSの機能向上について紹介したいと思います。また、実際のプロジェクトにおいて、CSSがSCSSの代替となり得るかどうかを評価します。
CSSの現在の機能
CSSはその誕生以来、長い道のりを歩んできました。近年のCSSの進化は、アニメーション領域でJavaScriptを使う必要性をも減らしています。最近のブラウザは、こうしたCSSアニメーションのパフォーマンスを高めるためにGPUを利用することさえあるのです。私たちは、少し勉強するだけで、CSSを使って複雑なレスポンシブ・グリッドレイアウトを構築できるようになりました。
今日のCSSには多くの新機能がありますが、この記事では、現代のWebアプリケーションでよく使われる新機能の一部のみを紹介します。
- あらゆるWebアプリケーションを構築する上で最も重要な部分の1つは、ページのレイアウトです。私たちの多くは、長年にわたって Bootstrap などの CSS フレームワークに依存してきましたが、CSS には、Grid、Subgrid、Flexbox など、レイアウトをネイティブに構築するための新しい機能が追加されています。Flexboxは開発者の間で人気がありますが、Gridレイアウトも追い上げてきています。
- 柔軟なテキストレイアウト
- TransitionとTransformを使えば、JavaScriptでアニメーションさせる必要はありません。
- プロパティや変数のカスタマイズ
SCSSの機能
SCSS は変数の使用をサポートします - 冗長なコードを避けることができます。
実際にスタイルシートの中でたくさんの色を再利用することができます。
color
や他の要素定義(例えば、フォント
font
). このように再利用可能なものをまとめて宣言するために、SCSSは変数機能を提供しています。これにより、色の値を一から書き直すのではなく、色のための変数名を使い、その変数名をプロジェクト内の他の場所で使用することができます。
例えば、次のような例です。
$black: #000000;
$primary-font: 'Ubuntu', 'Helvetica', sans-serif;
$unit: 1rem;
body {
color: $black;
font-family: $primary-font;
padding: #{$unit * 2};
}
CSSは変数やカスタムプロパティもサポートしており、CSSのカスタムプロパティは以下の通りです。
--black: #000000;
--width: 800px;
--primaryFont: 'Ubuntu', 'Helvetica', sans-serif;
body {
width: var(--width);
color: var(--black);
font-family: var(--primaryFont);
}
しかし、実行時にはCSSカスタムプロパティはSCSS変数よりも時間がかかる。
これは、ブラウザが実行時にプロパティを確認するためです。SCSSの場合はその逆で、CSSに変換された後、前処理の段階で変数をスルーしてしまうのです。その結果、SCSSでの変数の使用とコードの再利用は、CSSよりもパフォーマンスが高くなります。
SCSSはネストした構文が可能 - よりクリーンなソースコード
例えば、次のようなCSSコードのブロックがあったとします。
.header {
padding: 1rem;
border-bottom: 1px solid grey;
}
.header .nav {
list-style: none;
}
.header .nav li {
display: inline-flex;
}
.header .nav li a {
display: flex;
padding: 0.5rem;
color: red;
}
上記のコードは、子要素にスタイルを追加するために、同じ親要素を何度も宣言しなければならず、混乱しているように見えます。
しかし、SCSSのネストされた構文を使えば、もっとすっきりしたコードを書くことができるのです。上記のコードをSCSSで書くと、次のようになります。
.header {
padding: 1rem;
border-bottom: 1px solid grey;
.nav {
list-style: none;
li {
display: inline-flex;
a {
display: flex;
padding: 0.5rem;
color: red;
}
}
}
}
その結果、SCSSを使ったコンポーネントのデザインは、従来のCSSよりもエレガントでクリーンな印象を与えます。
エクステンド機能 -- 同じスタイルの繰り返しを避けよう
SCSSでは
@extend
を使用すると、異なるセレクタで同じ属性を共有することができます。そのため
@extend
は、以下のように使用します。
%unstyled-list {
list-style: none;
margin: 0;
padding: 0;
}
%unstyled-list
は、コードの繰り返しを避けるための構文上の糖であり、このリスト形式のテンプレートをさまざまな場所で、たとえば
.search-results {
@extend %unstyled-list;
}
.advertisements {
@extend %unstyled-list;
}
.dashboard {
@extend %unstyled-list;
}
繰り返すが,この定義が導入されるすべてのスタイルシートで再利用することができる。
SCSSには他にも関数、ミキシン、ループなど、フロントエンドの開発を効率化する機能がたくさんあります。
SCSSからCSSに切り替えた方が良いですか?
上記では、CSSで利用できる機能とSCSSで利用できる機能を探りました。しかし、CSSとSCSSを比較すると、CSSでは利用できない必須機能があることがわかります。
- Web アプリケーションが進化し、スタイルシートがより複雑で大規模になると、CSS のネスト機能によってコードの可読性が大幅に向上し、そのようなプロジェクトを容易に開発することができるようになります。しかし、執筆時点では、CSS はこの機能をサポートしていません。
-
CSSではフロー制御のルールを扱うことができません。SCSSは以下のようなルールをビルトインでサポートしています。
@if
,@else
或いは、@else
そして@each for
@while
をフロー制御のルールとして使用します。プログラマーとして、この機能はスタイルを定義するのに非常に便利だと感じています。また、より少ないコードですっきりとしたコードを書くことができるようになりました。 -
また、SCSSでは数値演算子の標準セットをサポートしていますが、CSSの場合は
calc()
SCSSの数値演算は、その互換性のある単位間で自動的に変換することもできます。
しかし.
calc()
このCSS関数は、除算の場合は除数が数字でなければならない、乗算の場合は引数のうち少なくとも1つが数字でなければならない、といった制約がほとんどないのが特徴です。
- もうひとつ重要なのは、SCSSのキラーフィーチャーであるスタイルの再利用です。SCSSは、組み込みモジュール、マッピング、ループ、変数など、この分野で多くの機能を提供しています。
だから、CSSの新機能がいろいろ出てきても、SCSSに軍配が上がるのだと思います。以下のコメント欄で、あなたの考えを聞かせてください。
CSS3が本当にSCSSに取って代わるのかについての記事は以上です。CSS3がSCSSに取って代わることについての詳細は、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。
関連
-
[CSSチュートリアル】 css border add four corners コード
-
[CSSチュートリアル】resizeで画像のプレビューを切り替える方法
-
[css3]ピュアCSS3によるネオンライト効果
-
[CSSチュートリアル】CSSでemを開く正しい方法 詳細へ
-
[CSSチュートリアル】CSSで実現できるのなら、わざわざJavaScriptを使う必要はない
-
[CSSチュートリアル】CSSでマウスの位置をマッピングし、マウスの動きでページ要素を制御する効果を実現する(コード例)
-
[CSSチュートリアル]モバイルにおけるviewportの具体的な使い方
-
[CSSチュートリアル】大きな画像や情報を小さなドロップダウンで実現するCSS
-
[CSSチュートリアル]cssに0.5pxの行を実装してモバイル互換の問題を解決する(推奨)
-
[CSSレイアウト例】6種類の適応的な2カラムレイアウトを実現するCSS
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】よくある2D変換を5つ実現するCSS
-
[CSS3] CSS3リスト無限スクロール/回転効果
-
[css3]css3は、3つの方法のサンプルコードのテキストの点滅効果を達成するために
-
[Div+CSSチュートリアル】divの背景を透明にする設定例
-
[CSSチュートリアル】ピュアCSSで実装した通知バーの3種類のスクロール効果
-
[CSSチュートリアル】CSSで実現するTikTokのテキストジッター効果例
-
[CSSチュートリアル】擬似要素で実現する中空三角矢印とXアイコンの例
-
[CSSチュートリアル】インタビュー必見!聖杯レイアウトとダブルウィングレイアウトの違いとは?
-
[CSSチュートリアル】CSSプリグラミング言語と詳細解説の違いについて
-
[css3]CSS3アニメーションによるグラフィックドロップ効果