Interactive Fluid Typography

2025/12/19 4:56

Interactive Fluid Typography

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

要点をまとめると:

要約

フルイドタイポグラフィは、フォントサイズや行高をハードコーディングされたブレークポイントではなくビューポート幅に結び付けることで、デザイナーがテキストをデバイス全体でスムーズに拡大縮小できるようにします。この記事は CSS のみでこれを実装する方法を示しています:

  1. 基本比率アプローチ – 基準スクリーンサイズ(
    --base-screen-size:1200
    )と基準フォントサイズ(
    --base-font-size:16
    )を定義します。比率は
    100vw / var(--base-screen-size)
    として計算し、
    calc()
    で使用します:
    .font-size-base { font-size: calc(var(--base-font-size) * 100vw / var(--base-screen-size)); }
    
  2. 境界制御のための clamp – フォントが無限に拡大・縮小しないよう、計算を
    clamp()
    で包みます。最小値と最大値(
    --base-font-size-min
    ,
    --base-font-size-max
    )を設定します。
  3. 小画面比率 – 狭いビューポートでは別の比率が必要になる場合があります。この場合もブレークポイントや高度なスケールを使用できます。
  4. Andy Bell の Utopia – 「Complete CSS」は、各ビューポート範囲ごとに異なる比率(
    --step-0
    ,
    --step-1
    , …)でフルイドスケールを生成します。記事はこれを証明されたアプローチとして参照しています。
  5. Typed arithmetic (Chrome 140) – 単位なしの数値や
    calc(10em / 1px)
    のような式により、CSS 内で動的に比率調整が可能になり、ブラウザ間の互換性が向上します。
  6. ダイナミックスケーリング変数 – 新しいヘルパー(
    --screen-normalizer
    ,
    --fluid-base-size
    ,
    --fluid-step
    )は二つの境界値間で正規化された値を計算し、小さい基準サイズと大きい基準サイズまたは比率の間でフルイドに遷移できるようにします:
    --screen-normalizer: clamp(0, (100vw - var(--lower-bound)) / (var(--upper-bound) - var(--lower-bound)), 1);
    --fluid-base-size: calc(var(--base-font-size-small) + (var(--base-font-size-large) - var(--base-font-size-small)) * var(--screen-normalizer));
    
  7. 将来の CSS 数学関数
    --fluid-scaler()
    --fluid-size()
    の提案が完全にサポートされれば(例:
    pow()
    など)、これらの計算はさらに簡素化されます。

これらのテクニックを使用することで、デザイナーはメディアクエリの数を減らし、CSS の保守コストを低減し、携帯電話・タブレット・デスクトップ全体でよりスムーズなタイポグラフィ体験を提供できます。

本文

フルイド・タイポグラフィの概要

フルイド・タイポグラフィは、CSS のテクニックを使って文字サイズとリーディング(行間)を画面サイズに応じて滑らかに変化させる手法です。フォントサイズが固定ブレークポイントで急激にジャンプするのではなく、異なる画面幅の間でスムーズな遷移を実現し、ブレークポイント付近の「盲点」や不均衡を解消します。


1. 基本的な実装

/* ベース値 – vw を使った計算では単位なし数値が便利 */
:root {
  --base-screen-size: 1200;   /* 参考となる基準画面幅(px) */
  --base-font-size:    16;    /* 基準フォントサイズ(px) */
  --typographic-ratio: 1.618; /* フォントサイズを増減させる比率(黄金比など) */
}

.font-size-base { /* ベースサイズ。ビューポート幅に線形でスケール */
  font-size: calc(
    var(--base-font-size) * (100vw / var(--base-screen-size))
  );
}

.font-size-md {
  font-size: calc(var(--font-size-base) * var(--typographic-ratio));
}

.font-size-lg {
  font-size: calc(var(--font-size-md) * var(--typographic-ratio));
}

結果: テキストはベースサイズである 16 px から始まり、ビューポート幅に応じて線形に拡大・縮小します。
欠点: サイズが無限に変わり続けるため、メディアクエリや clamp() で上限下限を設ける必要があります。


2.
clamp()
を使って境界を設定

:root {
  --base-screen-size: 1200;

  --base-font-size-min: 14;
  --base-font-size:    15;
  --base-font-size-max:16;

  --typographic-ratio: 1.618;
}

.font-size-base {
  font-size: clamp(
    calc(1px * var(--base-font-size-min)),
    calc(var(--base-font-size) * 100vw / var(--base-screen-size)),
    calc(1px * var(--base-font-size-max))
  );
}

.font-size-md { font-size: calc(var(--font-size-base) * var(--typographic-ratio)); }
.font-size-lg { font-size: calc(var(--font-size-md) * var(--typographic-ratio)); }

