ホームページ >ウェブフロントエンド >CSSチュートリアル >地図から始めてこの SCSS プロジェクトをどのように組織化するか
自分の製品である LiveAPI のドキュメントに取り組んでいるとき、私は MkDocs を使い始めました。MkDocs は、クリーンでプロフェッショナルなドキュメントを作成する静的サイト ジェネレーターです。
しかし、そのデザインが少し単調だと感じたので、いくつかのカスタマイズを行うためにプロジェクトを調査することにしました。
この旅は、私をそのアーキテクチャの興味深い部分である Sass マップに導きました。
何気ない変更として始まったものが、このプロジェクトの背後にある思慮深いデザインに対するより深い評価へと変わりました。
このブログでは、Sass マップが MkDocs のマテリアル テーマ、特にそのミックスインでどのように使用されているか、またそれらがデザイン システムの柔軟性とスケーラビリティにどのように貢献しているかを探っていきます。飛び込んでみましょう!
Sass マップは Sass のキーと値のデータ構造で、Python の辞書や JavaScript のオブジェクトに似ています。
これらを使用すると、関連データをコンパクトに保存し、値を動的に取得できます。
MkDocs マテリアル テーマでは、レスポンシブ デザインのデバイス固有のブレークポイントを定義するために Sass マップが使用されます。例:
@use "sass:map"; @use "sass:list"; @use "sass:math"; $break-devices: ( mobile: ( portrait: 220px 479px, landscape: 480px 719px, ), tablet: ( portrait: 720px 959px, landscape: 960px 1219px, ), screen: ( small: 1220px 1599px, large: 1600px 1999px, ), ) !default;
このマップは、ブレークポイントをカテゴリ (モバイル、タブレット、画面) とサブカテゴリ (縦、横、小、中、大) に分類します。
これは単なる静的な定義ではなく、応答動作が動的に生成される方法のバックボーンです。
テーマは、一連の関数とミックスインを使用して、$break-devices マップからデータを抽出して利用します。内訳は次のとおりです:
break-select-device 関数は、マップを走査して関連するデバイス カテゴリを見つけ、関連付けられたブレークポイントを取得します。
複数のレベルが指定されている場合 (モバイルポートレートなど)、階層がさらに深く掘り下げられます。
@function break-select-device($device) { $current: $break-devices; @for $n from 1 through length($device) { @if type-of($current) == map { $current: map.get($current, list.nth($device, $n)); } @else { @error "Invalid device map: #{$devices}"; } } @return $current; }
SCSS では、ミックスインは、一度定義するとスタイルシート全体で使用できる再利用可能なコード ブロックです。
コードを繰り返さずにスタイルやロジックを複数回含めることができるため、コードを DRY (繰り返さない) に保つことができます。
たとえば、一連のスタイルを繰り返し適用する必要がある場合は、ミックスインを作成し、必要なときにそれを再利用できます。
ブレークフロムデバイスおよびブレークトゥデバイスミックスインは、この機能を利用してメディアクエリを動的に生成します。例:
@use "sass:map"; @use "sass:list"; @use "sass:math"; $break-devices: ( mobile: ( portrait: 220px 479px, landscape: 480px 719px, ), tablet: ( portrait: 720px 959px, landscape: 960px 1219px, ), screen: ( small: 1220px 1599px, large: 1600px 1999px, ), ) !default;
このミックスインは、マップで指定された最小幅のスタイルを適用します。同様のアプローチが、最大幅をターゲットとするブレークトゥデバイス ミックスインにも使用されます。
ブレークフロムデバイスミックスインとブレークトゥデバイスミックスインの威力を確認するために、それらを使用してレスポンシブスタイルを動的に実装する方法の実践例を見てみましょう。
デフォルトでは、ミックスインを必要とせずに小さな画面でも適切に機能するグリッド レイアウトを使用してモバイル画面にスタイルを適用します。例:
@function break-select-device($device) { $current: $break-devices; @for $n from 1 through length($device) { @if type-of($current) == map { $current: map.get($current, list.nth($device, $n)); } @else { @error "Invalid device map: #{$devices}"; } } @return $current; }
この場合、レイアウトはすでにモバイルデバイス用に最適化されています。基本スタイルはデフォルトでモバイル ユーザーに対応しています。
大きな画面の応答性を高めるために、ブレークフロムデバイス ミックスインを使用して特定のブレークポイントをターゲットにすることができます。
横長のブレークポイントまでのタブレットなどの小さな画面では、画面スペースが限られているため、サイドバーなどの特定の要素がうまく収まらない場合があります。
そのような場合、サイドバーを非表示にし、メインコンテンツを優先するために左からのポップオーバーとして表示することができます。例:
@mixin break-from-device($device) { @if type-of($device) == string { $device: $device; } @if type-of($device) == list { $breakpoint: break-select-device($device); $min: list.nth($breakpoint, 1); @media screen and (min-width: $min) { @content; } } @else { @error "Invalid device: #{$device}"; } } @mixin break-to-device($device) { @if type-of($device) == string { $device: $device; } @if type-of($device) == list { $breakpoint: break-select-device($device); $max: list.nth($breakpoint, 2); @media screen and (max-width: $max) { @content; } } @else { @error "Invalid device: #{$device}"; } }
.grid { display: grid; gap: 16px; grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */ }
タブレットの横長ブレークポイントより大きいデバイスでは、より多くの画面スペースが利用できるため、コンテンツ配信を改善するために 2 列レイアウトを導入できます。これは、break-from-device mixin を使用して実現できます:
@include break-to-device(tablet landscape) { .sidebar { display: none; } }
@media screen and (max-width: 1219px) { .sidebar { display: none; } }
画面サイズが大きくなると、コンテンツを表示するために利用できるスペースが増えます。
デスクトップの場合、ブレークフロムデバイス ミックスインを使用して、画面サイズに応じて 3 つまたは 4 つの列を作成するようにグリッド レイアウトを調整できます。
画面サイズが 3 列を収容できるほど大きい場合、次のスタイルが適用されます。
@use "sass:map"; @use "sass:list"; @use "sass:math"; $break-devices: ( mobile: ( portrait: 220px 479px, landscape: 480px 719px, ), tablet: ( portrait: 720px 959px, landscape: 960px 1219px, ), screen: ( small: 1220px 1599px, large: 1600px 1999px, ), ) !default;
@function break-select-device($device) { $current: $break-devices; @for $n from 1 through length($device) { @if type-of($current) == map { $current: map.get($current, list.nth($device, $n)); } @else { @error "Invalid device map: #{$devices}"; } } @return $current; }
さらに大きな画面の場合は、4 つの列を作成して画面の領域を最大限に活用できます。
@mixin break-from-device($device) { @if type-of($device) == string { $device: $device; } @if type-of($device) == list { $breakpoint: break-select-device($device); $min: list.nth($breakpoint, 1); @media screen and (min-width: $min) { @content; } } @else { @error "Invalid device: #{$device}"; } } @mixin break-to-device($device) { @if type-of($device) == string { $device: $device; } @if type-of($device) == list { $breakpoint: break-select-device($device); $max: list.nth($breakpoint, 2); @media screen and (max-width: $max) { @content; } } @else { @error "Invalid device: #{$device}"; } }
.grid { display: grid; gap: 16px; grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */ }
この設計は、拡張性と保守性を優先するという作成者の意図を示しています。
ブレークポイントを単一の信頼できる情報源に抽象化し、メディア クエリにミックスインを使用することで、次のようなシステムを作成しました。
MkDocs マテリアルを探索することで、フロントエンド アーキテクチャにおける思慮深い設計に対する理解が深まりました。
Sass マップ、ミックスイン、階層データ構造の使用は、保守可能でスケーラブルなデザイン システムのマスタークラスです。
独自のレスポンシブ スタイルを作成または改善したい場合は、同様の手法を採用することを検討してください。
プロジェクトで Sass マップを使用したことはありますか?あなたの経験や洞察をぜひお聞かせください!
デザインの世界をさらに深く掘り下げてみませんか?他のブログ投稿もチェックしてください:
開発、IT、運用、デザイン、リーダーシップなどに関する洞察を毎週購読してください。
以上が地図から始めてこの SCSS プロジェクトをどのように組織化するかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。