php.de

Zurück   php.de > Webentwicklung > HTML, Usability und Barrierefreiheit

HTML, Usability und Barrierefreiheit Themen rund um Textauszeichnung, Formatierung, Barrierefreiheit und Usability.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.03.2007, 15:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard <div> Container über <select> Boxen legen

Hallo,
welche Hacks gibt es, um <div> Container im MSIE 6 oder älter über eine <select> Box zu legen, ohne dass diese "durchscheint".

Ausblenden mittels "position:relative" und die Position ins Nirvana verschieben kenne ich. Das ganze temporär durch eine Grafik zu ersetzen finde ich nicht gut, wer weiß schon wie die <select> Box beim User wirklich aussieht (Windows-Styles). <select> selber durch DHTML simulieren gefällt mir auch nicht.

Es soll wohl einmal den Hack gegeben haben, die <select> Box in einen <iframe> zu legen, der funktioniert leider auch nicht, zumindest nicht bei meinem Test-Versuch.

Ideen oder Schlagwörter für Google?

Danke & Gruß, c
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.03.2007, 16:16  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Versteh so gesehen das Problem nicht ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 06.03.2007, 16:48  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Eine <select> Box kann im Internet Explorer 6 nicht durch einen <div> Container überlagert werden.

Konkret taucht das ganze auf einer Formularseite auf, dessen Navigation mit verschachtelten aufklappbaren Menüs arbeitet. Legt sich ein Menü-Container nun über eine <select> Box, ist die <select> Box dahinter sichtbar.

Ähnliches mit Flash-Filmen, weiß nicht ob das dort aber noch aktuell ist.

Screenshot:
http://www.bilder-hosting.de/show/UJ6IJ.html

Zumindest das hier klappt:
Code:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title></title>
    
    
    <style type="text/css">
        div.unscheinbar,
        iframe.unscheinbar {
        	position   : absolute;
            left       : 5px;
            top        : 5px;
            height     : 50px;
            width      : 50px;
            background : red;
            z-index    : 10;
        }
        
        iframe.unscheinbar {
        	border  : 0;
            padding : 0;
            margin  : 0;
        	z-index : 1;
        }
        
        div.unscheinbar {
        	background : green;
        }
    </style>
    
    <script type="text/javascript">
        
    </script>
</head>
<body>

    <form action="">
        <select>
            <option>eins zwei</option>
        </select>
    </form>
    
    <iframe src="about:blank" class="unscheinbar"></iframe>
    
    <div class="unscheinbar"></div>

</body>
</html>
Zergling-new ist offline   Mit Zitat antworten
Alt 06.03.2007, 18:40  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also ne lösung gibts. ich such mal
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 06.03.2007, 18:47  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Die Lösung ist, hinter den <ul> oder[list=1] Tag dynamisch einen <iframe> zu klemmen. Garnicht so einfach, da das Element nicht aus dem Textfluß genommen werden darf (sonst zerstört es die Listen-Darstellung).

