Dia 20/2019 - Interruptor customizado

Desafio #92daysofcode que fiz no final de 2019. Nesse artigo temos o dia 20, mostrando o uso da pseudo-classe :checked, com o seletor de irmão seletor + seletor.

Pré-visualização

Código

Começamos com a estrutura do HTML.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Day 20</title>
<style>
*, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing:border-box; }
html { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; }
* { margin: 0; padding: 0; list-style: none; }
body { background: #eee; font-family: Arial, Helvetica, sans-serif; }
.container { margin: 20px auto; max-width: 992px; width: 100%; }
</style>
<link rel="stylesheet" type="text/css" href="./day-20.css">
</head>
<body>
<div class="container">
<!-- switch -->
</div>
</body>
</html>
1
2
<input class="input" name="switch" id="toggle" type="checkbox">
<label class="label" for="toggle"></label>
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
.input { display: none; }

.label {
background-color: #fff;
border-radius: 30vw;
border: 1vw solid #ccc;
cursor: pointer;
display: inline-block;
height: 10vw;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
user-select: none;
width: 30vw;
}

.label:before {
background-color:#ccc;
border-radius: 50%;
border: 1vw solid #bbb;
content: '';
height: 10vw;
position: absolute;
top: -10%;
left: -3%;
transition: all 350ms cubic-bezier(0, 0.95, 0.38, 0.98), background 150ms ease;
transform-origin: right center;
width: 10vw;
}

.input:checked + .label:before { background: #c9a1e2; border-color: #995dbf; transform: translateX(198%); }
.input:checked + .label { border-color: #995dbf; }

.label:after { content: "OFF"; display: block; position: absolute; bottom: -50px; text-align: center; width: 100%; }
.input:checked + .label:after { content: "ON"; }

Conclusão

A postagem original pode ser vista no meu Instagram e o código está acessível no meu Github.

Ao fechar este aviso ou continuar navegando no site Nerd Calistênico, você aceita o uso de cookies.

Este site usa cookies para assegurar a melhor experiência para os nossos usuários. Consulte nossa política de privacidade.

Uma nova versão está disponível. Clique aqui para atualizar.