[CSS] Radiobutton vervangen door afbeelding

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

  • NoepZor
  • Registratie: Maart 2003
  • Laatst online: 11:35
Hallo,

Weet iemand of het mogelijk is om een radiobutton te vervangen door een afbeelding. Ik wil graag een kruisje tonen als de radiobutton niet geselecteerd is en een vinkje als deze wel geselecteerd is. Ik heb het geprobeerd met een background image, maar deze blijft onder de button zitten. Bij Firefox zie ik helemaal geen achtergrondafbeelding. Op google kon ik ook geen relevante informatie vinden.

Weet iemand of dit mogelijk is, of wellicht op een andere manier?

De wijzen komen uit het Oosten!


  • André
  • Registratie: Maart 2002
  • Laatst online: 14:48

André

Analytics dude

Dump de radiobutton of maak hem invisible. Maak daarna een afbeelding die onclick heen en weer switched tussen beide plaatjes. Op de achtergrond hou je dan de waarde in een input type=hidden bij :)

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Dit is wel mogelijk, alleen niet in Internet Explorer, tenzij je javascript wilt gaan gebruiken.

Je kunt dit doen met behulp van labels. Je zet dan een <input type="radio" id="option1"><label for="option1"> in je document, waarbij je de namen dan natuurlijk vervangt door de namen van jouw formulier.

Vervolgens verberg je de radiobutton met CSS, en laat je de achtergrond van de label afhangen van het veld waar het achter staat. Zoiets:

Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
input[type="radio"]
{
    display: none;
}

input[type="radio"] + label
{
    height: 8px;
    width: 8px;
    background-image: url('images/radio_not_checked.png');
}

input[type="radio]:checked + label
{
    height: 8px;
    width: 8px;
    background-image: url('images/radio_checked.png');
}


Alleen nog even de namen van de plaatjes en hoogte en breedte veranderen en klaar is NoepZor :) .

Ik ontken het bestaan van IE.


  • NoepZor
  • Registratie: Maart 2003
  • Laatst online: 11:35
Oke.. daar was ik zelf nog niet op gekomen, om de label attribuut daarvoor te misbruiken. Hartelijk dank, ik ga het zeker proberen.

De wijzen komen uit het Oosten!


  • benoni
  • Registratie: November 2003
  • Niet online
cyberstalker schreef op vrijdag 10 november 2006 @ 20:30:
Dit is wel mogelijk, alleen niet in Internet Explorer, tenzij je javascript wilt gaan gebruiken.
Zo'n Javascript oplossinkje kan ik er nog wel bij dumpen voor wie 'r wat aan heeft. Deze gebruik ik zelf niet alleen voor custom checkboxes, maar ook om stukken van een formulier 'open te klappen' aan de hand van een checkbox of radio button.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// tick()
//
// Switches visibility of HTML code blocks for checkboxes and radio buttons.
//
// Author: benoni, 2005-2006. Use under GPL2 license.
//
// Usage sample:
//
// <input id="me" class="invisible" type="checkbox" name="name" value="check" />
// <a id="me_0" class="check0 normal" href="javascript:tick('me')">Unchecked</a>
// <a id="me_1" class="check1 hidden" href="javascript:tick('me')">Checked</a>
//
// The 'invisible' class needs 'visibility: hidden;' in the stylesheet.
// Add 'display: none;' for the 'hidden' class. You can add background
// images for the 'check0' and 'check1' classes to have custom buttons.
//
function tick() {
    var a, i, id, it, name, on;
    var list = new Array();

    for (a = 0; a < arguments.length; a++) {
        it = arguments[a];
        on = '';
        list = it.split('=');
        if (list.length) {
            it = list[0];
            on = list[1];
        }

        // Find corresponding checkbox or radio button:
        it = document.getElementById(it);
        if (it && it.form) {

            // Set or toggle the value:
            if (it.type == 'radio' || it.type == 'checkbox') {
                switch (on) {
                    case '1': {
                        it.checked = 1;
                        break;
                    }
                    case '0': {
                        it.checked = 0;
                        break;
                    }
                    default: {
                        it.click();
                    }
                }
            }
            if (it.type == 'submit') {
                it.form.submit();
            }
            if (it.type == 'reset') {
                it.form.reset();
            }
            if (it.type == 'text') {
                it.value = on;
            }

            // List form elements:
            list = it.form.elements;

            // Find dependant HTML blocks and toggle visibility:
            for (i = 0; i < list.length; i++) {
                if (list[i].type == 'radio' || list[i].type == 'checkbox') {
                    id = list[i].id;
                    on = list[i].checked;
                    it = document.getElementById(id + '_0');
                    if (it && it.style) {
                        it.style.display = on ? "none" : "block";
                    }
                    it = document.getElementById(id + '_1');
                    if (it && it.style) {
                        it.style.display = on ? "block" : "none";
                    }
                }
            }
        }
    }
}