モバイルデバイスにおける適応レイアウトの問題に関する簡単な説明 (レスポンシブ、rem/em、Js ダイナミクス)

モバイルデバイスにおける適応レイアウトの問題に関する簡単な説明 (レスポンシブ、rem/em、Js ダイナミクス)

3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイスは、インターネットにアクセスするための最も一般的な端末としてデスクトップ デバイスを上回りつつあります。したがって、Web デザイナーは、異なるサイズのデバイスで同じ Web ページをどのように表示するかという難しい問題に直面する必要があります。この記事では、Web 開発者が同じ Web ページ コードを維持しながら、複数のデバイスでより優れた読み取りエクスペリエンスを提供できるようにするアダプティブ Web デザインの概念と方法について説明します。この記事では、アダプティブ Web ページの実装方法を詳しく紹介し、混乱している皆さんの役に立ちたいと思っています。

1. HTMLヘッダーにメタタグを追加する

HTML ヘッダー (head タグ) にメタ タグを追加して、Web ページの幅がデバイス画面の幅と同じで、拡大縮小されないことをブラウザに伝えます。コードは次のとおりです。

<meta name="viewport" content="width=デバイス幅、ユーザースケーラブル=いいえ、初期スケール=1.0、最大スケール=1.0、最小スケール=1.0">

このコード行の意味を簡単に分析してみましょう。width=device-width は、Web ページの幅がデバイス画面の幅に等しいことを意味し、initial-scale=1.0 はページの初期ズーム比を 1 に設定することを意味し、user-scalable=no はユーザーによるズームを禁止することを意味し、maximum-scale=1.0 および minimum-scale=1.0 は最大および最小のページズーム比を設定することを意味します。主要なブラウザはメタタグをさまざまな程度に解析するため、すべてのブラウザとの互換性を保つように最善を尽くす必要があります。

2. パーセンテージレイアウト

ページレイアウトでは、相対幅と絶対幅を組み合わせてレイアウトすると、Web ページの保守性が向上します。

以下の図は、iPhone5、iPhone6、iPhone 6 PlusでのLagou.comのレイアウトを示しています。デバイスの画面幅が変わると、同じウェブページコードセットでも表示されるフォントサイズや間隔が異なっていることがわかります。赤いボックス内の部分はパーセンテージレイアウトを使用しており、これにより Web ページの保守性が向上します。

3. レスポンシブページの実装

現在、レスポンシブ化を実現する一般的な方法は 2 つあります。1 つはメディア クエリを使用する方法で、もう 1 つは Bootstrap でのグリッド レイアウトです。グリッド レイアウトについては、後ほど Bootstrap を紹介するときに紹介します。ここでは、主にメディア クエリを使用してレスポンシブ レイアウトを実現する方法について説明します。

メディア クエリ (@media クエリとも呼ばれます) は、さまざまな画面サイズに異なるスタイルを設定できます。特に、レスポンシブ ページを設計する必要がある場合、@media は非常に便利です。ブラウザのサイズを変更すると、ページはブラウザの幅と高さに応じて再レンダリングされます。スタイル設定なので、CSS ファイルの下部にメディアクエリ関連のコードを入れるだけです。

応答性の使用法をより明確に理解できるように、以下に 2 つの例を示します。最初のケースは比較的単純で、異なるページ幅で本文の背景色を変更する機能を実現します。 2 番目のケースでは、特定のプロジェクトを例として使用するため、ユーザーにとってより便利です。

例1:

ページの幅が 300 ピクセル未満の場合は、本文の背景色を赤に変更します。

@media スクリーンと (最大幅: 300px) {
    体 {
         背景色:赤;
    }
}

ページの幅が 300 ピクセルより大きく 600 ピクセルより小さい場合は、本文の背景色を緑に変更します。

@media screen および (最小幅: 300px) および (最大幅: 600px) {
    体 {
         背景色:緑;
    }
}

ページの幅が 600 ピクセルを超える場合は、本文の背景色を青に変更します。

@media スクリーンと (最小幅: 600px) {
    体 {
         背景色:青;
    }
}

コードの説明:

画面とは、コンピューターの画面、タブレット、スマートフォンなどを指します。min-width と max-width は、デバイス内のページの最小幅と最大幅を定義するために使用されます。

例2: Visual Chinaホームページのレスポンシブ実装

まず、このページをさまざまなウィンドウで表示した場合の表示効果を見てみましょう。

ウィンドウの幅が 1200px を超える場合、ページ スタイルは次のようになります。

ウィンドウの幅が 900px より大きく 1200px 未満の場合、ページ スタイルは次のようになります。

ページ幅が900px未満の場合、ページスタイルは次のようになります。

次に、具体的なコード実装を見てみましょう。

HTMLコードは以下のとおりです。画像が複数あり、列が複数あることに注意してください。

