Dia 1/2019 - Smile com CSS

No ano passado, fiz um desafio de 92 dias, que registrei no meu instagram. Para movimentar mais esse blog, estarei trazendo os 92 desafios. Assim, me desperta a inspiração de mais artigos.

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
<!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 1</title>
<link rel="stylesheet" type="text/css" href="./day-1.css">
</head>
<body>
<!-- smile -->
</body>
</html>

O trecho de marcação é bem simples.

1
2
3
4
5
<div class="smile">
<div class="eye left"></div>
<div class="eye right"></div>
<div class="mouth"></div>
</div>

Mesmo em um código simples, gosto de usar a propriedade box-sizing, para alterar a propriedade padrão da box model e não ter problemas com as larguras. Vamos colocar um background, para dar mais destaque.

1
2
3
4
5
6
7
8
9
10
11
12
*, *: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
}

body { background: #eee; }

Para finalizar temos o CSS que pode ser implementado de algumas maneiras. Nesse exemplo, não usei pseudo-elementos. Podería apenas criar a tag <div class="eye"></div> com o after e before.

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
.left { float: left;}
.right { float: right;}

.smile {
position: relative;
z-index: 0;
background-color: yellow;
border: 6px solid #000;
width: 150px;
height: 150px;
border-radius: 100px;
margin: 50px auto;
box-shadow: 2px 2px 1px #ccc;
}

.eye {
position: relative;
width: 30px;
height: 30px;
border-radius: 100px;
background: #000;
margin-top: 35px;
margin-left: 30px;
}

.eye.right {
margin-left: 0;
margin-right: 30px;
}

.mouth {
position: absolute;
z-index: 1;
top: 10px;
left: 0;
right: 0;
height: 110px;
width: 115px;
margin: 0 auto;
border-bottom: 8px solid #000;
border-radius: 100%;
}

Podemos simplificar bastante e ao invés de usar 4 tags, podemos usar 2 tags. Com os pseudo-elementos, teríamos essas mudanças:

1
2
3
<div class="smile">
<div class="eye"></div>
</div>
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
.smile {
position: relative;
z-index: 0;
background-color: yellow;
border: 6px solid #000;
width: 150px;
height: 150px;
border-radius: 100px;
margin: 50px auto;
box-shadow: 2px 2px 1px #ccc;
}

.smile::after {
content: "";
display: inline-block;
position: absolute;
z-index: 1;
top: 10px;
left: 0;
right: 0;
height: 110px;
width: 115px;
margin: 0 auto;
border-bottom: 8px solid #000;
border-radius: 100%;
}

.eye::before,
.eye::after {
content: "";
display: inline-block;
position: relative;
width: 30px;
height: 30px;
border-radius: 100px;
background: #000;
margin-top: 35px;
margin-left: 30px;
}

.eye::before { float: left; }

.eye::after {
float: right;
margin-left: 0;
margin-right: 30px;
}

Melhorias

Se temos um elemento formando um quadrado e queremos usar a propriedade border-radius, para que o elemento forme uma bola, podemos usar o valor border-radius: 50%;, ao invés de usar a unidade em pixels.

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.