Im IE hat die Dropdown-Liste dieselbe Breite wie die Dropbox (ich hoffe, ich mache Sinn), während in Firefox die Breite der Dropdown-Liste je nach Inhalt variiert.
Dies bedeutet im Grunde, dass ich sicherstellen muss, dass die Dropbox breit genug ist, um die längste mögliche Auswahl anzuzeigen. Dadurch sieht meine Seite sehr hässlich aus :(
Gibt es eine Problemumgehung für dieses Problem? Wie kann ich mit CSS unterschiedliche Breiten für Dropbox und Dropdown-Liste festlegen?
quelle
width: auto !important;
Das Erstellen einer eigenen Dropdown-Liste ist mehr ein Schmerz als es wert ist. Sie können JavaScript verwenden, damit das IE-Dropdown-Menü funktioniert.
Es verwendet einen Teil der YUI-Bibliothek und eine spezielle Erweiterung zum Korrigieren von IE-Auswahlfeldern.
Sie müssen Folgendes einschließen und Ihre
<select>
Elemente in a einschließen<span class="select-box">
Stellen Sie diese vor das Body-Tag Ihrer Seite:
Nach der Annahme bearbeiten:
Sie können dies auch ohne die YUI-Bibliothek und das Hack-Steuerelement tun. Alles, was Sie wirklich tun müssen, ist ein onmouseover = "this.style.width = 'auto'" onmouseout = "this.style.width = '100px'" (oder was auch immer Sie wollen) auf das select-Element zu setzen. Das YUI-Steuerelement gibt ihm diese nette Animation, aber es ist nicht notwendig. Diese Aufgabe kann auch mit jquery und anderen Bibliotheken ausgeführt werden (obwohl ich hierfür keine explizite Dokumentation gefunden habe).
- Änderung der Bearbeitung:
IE hat ein Problem mit dem Onmouseout für ausgewählte Steuerelemente (Mouseover für Optionen wird nicht als Mouseover für die Auswahl betrachtet). Dies macht die Verwendung eines Mouseouts sehr schwierig. Die erste Lösung ist die beste, die ich bisher gefunden habe.
quelle
Sie könnten einfach Folgendes versuchen ...
Ich habe es versucht und es funktioniert bei mir. Sonst ist nichts erforderlich.
quelle
Ich habe die folgende Lösung verwendet und sie scheint in den meisten Situationen gut zu funktionieren.
Hinweis: Für die Datei $ .browser.msie ist eine Abfrage erforderlich.
quelle
@Das müssen Sie auch einen Unschärfe-Ereignishandler hinzufügen
Dadurch wird jedoch das Auswahlfeld beim Klicken weiterhin erweitert, anstatt nur die Elemente. (und es scheint in IE6 zu scheitern, funktioniert aber perfekt in Chrome und IE7)
quelle
In IE6 / IE7 / IE8 ist dies nicht möglich. Das Steuerelement wird von der App gezeichnet und der IE zeichnet es einfach nicht so. Am besten implementieren Sie Ihr eigenes Dropdown-Menü über einfaches HTML / CSS / JavaScript, wenn es so wichtig ist, dass das Dropdown-Menü eine Breite und die Liste eine andere Breite hat.
quelle
Wenn Sie jQuery verwenden, probieren Sie dieses IE Select Plugin Plugin aus:
http://www.jainaewen.com/files/javascript/jquery/ie-select-style/
Durch Anwenden dieses Plugins scheint das Auswahlfeld in Internet Explorer so zu funktionieren, wie es in Firefox, Opera usw. funktionieren würde, indem die Optionselemente in voller Breite geöffnet werden können, ohne das Aussehen und den Stil der festen Breite zu verlieren. Außerdem wird das Auswahlfeld in Internet Explorer 6 und 7 mit Unterstützung für Auffüllen und Rahmen versehen.
quelle
In jQuery funktioniert dies ziemlich gut. Angenommen, das Dropdown hat id = "dropdown".
quelle
Hier ist die einfachste Lösung.
Bevor ich anfange, muss ich Ihnen sagen, dass das Dropdown-Auswahlfeld in fast allen Browsern außer IE6 automatisch erweitert wird. Also würde ich eine Browserprüfung durchführen (dh IE6) und das Folgende nur in diesen Browser schreiben. Hier kommt's. Überprüfen Sie zuerst den Browser.
Der Code erweitert das Dropdown-Auswahlfeld auf magische Weise. Das einzige Problem mit der Lösung besteht darin, dass das Dropdown-Menü bei Mauszeiger auf 420 Pixel erweitert wird. Da der Überlauf = ausgeblendet ist, wird die erweiterte Dropdown-Größe ausgeblendet und als 170 Pixel angezeigt. Daher wird der Pfeil auf der rechten Seite der DDL ausgeblendet und kann nicht gesehen werden. Das Auswahlfeld wird jedoch auf 420px erweitert. Das ist es, was wir wirklich wollen. Probieren Sie einfach den folgenden Code aus und verwenden Sie ihn, wenn Sie ihn mögen.
Das obige ist das IE6 CSS. Das gemeinsame CSS für alle anderen Browser sollte wie folgt sein.
quelle
Wenn Sie ein einfaches Dropdown- und / oder Flyout-Menü ohne Übergangseffekte wünschen, verwenden Sie einfach CSS ... Sie können die Unterstützung von IE6 erzwingen: Bewegen Sie den Mauszeiger über alle Elemente mithilfe einer .htc-Datei (css3hover?) mit dem in definierten Verhalten (nur IE6-Eigenschaft) die bedingt angehängte CSS-Datei.
quelle
Probieren Sie es aus. Es ist nicht perfekt, aber es funktioniert und es ist nur für den Internet Explorer und hat keinen Einfluss auf FF. Ich habe das reguläre Javascript für onmousedown verwendet, um nur IE-Fix zu etablieren. Aber die msie von jquery kann auch in onmousedown verwendet werden. Die Hauptidee ist "onchange" und on blur, damit das Auswahlfeld wieder normal wird. Entscheide, dass du für diese eigene Breite bist. Ich brauchte 35%.
quelle
Die obige Antwort von BalusC funktioniert hervorragend, aber es gibt eine kleine Korrektur, die ich hinzufügen würde, wenn der Inhalt Ihres Dropdowns eine geringere Breite als die in Ihrem CSS select.expand definierte hat. Fügen Sie dies der Mouseover-Bindung hinzu:
quelle
Dies ist etwas, was ich getan habe, um anderen Leuten etwas abzunehmen.
Dabei sind cboEthnicity und cboDisability Dropdowns mit Optionstext, der breiter als die Breite der Auswahl selbst ist.
Wie Sie sehen können, habe ich document.all angegeben, da dies nur im IE funktioniert. Außerdem habe ich die Dropdowns in div-Elementen wie folgt eingeschlossen:
Dies sorgt dafür, dass die anderen Elemente beim Erweitern Ihres Dropdowns nicht mehr richtig platziert werden. Der einzige Nachteil hierbei ist, dass die Menulistenanzeige bei der Auswahl verschwindet, aber zurückkehrt, sobald Sie ausgewählt haben.
Hoffe das hilft jemandem.
quelle
Dies ist der beste Weg, dies zu tun:
Es ist genau das gleiche wie bei der BalusC-Lösung. Nur das ist einfacher. ;)
quelle
Ein vollwertiges jQuery-Plugin ist verfügbar. Es unterstützt unterbrechungsfreie Layout- und Tastaturinteraktionen. Weitere Informationen finden Sie auf der Demoseite: http://powerkiki.github.com/ie_expand_select_width/
Haftungsausschluss: Ich habe das Ding codiert, Patches sind willkommen
quelle
http://developer.yahoo.com/yui/examples/button/button-menu-select.html#
quelle
Die Lösung von jquery BalusC wurde von mir verbessert. Wird auch verwendet: Brad Robertsons Kommentar hier .
Fügen Sie dies einfach in eine .js-Datei ein, verwenden Sie die breite Klasse für Ihre gewünschten Combos und geben Sie ihr keine ID. Rufen Sie die Funktion im Onload (oder documentReady oder was auch immer) auf.
So einfach ist das :)
Es wird die Breite, die Sie für die Combo definiert haben, als minimale Länge verwenden.
quelle
Sie können dem ausgewählten Element direkt einen Stil hinzufügen:
<select name="foo" style="width: 200px">
Dieses ausgewählte Element ist also 200 Pixel breit.
Alternativ können Sie eine Klasse oder ID auf das Element anwenden und in einem Stylesheet darauf verweisen
quelle
Bisher gibt es keinen. Sie kennen IE8 nicht, können es jedoch nicht in IE6 und IE7 ausführen, es sei denn, Sie implementieren Ihre eigene Dropdown-Listenfunktion mit Javascript. Es gibt Beispiele, wie dies im Web gemacht wird, obwohl ich keinen großen Vorteil darin sehe, vorhandene Funktionen zu duplizieren.
quelle
Wir haben das gleiche auf einer asp: Dropdown-Liste:
In Firefox (3.0.5) ist die Dropdown-Liste die Breite des längsten Elements in der Dropdown-Liste, die etwa 600 Pixel breit ist oder so ähnlich.
quelle
Dies scheint mit IE6 zu funktionieren und andere nicht zu beschädigen. Die andere nette Sache ist, dass es das Menü automatisch ändert, sobald Sie Ihre Dropdown-Auswahl ändern.
quelle
Der Hedgerwow-Link (die Umgehung der YUI-Animation) in der ersten besten Antwort ist defekt. Ich denke, die Domain ist abgelaufen. Ich habe den Code kopiert, bevor er abgelaufen ist, sodass Sie ihn hier finden können (der Inhaber des Codes kann mich informieren, wenn ich gegen Urheberrechte verstoße, indem ich ihn erneut hochlade).
http://ciitronian.com/blog/programming/yui-button-mimicking-native-select-dropdown-avoid-width-problem/
Im selben Blog-Beitrag schrieb ich über das Erstellen eines exakt gleichen SELECT-Elements wie das normale Element mithilfe des YUI-Schaltflächenmenüs. Schauen Sie mal rein und lassen Sie mich wissen, ob das hilft!
quelle
Basierend auf der von Sai veröffentlichten Lösung wird dies mit jQuery so gemacht.
quelle
Ich dachte, ich würde meinen Hut in den Ring werfen. Ich mache eine SaaS-Anwendung und habe ein Auswahlmenü in eine Tabelle eingebettet. Diese Methode hat funktioniert, aber alles in der Tabelle verzerrt.
Was ich getan habe, um alles besser zu machen, war, die Auswahl in ein Z-indiziertes Div zu werfen.
quelle
Es ist in allen Versionen von IE, Chrome, FF & Safari getestet
// JavaScript-Code
// HTML Quelltext
quelle
Ich musste dieses Problem umgehen und hatte einmal eine ziemlich vollständige und skalierbare Lösung für IE6, 7 und 8 (und natürlich kompatibel mit anderen Browsern). Ich habe hier einen ganzen Artikel darüber geschrieben: http://www.edgeoftheworld.fr/wp/work/dealing-with-fixed-sized-dropdown-lists-in-internet-explorer
Ich dachte, ich würde dies für Leute teilen, die immer noch auf dieses Problem stoßen, da keine der oben genannten Lösungen in jedem Fall funktioniert (meiner Meinung nach).
quelle
Ich habe alle diese Lösungen ausprobiert und keine hat vollständig für mich funktioniert. Das habe ich mir ausgedacht
Stellen Sie sicher, dass Sie jedem Dropdown-Menü in Ihrem HTML-Code eine Dropdown-Klasse hinzufügen
Der Trick hier ist die Verwendung der speziellen Klickfunktion (ich habe sie hier gefunden. Jedes Mal, wenn ein DropDownList-Element mit jQuery ausgewählt wird, wird ein Ereignis ausgelöst ). Viele der anderen hier beschriebenen Lösungen verwenden die Änderung des Ereignishandlers, die gut funktioniert, jedoch nicht ausgelöst wird, wenn der Benutzer dieselbe Option wie zuvor auswählt.
Wie bei vielen anderen Lösungen ist Fokus und Mousedown für den Fall gedacht, dass der Benutzer das Dropdown-Menü in den Fokus stellt. Unschärfe gilt für den Fall, dass er wegklickt.
Möglicherweise möchten Sie auch eine Art Browsererkennung darin einfügen, damit dies nur Auswirkungen hat, z. In anderen Browsern sieht es allerdings nicht schlecht aus
quelle