序文最近、クライアントのネイティブページを引き継ぎました。顧客は、ページが IE9 以降のバージョンのブラウザと互換性があり、360 ブラウザの互換モードに正常にアクセスできることを要求します。 360 ブラウザはコードを通じて高速モードを強制することができ、この問題は比較的簡単に解決できます。ただし、IE9 との互換性を保つために、多くの CSS3 プロパティと H5 の新しい API は使用できません。この記事では、このプロジェクトで発生した IE9 の互換性の問題のいくつかを体系的にまとめます。 1. 360 ブラウザを強制的に高速モードにするご存知のとおり、360 Browser には「Extreme Speed Mode」と「Compatibility Mode」という 2 つのアクセス モードがあります。エクストリーム スピード モードでは、Google が開発し、Chrome ブラウザで使用されている Apple の Webkit カーネルのブランチである Blink カーネルが使用されます。互換モードでは、IE ブラウザで使用されるカーネルである Trident カーネルが使用されます。 互換モードでどのバージョンの IE が対応しているかについては、360 ブラウザの互換モードでページの空白領域を右クリックし、ポップアップ メニューで「互換モードの切り替え」を選択し、具体的な IE バージョンを確認できます。 Blink カーネルと Trident カーネルはページ コンテンツのレンダリングに大きな違いがあるため、最新のフロントエンド テクノロジを使用して作成された Web ページは互換モードでは正常に表示されない可能性があります。この問題を解決するには、次のコードを使用して、ページを強制的に 360 ブラウザの高速モードで動作およびレンダリングすることができます。 <meta name="レンダラー" content="webkit" /> 2. IE9のCSS3サポート1. ボックスモデルレイアウト ページレイアウトの観点から見ると、IE9 の Trident カーネルのボックスモデルの計算方法は Blink カーネルのものと異なり、主にボックス要素の padding 属性に反映されます。 たとえば、div ブロックレベル要素は、レンダリング時に幅が 400 ピクセル、高さが 600 ピクセルになり、その周囲に 20 ピクセルのパディングが付きます。 <div class="box"></div> (1)Blinkカーネルでは、divブロックレベル要素にパディングを追加すると、ブロックレベル要素全体が拡張されます。要素のレンダリング サイズを維持するには、レンダリング サイズから周囲のパディング サイズを減算する必要があります。コードを以下に示します。 。箱{ width:360px; // レンダリング幅 - 左パディングサイズ - 右パディングサイズ = 400px - 20px - 20px = 360px height:560px; // レンダリングの高さ - 上部のパディングサイズ - 下部のパディングサイズ = 600px - 20px - 20px = 560px パディング:20px; } (2)Tridentカーネルでは、divブロックレベル要素にパディングを追加しても、ブロックレベル要素全体が拡大されるわけではありません。したがって、周囲のパディングのサイズを減算する必要はありません。コードを以下に示します。 。箱{ 幅:400ピクセル; 高さ:600px; パディング:20px; } 上記の違いを考慮すると、コードを書く際に IE9 との互換性の問題をどのように解決すればよいでしょうか? CSS3 には、ボックス モデルのレイアウト モードを設定するための box-sizing プロパティが用意されています。このプロパティは IE8 以降でサポートされています。 box-sizing プロパティが border-box に設定されている場合、このプロパティを使用して要素に padding プロパティを追加した後、エフェクト画像の幅と高さから対応する方向の padding サイズを減算する必要はありません。 次に、すべてのコンテナーの box-sizing プロパティを border-box に設定するだけで、ボックス モデルのレイアウト モードが統一され、IE9 ブラウザーと自然に互換性が保たれます。コードを以下に示します。 *{ボックスのサイズ:境界線ボックス;} この CSS コードを使用すると、互換性を考慮せずにボックスモデルレイアウトを大胆に行うことができます。 2. IE9は柔軟なボックスレイアウトをサポート 確かに、IE9 は柔軟なボックス レイアウトをサポートしていません。最も簡単な方法は、Flexbox レイアウトを使用しないことです。 ここでは、IE9 で Flex のフレキシブル ボックス レイアウトを使用できるようにする Flex-Native という js ライブラリを紹介します。 (1)ページにFlex-Nativeライブラリを読み込みます。 <script src="https://unpkg.com/flex-native@latest"></script> (2)Flexboxレイアウトを使用するコンテナーでFlex機能を有効にします。 。箱{ display:flex; //Blinkカーネルと互換性あり -js-display:flex; //Flex-Nativeの影響下でTridentカーネルと互換性あり} (3)その他のFlexプロパティは通常通り使用できます。 3. IE9は以下のCSS3プロパティをサポートしていません (1)テキストシャドウ 4. IE9は以下のCSSセレクタをサポートしていません (1) ::前 3. IE9 の jQuery サポートインターネット上では「IE9 はバージョン 2.0 未満の jQuery のみをサポートする」というコメントが多く見られます。プロジェクト完了後、jQuery のバージョンを 3.5.1 にアップグレードしたところ、動作しました。カルーセルやスライディングドアで使用される jQuery セレクターとメソッドの少なくとも一部は利用可能です。 IE9 が jQuery 2.0 以上をサポートしていないセレクターまたはメソッドをテストした場合は、それらを追加してください。 4. IE9はプレースホルダー属性をサポートしていませんHTML5 では、フォーム要素のテキスト プレースホルダーの記述を容易にするために、プレースホルダー属性が設定されています。しかし、IE9 はこのプロパティをサポートしていません。このソリューションは、jQuery または JavaScript ネイティブ スクリプトを記述することで実現できます。 1. 通常のテキストボックスの解決策 実装原則: プレースホルダーを実装するには、テキスト ボックスの value 属性を使用します。 (1)テキストボックスにマウスフォーカスが当たったとき、テキストボックスの内容がプレースホルダ属性で設定されたテキストである場合、テキストボックスの内容は消えます。 私はネイティブ JavaScript を使用しましたが、サポートされている場合は jQuery を使用することもできます。 //クラス名に基づいてDOMノードを検索する関数をカプセル化します function $$(className){ document.getElementsByClassName(className) を返します。 } // テキストボックスのプレースホルダープロパティはIE9と互換性があります if("msDoNotTrack"in window.navigator){ //ブラウザがIE9かどうかを判断します for(var i=0;i<$$("入力").length;i++){ var text=$$("入力")[i].getAttribute("プレースホルダー"); $$("入力")[i].value=テキスト; $$("入力")[i].addEventListener("フォーカス",関数(){ if(this.value==this.getAttribute("プレースホルダー")){ this.value=""; } }) $$("入力")[i].addEventListener("ぼかし",function(){ var テキスト = this.getAttribute("プレースホルダー"); if(this.value==""){ this.value=テキスト; } }) } } 2. パスワードドメインのソリューション 問題: パスワード フィールドの場合、値属性の値によって、実際のテキスト コンテンツではなく、小さなドットのパスワード マスクがパスワード フィールドに表示されるため、値属性を使用してスクリプトを通じてプレースホルダー機能をシミュレートすることはできません。 解決策: パスワード フィールドの type 属性の値を常に変更することで、パスワード フィールドのデフォルトの type 値がテキストに設定され、value 属性の値を表示できるようになります。 (1)パスワードフィールドにマウスフォーカスが当たったときに、そのtype属性をpasswordに変更して、ユーザーが入力したパスワードが見えないようにする。 関数 $$(クラス名){ document.getElementsByClassName(className) を返します。 } // テキストボックスのプレースホルダープロパティはIE9と互換性があります if("msDoNotTrack" in window.navigator){ $$("パスワード")[0].type="text"; $$("パスワード")[0].addEventListener("フォーカス",function(){ this.type="パスワード"; }) for(var i=0;i<$$("パスワード").length;i++){ var text=$$("パスワード")[i].getAttribute("プレースホルダー"); $$("パスワード")[i].value=テキスト; $$("パスワード")[i].addEventListener("フォーカス",function(){ if(this.value==this.getAttribute("プレースホルダー")){ this.value=""; } }) $$("パスワード")[i].addEventListener("ぼかし",function(){ var テキスト = this.getAttribute("プレースホルダー"); if(this.value==""){ this.value=テキスト; this.type="テキスト" } }) } } 要約するIE9 の互換性の問題に関するこの概要には、何らかの欠点があるはずです。以下の記事では、IE9 の互換性で発生したその他の多くの問題をまとめています。このようなプロジェクトに遭遇した場合は、これらを参照してください。 これで、IE9 のネイティブ ページ互換性問題の解決に関するこの記事は終了です。IE9 のネイティブ ページ互換性の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
>>: MySQLが基礎データ構造としてB+ツリーを使用する理由
MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...
序文このプロジェクトでは円形のメニューが必要です。オンラインで検索しましたが、適切なものが見つからな...
1. 改行なしを実現するには<nobr>タグを使用するコードをコピーコードは次のとおりで...
mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...
yum で vsftpd をインストールします [root@localhost など]# yum -...
暗号化と復号化は、通信のセキュリティを確保するための重要な手段です。すでに多くの暗号化アルゴリズムが...
新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...
目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...
目次1. プロジェクト構築2: ディレクトリ構造3: コンポジションAPI 4: 基本的な使い方:最...
HTML5 のドラッグ アンド ドロップ機能は誰もが知っていますが、これを使用するとドラッグ アンド...
1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...
1. MySQLをダウンロードするMySQL 公式 Web サイトにログインし、MSI インストー...
1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...
border-radius で生成できる四角形やその他の図形に影を追加する場合 (「Adaptive...
他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...