2010-04-01 15 views
23

Nasty kleinen Bug, dieses.Android Webkit: Absolut positionierte Elemente nicht respektieren Z-Index

Wie in Android ticket 6721 dargestellt, scheint der Android-Browser den Z-Index nicht zu respektieren, wenn absolut positionierte Elemente über die <a> oder <input> Tags gelegt werden. Ich bin verzweifelt für jede Art von Workaround. Hat jemand diesen schon einmal besiegt?

Vielen Dank im Voraus!

+0

Es würde helfen, um zu sehen, eine Probe Ihres Code, wo Sie uns absolut positionierten Elemente oben und Tags anzeigen. – Sotkra

+0

Ich habe Paul de Vrieze das Kopfgeld gegeben, aber das Problem ist nicht wirklich gelöst worden. Wenn jemand andere Gedanken hat, würde ich sie gerne hören! –

+0

Versuchte Mine? Ich sehe keine Kommentare von Ihnen. – naugtur

Antwort

11

Dieses Problem bezieht sich wahrscheinlich auf Steuerelemente und ihre Besonderheit für den Browser. Bei der Betrachtung Ihres Problems (in Chrom) habe ich ein ähnliches Problem festgestellt, dass Sie, wenn Sie die Tabulatortaste drücken, immer noch in der Lage sind, die Eingabeelemente zu fokussieren. Wahrscheinlich willst du das auch nicht (unabhängig von blutthrough). Die Lösung ist überraschend einfach, schreiben Sie Ihr Skript, um das disabled Attribut zu allen Eingabe/Schaltfläche/etc hinzuzufügen. Elemente, die überlagert sind. Eine deaktivierte Eingabe wird not be able to receive Fokus (per Tastatur oder sonst), und klicken Sie darauf sollte nicht möglich sein.

Da dies auch dumme Tastaturumrundung deaktiviert, ist es nicht einmal eine Problemumgehung, sondern ein besseres Design, das auch mit der tastaturbasierten Navigation wie erwartet funktioniert.

0
+1

Es ist ein bisschen anders als das IE-Problem; In IE werden die Elemente tatsächlich nicht gemäß der Spezifikation angezeigt. In Android Webkit sind sie, aber die Trefferbereiche für und Elemente sind nicht korrekt.Danke für den Gedanken! –

1

Simulieren INPUT und A mit DIVs.

2

Letzte Korrekturen für dieses Problem für IE gehören, aber sind wahrscheinlich nicht auf die folgende Liste beschränkt. Diese können helfen, das Problem in Android für Sie zu lösen.

  1. Setzen Sie einen Iframe hinter den absoluten Inhalt. Die iframe können diese Elemente verdunkeln Sie

  2. Wenn Sie Ihre absolute Inhalte anzuzeigen, verbergen alle Problem Elemente mit JavaScript

  3. Definieren Sie die divs in umgekehrter Reihenfolge

Punktnummer 1 gilt als die zuverlässigste Lösung für IE, aber möglicherweise nicht die beste Lösung für Sie.

3

Um die Frage richtig zu beantworten, ist es wichtig, die Bug-Seite zu lesen. Das Problem besteht nicht in der Sichtbarkeit der Eingabe darunter, sondern in der "Klickbarkeit".

ich es nicht testen können, aber diese sind mögliche Abhilfen:

absolute Positionierung vergessen und setzen nur zwei divs dort und Sichtbarkeit umschalten.

Wenn dies nicht Sie nicht erfüllt ...

versuchen CSS Position auf absolute oder relative Einstellung für alle a und input Tags (Yup, das könnte Sie zwingen CSS neu zu schreiben, um das Layout zu halten, aber ist es nicht wert)

einen <a> -tag Behälter machen:

<div style="z-index:100 etc."><a style="width: 100%; height:100%; z-index:101"> 
    stuff here 
</a></div> 

Dies benötigt etwas mehr CSS, damit der Inhalt gut aussieht. Aber ich erwarte, dass so etwas das Problem lösen würde.

wenn 1 und 2 sind nicht zu helfen ihnen beide auf einmal versuchen;)

wenn es passiert immer noch Sie können in Details überprüfen möchten, was passiert, wenn Sie klicken. Binden Sie Click- und Mousedown-Ereignisse an: link on top, container on top, input in the bottom und protokollieren Sie sie. Wenn Sie eines dieser Ereignisse für den oberen Link erhalten, können Sie versuchen, das Blubbern zu einem bestimmten Zeitpunkt zu stoppen oder das Ereignis an der Eingabe unten zu verhindern.

Das wäre schwierig, aber ich kann ein wenig helfen. jQuery wäre sehr notwendig.

+0

Ok, +1000 (ist das möglich?) Zog mir die Haare aus. Den Z-Index jedes Elements mit CSS zu setzen (musste sowohl Elemente als auch alle Container bearbeiten), reparierte es für mich. Danke für den Tipp. Dank dir habe ich die Glatze für einen weiteren Tag abgewehrt. – techdude

0

Setzen Sie die unter HTML in ein Div und setzen Sie die Anzeige: keine Verwendung von Javascript, so dass die unter Inhalt ist weg, anstatt klickbar und modal.

0

Wenn Sie dieses Problem lösen möchten, müssen Sie zunächst Z-Index zum übergeordneten Wrapper hinzufügen und Z-Index zu Ihren anderen Elementen klar hinzufügen, Lösung ist, dass alle Elemente einen Nullpunkt für den Verständnis Z-Index haben Eigenschaft korrekt

2

dies jedes Element mit dem CSS hinzufügen, die ein Problem verursacht:

-webkit-backface-visibility: hidden; 
Verwandte Themen