目次
ビューポート単位とは何ですか?
Web レイアウトにはビューポート単位を使用します
しかし、異なるメディア クエリやフォント サイズ設定で同じ効果を実現するにはどうすればよいでしょうか?
他の文字体裁要素のフォント サイズをビューポート単位で設定します
视口单位的垂直和标准化计算
精确
原文参照
ホームページ ウェブフロントエンド htmlチュートリアル ビューポートに基づく Web ページのレイアウト Units_html/css_WEB-ITnose

ビューポートに基づく Web ページのレイアウト Units_html/css_WEB-ITnose

Jun 21, 2016 am 08:47 AM

モジュール化の構築に関する前の 2 つの記事では、rem & em とレスポンシブ タイポグラフィについて説明しました。記事のコメントでは、ビューポート単位に基づく Web ページのレイアウトについて多くの熱意がありました。想像力の余地が大きい。

ビューポート単位には計算が含まれるため、しばらくの間、仕事でビューポート単位を使用することに抵抗がありました。しかし、つい先週、私は抵抗を克服し、Web レイアウトでのビューポート ユニットの使用法を理解し始めました。ビューポート ユニットとそれが Web ページ レイアウトでどのように機能するかを詳しく説明する前に、まず一般的なビューポート ユニットとは何かを理解しましょう。

ビューポート単位とは何ですか?

CSS 仕様では、次の 4 種類のビューポート単位が使用できます。

  • vw — 1vw はビューポート幅の 1% に等しい
  • vh — 1vhビューポートの高さの 1% に等しい
  • vmin — vw と vh の小さい方
  • vmax — vw と vh の大きい方

ビューポート、つまりブラウザの画面サイズ。1vw はブラウザの幅の 1% に等しく、100vw はブラウザ全体の幅です。

ビューポートの単位サイズは、ページの読み込み時、ページのズーム時、またはビューポート サイズの変更に基づいて自動的に計算されます。画面の向きが変わります(横→縦切り替え)。このため、常にビューポートの 4 分の 1 のサイズのコンテナを作成するのは非常に簡単です。

.component {  width: 50vw;  height: 50vh;  background: rgba(255, 0, 0, 0.25)}
ログイン後にコピー

Web レイアウトにはビューポート単位を使用します

Web ページのレイアウトにビューポート ユニットを使用する唯一の理由は、ビューポート ユニット サイズがクライアント ブラウザのビューポート サイズに基づいて自動的に計算されるためです。つまり、メディア クエリを通じてフォント サイズを明示的に宣言する必要はありません。デモを使って簡単に説明しましょう。

コードは次のとおりです。ブレークポイントを 800px に設定し、フォント サイズを 16px から 20px に変更します。

// Note: CSS are all written in SCSShtml {  font-size: 16px;  @media (min-width: 800px) {    font-size: 20px;  }}
ログイン後にコピー

上記のコードでは、ビューポート サイズが 800px の場合、フォントは 16 ピクセルから 20 ピクセルに変化します。これはレスポンシブ タイポグラフィでは一般的なアプローチです。ページ レイアウトをすべてのデバイスに確実に適応させるために、ブレークポイント間にメディア クエリを追加するという問題が発生することがあります。

html {  font-size: 16px;  @media (min-width: 600px) {    font-size: 18px;  }  @media (min-width: 800px) {    font-size: 20px;  }}
ログイン後にコピー

これは機能しますが、より具体的なメディア クエリのルールとフォント サイズが必要です。通常、フォント サイズは 3 ~ 4 が選択されます。

しかし、異なるメディア クエリやフォント サイズ設定で同じ効果を実現するにはどうすればよいでしょうか?

もちろん、それはあります。これがビューポート ユニットの目的です。フォント サイズをビューポート単位で表現できます:

html { font-size: 3vw; }
ログイン後にコピー

素晴らしいですね?短いコード部分が適応を実装します。ただし、明らかな欠点もあります。つまり、ビューポートのユニット サイズがデバイス画面のビューポート サイズに基づいて計算されるため、画面の小さなデバイス (幅 320 ピクセルの携帯電話など) ではフォントが小さすぎます。画面が大きいデバイス (幅 1440 ピクセルの携帯電話など) の場合、フォント サイズが非常に大きくなり、読みにくくなります。

さて、私たちが現在直面している興味深い課題は、ビューポート単位の計算におけるさまざまなデバイスのビューポート幅の影響をどのように解決するかということです。簡単な方法は、font-size の最小値を設定し、calc() 属性を使用して小さな画面デバイス上のフォント サイズ値を動的に計算することです。

html { font-size: calc(18px + 0.25vw) }
ログイン後にコピー

Mike Riethmuller のドキュメントを参照してください。レスポンシブ タイポグラフィの正確な制御

