Facebook が、何百万ものデバイスで完璧に動作する、これほどスムーズで応答性の高いインターフェイスをどのようにして作成しているのか疑問に思ったことはありませんか?彼らの技術スタックは複雑ですが、最も印象的な UI 機能の多くは、目立たないように巧妙な CSS テクニックに依存しています。 Facebook の開発者がプラットフォームを構築するために活用している隠れた宝石のいくつかを見てみましょう。
Facebook の最大の課題の 1 つは、ブラウザのパフォーマンスを低下させることなく、何千もの投稿、コメント、インタラクションをレンダリングすることです。彼らの秘密兵器?コンテンツ可視性プロパティ:
.feed-post { content-visibility: auto; contain-intrinsic-size: 0 400px; }
この一見単純な宣言は、ブラウザーにオフスクリーン コンテンツのレンダリングをスキップするよう指示し、最初のページ読み込み時間を大幅に短縮します。 contains-intrinsic-size は推定の高さを提供し、ユーザーがスクロールするときにレイアウトが移動するのを防ぎます。 Facebook がこの技術を導入したことにより、重いフィード後のレンダリング時間が最大 50% 短縮されたと報告されています。
Facebook のタイポグラフィは、さまざまなウェイトやサイズにわたって一貫して洗練されているように見えますが、複数のフォント ファイルは読み込まれていません。代わりに、カスタム プロパティを持つ可変フォントを使用します:
:root { --fb-font-weight: 400; --fb-font-stretch: 100%; } .dynamic-text { font-variation-settings: 'wght' var(--fb-font-weight), 'wdth' var(--fb-font-stretch); transition: font-variation-settings 0.3s ease; } .dynamic-text:hover { --fb-font-weight: 600; }
このアプローチにより、バンドルのサイズを小さく保ちながら、フォントのウェイトと幅の間でスムーズなアニメーションが可能になります。それは、リアクションアニメーションとコメント強調効果で特に顕著です。
Facebook の UI コンポーネントは、小さなモバイル画面から超ワイド モニターまで、どこでも動作する必要があります。彼らの解決策は?コンテナクエリ:
.post-card { container-type: inline-size; container-name: post; } @container post (min-width: 700px) { .post-content { display: grid; grid-template-columns: 2fr 1fr; gap: 1rem; } } @container post (max-width: 699px) { .post-content { display: flex; flex-direction: column; } }
これにより、コンポーネントはビューポートではなく親コンテナのサイズに応答できるようになり、メイン フィード、モーダル、サイドバーなど、あらゆるコンテキストで機能する真のモジュール式デザインが可能になります。
Facebook のストーリーとカルーセル コンテンツがいかにスムーズに所定の位置に収まるかに気づいたことがありますか?彼らは、いくつかの追加のトリックを使用してスクロール スナップの位置合わせを使用します。
.story-container { scroll-snap-type: x mandatory; scrollbar-width: none; /* Hide scrollbar in Firefox */ -ms-overflow-style: none; /* Hide scrollbar in IE/Edge */ } .story-container::-webkit-scrollbar { display: none; /* Hide scrollbar in Chrome/Safari */ } .story-item { scroll-snap-align: start; scroll-snap-stop: always; flex: 0 0 auto; }
これをタッチ ジェスチャ処理と組み合わせることで魔法が生まれます。
.story-container { overscroll-behavior-x: contain; touch-action: pan-x pinch-zoom; }
これにより、ブラウザーであっても、ストーリーをスクロールするときに完璧なアプリのような感覚が生まれます。
Facebook は、アニメーション要素用の新しいスタッキング コンテキストを作成することで、GPU アクセラレーションを戦略的に使用しています。
.animated-element { transform: translateZ(0); will-change: transform; backface-visibility: hidden; }
ただし、これらのプロパティは必要な場合にのみ適用するように注意しています。
.animated-element { @media (prefers-reduced-motion: no-preference) { transform: translateZ(0); will-change: transform; } }
これにより、ユーザーの好みとデバイスの機能を尊重しながら、スムーズなアニメーションが保証されます。
Facebook のダーク モードの実装は、HSL カラーを使用した CSS カスタム プロパティを使用することで、特に賢明です。
.feed-post { content-visibility: auto; contain-intrinsic-size: 0 400px; }
このアプローチにより、コントラスト比を維持しながら、動的な不透明度の調整とテーマ間のスムーズな移行が可能になります。
メディアを多用したコンテンツの場合、Facebook は最新の CSS を使用してレイアウトを変更せずにアスペクト比を維持します。
:root { --fb-font-weight: 400; --fb-font-stretch: 100%; } .dynamic-text { font-variation-settings: 'wght' var(--fb-font-weight), 'wdth' var(--fb-font-stretch); transition: font-variation-settings 0.3s ease; } .dynamic-text:hover { --fb-font-weight: 600; }
この進歩的な拡張アプローチにより、古いブラウザに適切にフォールバックしながら、すべてのブラウザで一貫したレイアウトが保証されます。
これらのテクニックは単独では単純に見えるかもしれませんが、その真の力は Facebook がそれらをどのように組み合わせて戦略的に適用するかによって生まれます。重要なポイントは次のとおりです:
これらのテクニックは、パフォーマンスの監視を適切に行い、慎重に使用した場合に最も効果的であることに注意してください。 Facebook の成功は、これらの CSS 機能を使用するだけではなく、最大の効果を得るためにいつ、どこに適用するかを正確に知っていることからもたらされます。
以上がFacebook 開発者が実際に使用している隠れた CSS トリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。