Checkbox personalizzati in javascript e css

Uno dei problemi che troviamo più frequentemente durante la realizzazione di un sito web è la personalizzazione di alcuni elementi, uno di questi è l’input checkbox.

In questa guida vi mostrerò come poter creare dei “finti checkbox” che sostituiranno i nostri input originali e, dato che questi nuovi elementi saranno dei comunissimi div sarà possibile personalizzarne il css senza alcuna restrizione.

See the Pen Checkbox javascript and CSS – Targetweb.it by Riccardo Mel (@riccardomel) on CodePen.

Per prima cosa creiamo il css del nostro nuovo checkbox

.customCheckbox {
    width: 60px;
    height: 30px;
    border-radius: 15px;
    float: left;
    background-color: rgb(123, 129, 123);
    position: relative;
}

.customCheckbox::after {
    content: '';
    display: block;
    position: absolute;
    top: 2px;
    left: 2px;
    width: 26px;
    height: 26px;
    border-radius: 100%;
    background: #fff;
    transition-duration: .3s;
    transition-timing-function: ease;
}

.customCheckbox.active {
    background-color: rgb(21, 146, 21);
}

.customCheckbox.active::after {
    left: calc(100% - 28px);
}

Abbiamo creato uno stile per l’elemento .customCheckbox (questo sarà il div che sostituirà i checkbox) e tramite ::after è stato aggiunto al suo interno un elemento che cambierà posizione a seconda se il div principale avrà la classe active oppure no, per fare in modo che l’effetto non sia statico abbiamo assegnato la proprietà transition-duration così da farlo cambiare tramite un animazione e non istantaneamente

Ora dobbiamo fare in modo che i checkbox vengano nascosti e al loro posto venga inserito il nostro nuovo div, per farlo utilizzeremo javascript

var checkboxes = document.querySelectorAll("input[type=checkbox]")
checkboxes.forEach(function (elem) {
    var box = createBox()
    if (elem.checked) box.classList.add("active")
    elem.before(box)
    elem.style.display = "none"

    box.addEventListener('click', function () {
        this.nextSibling.click()
        this.classList.toggle("active", this.nextSibling.checked)
    })
})

function createBox() {
    var box = document.createElement('div')
    box.classList.add('customCheckbox')
    return box
}

Come potete vedere abbiamo nascosto tutti gli input di tipo checkbox e prima di questi è stato inserito il nostro nuovo div con classe “customCheckbox”.

Al click dell’input sarà aggiunta o tolta a questo la classe “active” a seconda se l’input suo parente (cliccato dinamicamente dopo questo evento) sarà checked oppure no.

Spero che questa guida vi sia stata d’aiuto e per qualsiasi cosa non esitate a chiedere nei commenti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

youtube-player-image
Up Next:

Wordpress: embed responsive di video Youtube o social posts

Wordpress: embed responsive di video Youtube o social posts