メリット: 最小・最大サイズを固定しつつ、間はフルイドに保てます。
制限点: フォント比率がすべてのビューポートで同じになるため、小さい画面ではよりタイトな比率が必要となる場合があります。


3. フルイドスケールジェネレーター(Utopia)

/* Utopia が生成したステップ – clamp() で min・mid・max を設定 */
:root {
  --step-0: clamp(0.875rem, 0.8125rem + 0.25vw, 1rem);   /* ベース   */
  --step-1: clamp(1.2373rem, 1.0469rem + 0.7615vw, 1.618rem); /* ミディアム */
  --step-2: clamp(1.7495rem, 1.3152rem + 1.7369vw, 2.6179rem); /* ラージ   */
}

.font-size-base { font-size: var(--step-0); }
.font-size-md   { font-size: var(--step-1); }
.font-size-lg   { font-size: var(--step-2); }

長所:

  • 各ステップごとに min/max が別々に設定される。
  • rem
    を使用しており、アクセシビリティのベストプラクティスに沿っている。

短所:

  • 値がハードコーディングされているため、変更したい場合は Utopia で再生成する必要があります。

4. Typed Arithmetic – 動的比率

Chrome 140 の Typed Arithmetic を利用すると、ビューポート幅に応じて比率を計算できます。

:root {
  /* 基準フォントサイズ */
  --base-font-size-small: 14px;
  --base-font-size-large: 16px;

  /* 比率の下限・上限 */
  --lower-ratio: 1.414;   /* 例:小さい画面で √2 を使用 */
  --upper-ratio: 1.618;   /* 大きい画面で黄金比を使用 */

  /* 画面幅の境界値 */
  --lower-bound: 400px;
  --upper-bound: 1200px;

  /* 正規化:画面幅が下限から上限まで 0 → 1 にマップされる */
  --screen-normalizer: clamp(
    0,
    (100vw - var(--lower-bound)) / (var(--upper-bound) - var(--lower-bound)),
    1
  );

  /* ベースフォントサイズを小さい値と大きい値の間で線形補間 */
  --fluid-base-size: calc(
    var(--base-font-size-small) +
    (var(--base-font-size-large) - var(--base-font-size-small))
      * var(--screen-normalizer)
  );

  /* フォント比率を下限と上限の間で線形補間 */
  --fluid-step: calc(
    var(--lower-ratio) +
    (var(--upper-ratio) - var(--lower-ratio)) * var(--screen-normalizer)
  );
}

.font-size-base { font-size: var(--fluid-base-size); }
.font-size-md   { font-size: calc(var(--font-size-base) * var(--fluid-step)); }
.font-size-lg   { font-size: calc(var(--font-size-md) * var(--fluid-step)); }

利点:

  • フォント比率とベースサイズがリアルタイムで変化し、完全に動的です。
  • clamp() のようなハードコードされた値は不要です。

5. 半ステップサイズ(オプション)

/* フルイドステップの平方根を計算して半ステップを作成 */
:root {
  --fluid-step-half: pow(var(--fluid-step), 0.5);
}

.font-size-sm   { font-size: calc(var(--fluid-base-size) / var(--fluid-step-half)); }
.font-size-demi { font-size: calc(var(--fluid-base-size) * var(--fluid-step-half)); }

使い方: 手動で計算することなく、すばやく「半ステップ」サイズを生成できます。


6. 非対応ブラウザ向けフォールバック

/* Utopia の clamp 値をフォールバックとして使用 */
@supports not (transform: scale(calc(1px / 1px))) {
  :root {
    --step-0: clamp(0.875rem, 0.8333rem + 0.2222vw, 1rem);
  }

  .font-size-base { font-size: var(--step-0); }
}

/* Typed Arithmetic がサポートされている場合 */
@supports (transform: scale(calc(1px / 1px))) {
  :root {
    /* 上記と同じ --fluid-base-size などの定義を追加 */
  }

  .font-size-base { font-size: var(--fluid-base-size); }
}

7. 将来 – カスタム CSS 関数

完全なサポートが到達すれば、カスタム関数でさらに簡素化できます。

@function --fluid-scaler(--small-measure, --large-measure) {
  result: calc(
    --small-measure +
    ( --large-measure - --small-measure ) * var(--screen-normalizer)
  );
}

--fluid-base-size: --fluid-scaler(var(--base-font-size-small), var(--base-font-size-large));
--fluid-step      : --fluid-scaler(var(--lower-ratio),     var(--upper-ratio));

@function --fluid-size(--step) {
  result: calc(
    var(--fluid-base-size) *
    pow(var(--fluid-step), var(--step))
  );
}

.font-size-base { font-size: --fluid-size(1); }
.font-size-md   { font-size: --fluid-size(2); }

結果:

