CSS-Style für Select-Boxen

/ Autor: Albrecht, 23 Jan 2009

Das HTML-Element <select> lässt sich kaum optisch anpassen. Primitivste Änderungen, wie z.B. die Breite oder der Border sind hier schon beinahe das höchste der Gefühle. Wenn man aber den Anspruch hat, wirklich optisch ansprechende Webauftritte zu erstellen, kann das nicht zufrieden stellen. Abhilfe schafft hier eine Lösung mit JavaScript.

Die Idee, die dahinter steckt ist folgende: Mit JavaScript wird das zu verändernde <select>-Element angesprochen. Dies kann entweder mit einer Schleife erfolgen, welche das ganze Dokument durchsucht oder selbstverständlich auch explizit für einzelne Elemente. Die entsprechenden Elemente werden anschließend durch einen neuen HTML-Code ersetzt, der ungefähr so aussehen könnte:

<div class="style-me">
	<span class="show-text" id="show-text"></span>
	<img src="dropdown-arrow.gif" alt="" />
	<select>...</select>
</div>

Das ursprüngliche <select>-Element wird hierbei nicht weg geworfen, sondern per CSS mit position: absolute; bzw. position: relative; über das neue <div> gelegt und anschließend kann die Opazität auf 0 gesetzt werden.

Hier ein kleines Beispiel zur Verdeutlichung. Links das fertige Element. Rechts zur Demonstration mit einem halbdurchsichtigen <select>-Element.

Transparente Selectbox

Dadurch, dass die Selectbox noch existiert und oben liegt, kann der User ganz normal darauf klicken und in der Selectbox die gewünschte Option auswählen. Die Selectbox erhält dann den entsprechenden Wert, der beim Absenden des Formulars regulär mitgeschickt wird. Wir müssen lediglich mit einem onchange-Event den Text des gewählten Wertes auslesen und in unser neu erstelltes HTML-Element schreiben.

Wir können anschließend das neue <div>-Element beliebig mit CSS manipulieren, eine Hintergrundgrafik vergeben, die Schrift ändern. Außerdem habe ich im Beispiel-Code oben eine Grafik mit eingefügt. Diese kann beliebig gewählt werden, so dass die perfekte Illusion einer gestylten Selectbox entsteht.

8 Responses to “CSS-Style für Select-Boxen”

  1. Florian Says:
    16 Dez 2009

    Sieht ja super aus! Aber wie funktioniert das mit dem onchange, damit ich die ausgewählte option auch sehe?

    thx FF

  2. Hi Albrecht,

    die Methode ist gut – einfach und elegant. Allerdings muss ich darauf hinweisen dass sie nicht im IE 6 funktioniert. Und solange unsereins den auf Corporate Ebene noch unterstützen muss kann man die so leider nicht verwenden. Vielleicht klappts ja 2010 ;)

    Grüsse aus Hamburg

  3. [...] [...]

  4. Rene B. Says:
    17 Feb 2010

    Sieht super aus, funktioniert sogar bei IE 6!

    Nice!

  5. Kai Says:
    23 Feb 2010

    Klappt echt gut, nur leider bekomm ich auch das OnChange nicht hin, kannst das in dein Beispiel einbauen?

  6. albrechtk Says:
    25 Feb 2010

    Hallo Kai,

    wo genau liegt dein Problem? Aussehen könnte das in etwa so:

    <select name=”foo” onchange=”updateText(this);”>…</select>

    Und hier dazu die JavaScript-Funktion:

    function updateText(selectbox) {
    document.getElementById(‘fakebox’).innerHTML = selectbox.value;
    }

  7. Sebastian Says:
    05 Apr 2010

    Die Lösung ist zwar echt simpel aber gut, ein Problem (was sich meinem Kenntnisstand nach nicht beheben lässt) hat sie allerdings: Die Bevel-Border des Option-Elements, welche nicht änderbar ist…. :-/

    Ich denke ich werde das auf meiner Seite so machen dass ich nen js die options auslesen lasse, ne Liste erstelle die dann an dem “head-div” positioniert wird.. und dann jedes Element der Liste mit nem OnKlick-Event versehen oder hat jemand bessere Vorschläge zur Hand?

  8. [...] Dieser Eintrag wurde auf Twitter von onion_papa erwähnt. onion_papa sagte: http://tinyurl.com/y3m7tfz CSS-Style für Select-Boxen | zeroseven labs [...]

Leave a Reply