Ich präsentiere das Ergebnis, falls es ein akzeptables gibt dann demnächst hier.
Zergling-new ist offline   Mit Zitat antworten
Alt 06.03.2007, 18:55  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also das was auf dem screenshot zu sehen ist gefällt mir schonmal richtig gut.
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 07.03.2007, 14:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Folgende Funktion habe ich heute geschrieben.
Sie wird nicht auf Anhieb bei euch funktionieren, ihr müsst das Prinzip verstanden haben und die Funktion entsprechend anpassen.
Sorry für das Englisch:
Code:
/*
 * A "windowed control" object is an object (<select> box, active-x element, ..)
 * that can not overlaid by a <div> layer. It shine's through.
 * This bug occures in Microsoft's Internet Explorer, Version 6.
 * An <iframe> can overlay such windowed controls.
 * So if you have a dynamic menu with <div> layers that might overlap
 * a windowed control, call this function to place an <iframe> under the
 * layer. You need to have an <iframe src> file with some CSS code, to get off
 * the <iframe>'s border (othervise we could use "about:blank"). So use the
 * CSS code (margin|padding|border:0).
 * But in the end, we should never see this <iframe>!
*/ 
function fixWindowedControl(winCtrlId)
{
    /*
    // replaces a following code
    
    <ul id="fixWinCtrl-ul-123">[*]eins[*]zwei 2
zwei 22
zwei 222[*]drei[/list]    
    // into this one by manipulating the DOM structure
   
    <div style="position:relative">
        <div style="absolute;z-index:1">
            <iframe scrolling="no" src="test7-iframe.html" style="padding:0;border:0;visibility:hidden" id="fixWinCtrl-div-123"></iframe>
        </div>
    
        <div style="position:relative;z-index:2">
            
            <ul id="fixWinCtrl-ul-123">[*]eins[*]zwei 2
zwei 22
zwei 222[*]drei[/list]            
        </div>
    </div>
    
    // the effect is, that there is an iframe under the list now, so it
    // can hover over a <select> box (not possible with MSIE 6)
    */
    
    // get the <ul> object
    var winCtrl = document.getElementById(winCtrlId);
    
    // create the outer <div> container
	var div1  = document.createElement("DIV");
        div1.style.position ="relative";
    
    // create the first inner <div> <iframe> container    
    var div2a = document.createElement("DIV");
        div2a.style.position = "absolute";
        div2a.style.zIndex   = 1;
    
    // create the <iframe>
    var iframe2a = document.createElement("IFRAME");
        iframe2a.src              = "_test_protokoll_iframe.html"; // custom
        iframe2a.scrolling        = "no";
        iframe2a.style.padding    = "0";
        iframe2a.style.margin     = "-22px 0 0 163px"; // custom setting
        iframe2a.style.border     = "0";
        iframe2a.style.width      = winCtrl.offsetWidth;
        iframe2a.style.height     = winCtrl.offsetHeight;
        iframe2a.style.visibility = "hidden";
        iframe2a.id               = winCtrl.id.replace(/ul/, "div");
        
    // append the <iframe> to the <div> <iframe> container 
    div2a.appendChild(iframe2a);            
    
    // create the second inner <div> <ul> container
    var div2b = document.createElement("DIV");
        div2b.style.position = "relative";
        div2b.style.zIndex   = "2";
    
    // append the <ul> to the <div> <ul> container (use a clone, othervise it'll get lost)
    div2b.appendChild(winCtrl.cloneNode(true));
    
    // append the inner <div> containers to the outer <div> container
    div1.appendChild(div2a);
    div1.appendChild(div2b);
    
    // replace the <ul> with the new structure
    (winCtrl.parentNode).replaceChild(div1, winCtrl);
}

/*
 * collects all <ul> elements with an id like "*fixWinCtrl-ul-*" and processes
 * them with the above function fixWindowedControl() 
 */
function fixWindowedControls()
{
	var unsortedLists = document.getElementsByTagName("UL");
    for (var i = 0; i < unsortedLists.length; i++) {
    	if (unsortedLists[i].id.indexOf("fixWinCtrl-ul-") != -1) {
    		fixWindowedControl(unsortedLists[i].id);
    	}
    }
}

/*
 * do we need to fix the bug?
 */
var doFixWindowedControls = (BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 6);

/*
 * initiate after page load
 */
if (doFixWindowedControls && window.attachEvent) {
    window.attachEvent("onload", fixWindowedControls);
}
Zergling-new ist offline   Mit Zitat antworten
Alt 07.03.2007, 14:47  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmmh .. is das wirklich okay so viel JS zu benutzen? ich mein, ich hab nix gegen JS aber viele firmen admins schalten das rigeros aus, ansonsten kommt man anscheinened nicht vom iframe weg
die idee das auszulagern ist natürlich klasse, ich bild mir aber nach wie vor ein ne lösung gehabt zu haben
*weitersuch*
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 07.03.2007, 15:11  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Das ganze ist wirklich sehr schwerfällig - zu schwerfällig. Ein transparenter IFrame löst den Bug auch nicht auf.

Ich habe es jetzt beim Laden der Seite und on-the-fly probiert zu erstellen, jeweils böse Nebeneffekte.

Ich schau jetzt mal ob das gut wird, wenn ich den IFrame über den überlappenden Teil der <select> Box lege. Das ist dann halt sehr unflexibel.
Zergling-new ist offline   Mit Zitat antworten
Alt 07.03.2007, 15:17  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

na wenn schon JS dann blende die select box beim überfahren der links einfach aus?!
->onmouseover->#box select {display:none;} is mir grad mal so in den sinn gekommen
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[CSS] Container in Container Igäl HTML, Usability und Barrierefreiheit 5 04.09.2007 11:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
selectbox stylen, ie6 select overlay, div select, div über select, select div, selectboxen stylen, ie6 div über select, div in select, ie6 select box bug, div selectbox, div über selectbox, select in div, ie div über select, selectbox mit div, div über iframe legen, ie6 div select, select als div, div als select, ie6 overlay select, select box div

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.