iframeシミングまたはie6(および以下)z-indexバグを選択
-
03-07-2019 - |
質問
この問題に誰かが遭遇したかどうかはわかりません
IE6には簡単な説明があり、すべての<select>
オブジェクトは他のアイテムの上に表示されます。divの場合でも... ..)特定の要素のonclickとそのdivが<=>に重なり、divが<=>の下にあるかのように表示されます[この場合、最大および最小のZインデックスは機能しません]
グーグルで試したところ、iframeシムソリューションが見つかりました
しかし、かなりきれいな代替品が欲しかった
またはより良いまだ誰もがより良いソリューションを見つけましたか?
iframeを使用する方法では約130 MBのRAMを使用するため、貧しい人々のマシンが遅くなる可能性があります
解決
ループを使用してすべてのselect
を非表示にする必要はありません。必要なのは、次のようなCSSルールだけです。
* html .hideSelects select { visibility: hidden; }
そして次のJavaScript:
//hide:
document.body.className +=' hideSelects'
//show:
document.body.className = document.body.className.replace(' hideSelects', '');
(または、お気に入りのaddClass
/ removeClass
実装を使用できます)。
他のヒント
bgiframe というjqueryのプラグインがあり、iframeメソッドの実装が非常に簡単になります。 。
個人的に、Web開発者として、私はIE6でのユーザーエクスペリエンスを気にしなくなりました。 <!> quot; correct <!> quot;に近いようにレンダリングします。可能な限り、機能していることを確認しますが、速度に関してはあまりにも悪いです。彼らはアップグレードできます。 IE7(他のすべてのブラウザに比べてまだかなり遅いですが)は2年間(ほぼ毎日!)使用されていません。 IE8は間もなくリリースされる予定です。 Firefoxはすべてのプラットフォームで利用可能です。 Safariもオプションです(そして超高速)。 Operaはほとんど/すべてのプラットフォームで利用可能です。
IE6は7年以上前にリリースされました。私見、怠zyなユーザーと無能なIT部門(またはWeb開発者の場合)以外に、それをまだ使用する理由はありません。
誰かが興味を持っている場合のために、IEのシミングコードをいくつか紹介します。
* html .shimmed {
_azimuth: expression(
this.shimmed = this.shimmed || 'shimmed:'+this.insertAdjacentHTML('beforeBegin','<iframe style="filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);position:absolute;top:0px;left:0px;width:100%;height:100%" frameBorder=0 scrolling=no src="javascript:false;document.write('+"''"+');"></iframe>'),
'inherit');
}
ref:この要点 by subtleGradient およびこの Zach Leathermanによる投稿
IE7より前のドロップダウンリストは<!> quot; windowed <!> quot;でした。 controlは、ブラウザがそれを合成するのではなく、Windowsによって直接コントロールとしてレンダリングされたことを意味します。そのため、他の合成コントロールに対するz-indexingをサポートすることはできませんでした。
DDLの上に表示するには、IFRAMEなどの別のウィンドウコントロールを使用する必要があります。また、本質的にクロムレスポップアップを作成するwindow.createPopup()と呼ばれるあまり知られていないIEのみの機能を使用することもできます。止められないクリックアウトなどの制限がありますが、ホバーメニューシステムを構築している場合は実際に役立ちます。
この厄介なIEバグに対する最もシンプルでエレガントな解決策は、 http:// docsにあります。 jQueryを使用してjquery.com/Plugins/bgiframe
フライオーバーメニューを含むすべてが動的であるWebSphere Portal / Portal Applicationsで2日間動作させようとした後、その結論に達しました。
activexメソッドもありますが、これを検討し始めています。 ie6の選択ボックスの代わりにactivexコントロールを使用するには、条件コードを作成する必要があります。テクニックを示すデモスクリプトがあり、これは詳細についてはこちらをご覧ください。
更新:active-xコントロールがユーザーのマシン上にあるためには、MS Officeが必要と思われます。理論的には、それをどこかに、何らかの形で含めることは可能かもしれませんが、それはかなり厄介になっています。
多くの人が自分のヒントを提案したことは知っていますが、私の場合は、次のようにjqueryを使用してselectを非表示にします。
$(':date').dateinput({
format: 'dd/mm/yyyy',
onBeforeShow: function(event) {
$('select').hide();
},
onHide: function(event) {
$('select').show();
}
});