--fluid-size(n)
を一度呼び出すだけで、フォントサイズやスペーシングの n 番目のステップを取得できます。


まとめ

  • clamp() は境界を設定しつつ静的に動作します。
  • Typed Arithmetic により、比率がビューポート幅に応じて変化し、真にフルイドなタイポグラフィが実現できます。
  • まだ Typed Arithmetic がサポートされていないブラウザには、clamp() のフォールバックを用意しておくと安全です。

コンソールで変数を試すことで、デザインシステムを即座にプロトタイピングし、微調整できます。

同じ日のほかのニュース

一覧に戻る →

2025/12/19 4:08

We pwned X, Vercel, Cursor, and Discord through a supply-chain attack

## Japanese Translation: Discordの新しいドキュメントプラットフォーム、Mintlifyにおいて、`/_mintlify/_static/[subdomain]/[…route]` エンドポイントを介して配信される任意の静的ファイルに悪意あるJavaScriptを注入できるクロスサイトスクリプティング(XSS)脆弱性が判明しました。16歳の高校生研究者は、Discord のドメインを指すSVG内にコードを埋め込み、そのリンクを開いた際にスクリプトが実行されることで、このサプライチェーン脆弱性を検証し、Mintlify の全顧客に影響する可能性があることを示しました。この欠陥は「xyzeva」という友人によって独立して確認され、両者は協力してテストと開示を行いました。報告後、Discord はドキュメントの公開を2時間停止し、以前のプラットフォームに戻し、すべての Mintlify ルートを削除(インシデントリンク: https://discordstatus.com/incidents/by04x5gnnng3)し、Mintlify は Slack を通じて問題を修正しました。研究者たちは合計で約11,000ドルの報奨金(Discordから4,000ドル、残りは Mintlify から)を受け取りました。この事例は、Twitter (X)、Vercel、Cursor、Discord 自体など多くのハイプロファイルユーザーに脅威を与える可能性がある単一のサードパーティコンポーネントのリスクを浮き彫りにし、外部サービスへのより厳格な検証と広範なセキュリティ監査の必要性を強調しています。

2025/12/17 6:04

Texas is suing all of the big TV makers for spying on what you watch

## Japanese Translation: > **概要:** > テキサス州司法長官ケン・パクストンは火曜日にソニー、サムスン、LG、ヒセン、TCL を対象に訴訟を提起し、同社のテレビが自動コンテンツ認識(ACR)を使用して視聴者の視聴内容を秘密裏に記録していると主張した。ACR はテレビ番組、ストリーミングサービス、YouTube、セキュリティカメラ、Apple AirPlay/Google Cast、および HDMI 接続デバイスなど、多岐にわたるソースから視聴覚データを取得し、訴訟ではメーカーがユーザーに対して隠れたまたは曖昧な開示で ACR の起動を促すと主張されている。サムスンとヒセンは 500 ミリ秒ごとにスクリーンショットを取得し、パクストンはデータがユーザーの知識なしに各社へ送信され、ターゲティング広告のために販売されると述べている。訴訟はテキサス州詐欺取引慣行法(Deceptive Trade Practices Act)を引用し、民事罰金およびテキサス州居住者からの ACR データ収集・共有・販売の停止を求めている。パクストンはまた TCL とヒセンの中国との関係に懸念を示し、同社のテレビを「中国支援監視デバイス」と呼んでいる。訴訟は Vizio が 2017 年に FTC およびニュージャージー州と合意した 220 万ドルの和解金を参照しており、類似の主張があったことを示している。サムスン、ソニー、LG、ヒセン、および TCL はまだコメント要請に応じていない。パクストンは「テレビを所有することは、ビッグテックや外国対立勢力に個人情報を渡すことを意味しない」と述べ、プライバシー保護への重点を強調した。

2025/12/19 3:55

How China built its ‘Manhattan Project’ to rival the West in AI chips

## Japanese Translation: **改善された要約** 深圳の研究所が、極紫外線(EUV)リソグラフィを使用して高度な半導体チップを製造できるプロトタイプを完成させました。EUVリソグラフィは、人間の髪の数千倍薄い回路をシリコンウェーハに刻むプロセスです。この機械は工場全床面積のほぼすべてを占める規模で、2025年初頭に完成し、現在テスト中です。元ASMLエンジニアがオランダ企業のEUV装置を逆解析して構築したもので、西側企業が長らく独占してきた技術です。プロトタイプが意図通りに機能すれば、中国はより細密な回路を持つチップを製造できるようになり、AIシステムやスマートフォン、高度兵器の性能向上につながります。この進展は、西側の独占的半導体製造能力から重要な技術が移転する可能性があり、世界のサプライチェーンと競争構造を変えることになるでしょう。

Interactive Fluid Typography | そっか~ニュース