ただし、すべてのブラウザが calc() のこの計算方法 (px+vw) をサポートしているわけではありません。解決策も非常に簡単です。ブラウザのサポートを向上させるために、パーセントと vw を計算に使用します。

html { font-size: calc(112.5% + 0.5vw) }
ログイン後にコピー

克服すべき次の課題は、ビューポート単位を使用することです。 タイポグラフィのフォント サイズを設定するには要素 (h1 ~ h6)。

他の文字体裁要素のフォント サイズをビューポート単位で設定します

まず、

要素を作成し、そのフォント サイズを本文のサイズの 2 倍に設定します。 🎜 >

html { font-size: calc(112.5% + 0.25vw) }h1 { font-size: calc((112.5% + 0.25vw) * 2); }
ログイン後にコピー

HTML 要素のフォント サイズを 2 倍にしようとしましたが、うまくいきませんでした。

の場合、フォント サイズはパーセンテージに基づいて計算されます。フォントサイズはのサイズを継承した後、

のフォントサイズが再計算されます。

ビューポートの幅が 800 ピクセルであると仮定すると、デフォルトのフォント サイズは 16 ピクセルです。

HTML 要素の場合、112.5% はフォント サイズが 18 ピクセル (112.5/100) であることを意味します。 * 16px )
  • 0.25vw == 2px(800px * 0.25/100)
  • したがって、HTML の font-size の最終値は 20px(18px + 2px)
  • 同じ方法で h1 要素のフォント サイズを計算しますが、パーセンテージ (112.5%) の相対計算に特に注意してください:

h1 要素の場合、112.5%つまり、 font-size は 22.5px(112.5/100 * 20px)
  • 0.25vw == 2px(800px * 0.25/100)
  • つまり、h1 の font-size の最終値はは 49px( (22.5px + 2px) * 2)
  • これは、h1 要素の font-size を Body のサイズの 2 倍に設定するという元のアイデアに反します。しかし、違いの理由は、h1 が html のフォント サイズを継承していることであることがわかっています。この問題を解決するには 2 つの方法があります。

最初の方法は、単純に 112.5% を 100% に変更することです:

2 番目の方法は、フォント サイズが要素間で継承されないようにすることです:
h1 { font-size: calc((100% + 0.25vw) * 2) }
ログイン後にコピー
h1 { font-size: calc((100% + 0.25vw) * 2) }p { font-size: calc((100% + 0.25vw)) }
ログイン後にコピー

这两种方式看起来有点 hack,看起来不爽,于是又继续尝试其它方法。最终,最干净的方式是使用 Rem & Em :

html { font-size: calc(112.5% + 0.25vw) }h1 { font-size: 2em; }
ログイン後にコピー

既然讲到了字体大小的计算,那接下来的问题是: 视口单位的垂直和标准化计算是怎么样的?

视口单位的垂直和标准化计算

这个相对比较容易回答。不知是否注意到,视口单位常仅被用于 html 元素?其它元素仍用 rem 和 em 作为计算的单位。

这就意味着,你仍然能使用 rem 和 em 用于视口单位的垂直和标准化计算,这和我之前在 Everything I Know about Responsive Typography 一文中讨论的一样。

结束这篇文章之前,最后一个需要谈到的问题是:要怎么样去计算 vw 的值,才能在视口宽度是 800px 时,排版的字体大小为 20px?很多人问到了这个问题,因而,将这个问题简化成一个词就是—精确。换句话说,如何才能字体大小更加精确?

精确

结果是,Mike 已经替我解决了这个问题,我只需要再简单解释下计算方式。

假设你要处理下面两种情况:

  • 视口宽度是 600px 时,font-size 是 18px
  • 视口宽度是 1000px 时,font-size 是 20px

首先,我们必须将较小的 font-size 值转为百分比。第一部计算是:calc(18/16 * 100%) (或者 calc(112.5%))。 接下来,计算出 vw 值。 这部分的计算略繁琐:

  1. 计算 font-size 的最大差值 v1(22-18=4)
  2. 用 v1 除以视口宽度的最大差值 v2(1000-600)
  3. 将上述结果再乘以 100vw – smaller-viewport-width(100vw – 600)

最终,结果如下:

html {  font-size: calc(112.5% + 4 / 400 * (100vw - 600px) )}
ログイン後にコピー

开始接触可能会比较复杂,但是熟悉之后,你可以把它简化成 Sass 混入( simple sass mixin )。

原文参照

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

< Progress>の目的は何ですか 要素? < Progress>の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

< datalist>の目的は何ですか 要素? < datalist>の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

< meter>の目的は何ですか 要素? < meter>の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5< time>について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

< iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? < iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

See all articles