<div class="group_wrap">
    <div class="group">
        <div class="col">
            <div class="img_logo">
                <img src="img/8.jpg" alt="">
            </div>
        </div>
        <div class="col">
            <div class="img_logo">
                <img src="img/9.jpg" alt="">
            </div>
        </div>
    </div>
</div>

CSS コードは次のとおりです。ページの幅が 1200 ピクセルを超える場合のデフォルトは次のとおりです。

.group_wrap{
    幅: 100%;
    オーバーフロー: 非表示;
}
。グループ{
    幅: 1200ピクセル;
    マージン: 0 自動;
    オーバーフロー: 非表示;
}
.col{
    幅: 280ピクセル;
    マージン: 10px;
    フロート: 左;
}
.img_logo{
    パディング: 10px;
    背景: 白;
}

レスポンシブ コードは次のとおりです。これを CSS ファイルの下部に配置するだけです。

/*ページ幅が900pxから1200pxの場合*/
@media screen かつ (最小幅: 900px) かつ (最大幅: 1200px) {
    。グループ{
        幅: 900ピクセル;
    }
}
/*ページ幅が600pxから900pxの場合*/
@media screen かつ (最小幅:600px) かつ (最大幅: 900px) {
    。グループ{
        幅: 600ピクセル;
    }
}

要約: 実際、レスポンシブ ページの実装は非常に簡単です。一生懸命勉強し、頻繁に練習すれば、マスターできるようになります。

4. ページ上で相対フォントを使用する

通常の Web ページ レイアウト プロセスでは、レイアウトに絶対単位のピクセル (px) を使用することが多いです。このようなレイアウトはアダプティブ Web ページの実装には適していないため、ここでは一般的な 2 つの絶対単位 em と rem を紹介します。 rem (ルート要素のフォント サイズ) は、ルート要素に対するフォント サイズの単位を示します。簡単に言えば、相対的な単位です。 rem を見ると、間違いなく em 単位を思い浮かべるでしょう。em (要素のフォント サイズ) は、親要素に対するフォント サイズの単位を指します。実際には、計算ルールの 1 つはルート要素に依存し、もう 1 つは親要素に依存する点を除けば、これらは非常によく似ています。

1. 相対的な長さの単位 em

emの特徴:①emの値は固定ではありません。②emは常に親要素のフォントサイズを継承します。

では、早速コードを見てみましょう。

HTMLコード:

<div class="one">
    <span>第 1 層</span>
    <div class="two">
        <span>第 2 層</span>
        <div class="3">
            <span>第3層</span>
        </div>
    </div>
</div>

CSSコード:

体{
    フォントサイズ: 20px;
}
。1つ{
    フォントサイズ: 1.5em;
}
。二{
    フォントサイズ: 0.5em;
}
。三つ{
    フォントサイズ: 2em;
}

結果:

.one ---> 30px 1.5 * 20 = 30px
.two ---> 15px 0.5 * 30 = 15px
.three ---> 30px 2 * 15 = 30px

コード分​​析:

em は親要素のフォント サイズを継承します。ほとんどのブラウザーでは、body のフォント サイズが指定されていない場合、デフォルトは 16px です。したがって、クラス名が one の div の場合、その親は body なので、1em = 16px です。この場合、body のフォント サイズは 20px に指定されているため、.one の場合、1em = 20px、つまり 1.5em = 30px になります。したがって、フォント サイズは 30 ピクセルになります。

クラス名が two の div の場合、その親は one です。em は親要素のフォント サイズを継承するため、1em = 30px、0.5em = 15px となり、two のフォント サイズは 15px になります。

クラス名が 3 の div の場合、その親は 2 です。em は親要素のフォント サイズを継承するため、1em = 30px、0.5em = 15px となり、2 のフォント サイズは 15px になります。

2. 相対長さの単位 rem

remはCSS3で新たに追加された相対単位(root em)であり、広く注目を集めています。このユニットはemとどう違うのですか?違いは、 rem を使用して要素のフォント サイズを設定する場合、相対サイズのままですが、HTML ルート要素に対してのみ相対的であるということです。このユニットは、相対サイズと絶対サイズの利点を組み合わせたものです。ルート要素のみを変更すると、レイヤーごとにフォント サイズが複合される連鎖反応を回避しながら、すべてのフォント サイズを比例的に調整できます。

次の例を見てみましょう。

HTMLコード:

<div class="one">
    <span>第 1 層</span>
    <div class="two">
        <span>第 2 層</span>
        <div class="3">
            <span>第3層</span>
        </div>
    </div>
</div>

CSSコード:

html{
    フォントサイズ: 20px;
}
。1つ{
    フォントサイズ: 1.5rem;
}
。二{
    フォントサイズ: 0.5rem;
}
。三つ{
    フォントサイズ: 2rem;
}

結果:

.one ---> 30px 1.5 * 20 = 30px
.two ---> 10px 0.5 * 20 = 10px
.three ---> 40px 2 * 20 = 40px

コード分​​析:

rem は CSS3 で導入された新しい単位です。rem の値は常にルート要素 html で設定された font-size を基準とします。設定されていない場合、ほとんどのブラウザのデフォルトの font-size は 16px なので、1rem = 16px となります。

したがって、クラス名が 1 の div の場合、1.5rem = 1.5 * 20 = 30px になります。その他も同様なので、一つ一つ詳しく説明することはしません。

em と rem の概要:

「em」は親要素を基準にフォント サイズを設定するため、問題が発生します。要素を設定するには、その親要素のサイズを知る必要がある場合があります。これを複数回使用すると、予期しないエラーのリスクが生じる可能性があります。 Rem は比較的使いやすいです。弊社の場合、実際のプロジェクト開発では rem がよく使われています。近い将来、海外のデザイナーと同様に、国内のデザイナーもレムに夢中になるだろうと予想されます。

5. Jsはモバイルフォントの適応を実現するためにremを動的に設定します

実際、ここまで話してきたので、rem の使い方は理解できたかもしれませんが、モバイル適応を実現するために rem をどのように使用すればよいかはまだわかりません。結局のところ、 rem がモバイル適応を実現できる理由は、ルート要素のフォントサイズに応じて常に値を変更できるという独自の特性にあります。一般的な携帯電話の画面サイズを下図に示します。

モバイル側への適応、つまり、ページ要素のフォント、間隔、幅、高さの属性値が、携帯電話の画面サイズの変化に合わせて変更されるようにしたいと考えています。次に、Js を使用して rem を動的に設定し、モバイル側への適応を実現する方法を見てみましょう。Js コードは次のとおりです。

//HTML要素を取得します。var html = document.getElementsByTagName('html')[0]; 
//画面幅(互換処理)
var w = document.documentElement.clientWidth || document.body.clientWidth;
// 750 という数字はデザインの実際のサイズに基づいているため、値はデザインのサイズによって異なります。html.style.fontSize = w / 750 + "px";

上記のコードは、Js を使用してデバイス画面の幅を取得し、画面の幅に応じてルート要素 html の font-siz 属性を動的に変更します。たとえば、iPhone 6 の場合、画面サイズは 750 なので、iPhone 6 の html のフォント サイズは 1px となり、1rem = 1px となります。iPhone 5 の場合、画面サイズは 640 なので、iPhone 5 の html のフォント サイズは 640/750 = 0.85333px となり、1rem = 0.85333px となります。このように、要素に同じサイズと単位を設定しても、デバイスによって異なるサイズで表示されます。たとえば、div{width:100rem} の場合、iPhone 6 では幅が 100 ピクセルになり、iPhone 5 では幅が 100 * 0.85333 = 85.333 ピクセルになります。このようにして、私たちは本当にモバイル適応性を実現しました。どうですか?簡単ではありませんか?

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  HTMLページ間でパラメータを渡すフロントエンド方式の詳細な説明

>>:  MySQLの認可コマンド grant の使い方のまとめ

推薦する

CSS で左上の三角形を作成するいくつかの方法の詳細な説明

今日は、CSS を使用して左上の三角形を記述するいくつかの方法を紹介します。概略図(幅と高さを60p...

15 分で学べる並列アーティファクト GNU Parallel 入門ガイド

GNU Parallel は、1 台以上のコンピューター上で計算タスクを並列に実行するためのシェル ...

Vue2 における 12 種類のコンポーネント通信

目次1. 小道具2..同期3.vモデル4.参照5. $emit/v-on 6. $attrs/$li...

MySQL データベースの操作とデータ型

目次1. データベース操作1.1 データベースの表示1.2 データベースを作成する1.3 データベー...

Antd+vueは円形属性フォームの動的検証のアイデアを実現します

必要な項目をループして検証するために、クエリ フォームのいくつかのプロパティを実装したいと考えていま...

ページキャッシュを無効にするいくつかの方法を共有する

本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...

JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

1. イベント委任とは何ですか?イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべ...

Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策

序文docker イメージを削除できません。docker docker imagesを確認すると、イ...

MySQL 5.7.17 インストール グラフィック チュートリアル (Windows)

最近データベースを学び始めたのですが、とても興味深いコースだと感じていますが、含まれる内容の多くは私...

Quill エディタでカスタム HTML レコードを挿入する詳細な例

もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

mysql 5.6.23 winx64.zip インストール詳細チュートリアル

WindowsにMySQLの圧縮バージョンをインストールする方法の詳細については、以下を参照してくだ...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

dockerログマウントの問題を解決する

重要なのは、ローカルサーバーに書き込み権限がないことですキーはここにあります(アクセス拒否)。私は肯...

Vueはシンプルなコメント機能を実装します

この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...