SlideShare une entreprise Scribd logo
1  sur  100
Télécharger pour lire hors ligne
JOGOS:
Indo Além do
simples CSS
Fernanda Bernardo
Sobre
Desenvolvedora Full Stack
JOGOS
JOGOS
JOGOS
+
JOGOS
+ +
JOGOS
+ +
X
Por que só CSS?
Tchau!
Diversão
Diversão
Desafio
Diversão
Desafio
Aprendizado
Como?
- Eventos
- Animações
- Condições
- Eventos
- Animações
- Condições ESTILOS
Inspiração
Duck Hunt
http://codepen.io/vaielab/full/yoKEF/
Maintaining CSS Style States
http://dabblet.com/gist/2076449
VAMOS COMEÇAR?
Como representar
com HTML e CSS???
Elementos
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Elementos
.chao, .tronco, .galho-direito,
.galho-esquerdo, .timberman {
background: url(‘...’);
position: absolute;
}
.timberman {
z-index: 2;
}
bloco
bloco
bloco
Como fazer
ele viver?
Animação
.timberman {
background-position: 0 0;
animation: timberman-animation 0.5s;
animation-iteration-count: infinite;
animation-timing-function: steps(2);
}
@keyframes timberman-animation {
to {
background-position: -426px 0;
}
}
Animação
.timberman {
background-position: 0 0;
animation: timberman-animation 0.5s;
animation-iteration-count: infinite;
animation-timing-function: steps(2);
}
@keyframes timberman-animation {
to {
background-position: -426px 0;
}
}
animação da
posição do
background
Animação
.timberman {
background-position: 0 0;
animation: timberman-animation 0.5s;
animation-iteration-count: infinite;
animation-timing-function: steps(2);
}
@keyframes timberman-animation {
to {
background-position: -426px 0;
}
}
Como movimentar
para direita/esquerda?
Pseudo-classes
- Dinâmicas: mudam de acordo
com o estado
- Estruturais: selecionar um
elemento na estrutura
Pseudo-classes
Checkbox Hack
Movimentação
Inputs - Radio
<form>
<input type="radio"
name="bloco1"
value="esq" />
<input type="radio"
name="bloco1"
value="dir" />
</form>
Movimentação
<form>
<label for="bloco1-esq"></label>
<label for="bloco1-dir"></label>
<input id="bloco1-esq" type="radio"
name="bloco1" value="esq" />
<input id="bloco1-dir" type="radio"
name="bloco1" value="dir" />
</form>
<form>
<label for="bloco1-esq"></label>
<label for="bloco1-dir"></label>
<input id="bloco1-esq" type="radio"
name="bloco1" value="esq" />
<input id="bloco1-dir" type="radio"
name="bloco1" value="dir" />
</form>
Movimentação
label label
Movimentação
[value="dir"]:checked ~ .timberman {
left: calc(100% - 200px);
transform: scaleX(-1);
}
[value="esq"]:checked ~ .timberman {
left: 50%;
}
Como movimentar
para “cima”?
Transition Árvore
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
</form>
Transition Árvore
.sprite {
transition: transform 1s ease-in;
}
:checked ~ .arvore .sprite {
transform: translateY(190px);
}
Transition Árvore
.sprite {
transition: transform 1s ease-in;
}
:checked ~ .arvore .sprite {
transform: translateY(190px);
}
height de cada tronco
Como manter o
estado do movimento?
<form>
<input type="radio" name="bloco1"/>
<input type="radio" name="bloco2"/>
<input type="radio" name="bloco3"/>
<input type="radio" name="bloco4"/>
<input type="radio" name="bloco5"/>
...
</form>
Transition Árvore
.sprite {
transition: transform 1s ease-in;
}
:checked ~ .arvore .sprite {
transform: translateY(190px);
}
Transition Árvore
.sprite {
transition: transform 1s ease-in;
}
:checked ~ .arvore .sprite {
transform: translateY(190px);
}
:checked ~ :checked ~ .arvore .sprite {
transform: translateY(380px);
}
Transition Árvore
.sprite {
transition: transform 1s ease-in;
}
:checked ~ .arvore .sprite {
transform: translateY(190px);
}
:checked ~ :checked ~ .arvore .sprite {
transform: translateY(380px);
}
...
O que acontece
agora?
Labels
<form>
<label for="bloco1-esq"/>
<label for="bloco2-esq"/>
<label for="bloco3-esq"/>
<label for="bloco4-esq"/>
<label for="bloco5-esq"/>
...
</form>
Movimentação
label:nth-of-type(n+3) {
display: none;
}
Movimentação
[id^="bloco1"]:checked ~ [for^="bloco2"]{
display: block;
}
Movimentação
[id^="bloco1"]:checked ~ [for^="bloco2"]{
display: block;
}
[id^="bloco2"]:checked ~ [for^="bloco3"]{
display: block;
}
Movimentação
[id^="bloco1"]:checked ~ [for^="bloco2"]{
display: block;
}
[id^="bloco2"]:checked ~ [for^="bloco3"]{
display: block;
}
[id^="bloco3"]:checked ~ [for^="bloco4"]{
display: block;
}
Movimentação
[id^="bloco1"]:checked ~ [for^="bloco2"]{
display: block;
}
[id^="bloco2"]:checked ~ [for^="bloco3"]{
display: block;
}
[id^="bloco3"]:checked ~ [for^="bloco4"]{
display: block;
}
...
Como o jogo
acaba?
Obstáculos
Obstáculos
<form>
<label for="bloco1-esq"></label>
<label for="bloco1-dir"></label>
<input class=”vive” ... value="esq"
/>
<input class=”mata” ... value="dir"
/>
<div class="morreu"></div>
…
</form>
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
...
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
...
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
1
n
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
...
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
1
n
1
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
...
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
1
n
1
2
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
…
div.sprite.tronco
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
…
div.sprite.tronco
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
2
Obstáculos
label
label
input
input
label
label
input
input
...
div.arvore
…
div.sprite.tronco
div.sprite.tronco
div.sprite.galho-direito
div.sprite.tronco
2
mata
1
2
Tempo
Tempo
<form>
<label for="bloco1-esq"></label>
<label for="bloco1-dir"></label>
<input class=”vive” value="esq" />
<input class=”mata” value="dir" />
<div class="progresso"></div>
<div class="morreu"></div>
…
</form>
Tempo
.progresso {
animation: preenche 5s;
animation-timing-function: linear;
animation-fill-mode: both;
}
@keyframes preenche {
from { width: 0%; }
to { width: 50%; }
}
Tempo
[name="bloco1"] + .progresso,
[name="bloco1"] + .progresso + .morreu {
animation-delay: 0;
}
Tempo
[name="bloco1"] + .progresso,
[name="bloco1"] + .progresso + .morreu {
animation-delay: 0;
}
[name="bloco2"] + .progresso,
[name="bloco2"] + .progresso + .morreu {
animation-delay: 0.5s;
}
Tempo
[name="bloco1"] + .progresso,
[name="bloco1"] + .progresso + .morreu {
animation-delay: 0;
}
[name="bloco2"] + .progresso,
[name="bloco2"] + .progresso + .morreu {
animation-delay: 0.5s;
}
...
Tempo
.vive:checked + .progresso,
.vive:checked + input + .progresso,
.vive:checked + .progresso + .morreu,
.vive:checked + input + .progresso + .morreu
{
display: none;
}
input
input
.progresso
.morreu
Tempo
.vive:checked + .progresso,
.vive:checked + input + .progresso,
.vive:checked + .progresso + .morreu,
.vive:checked + input + .progresso + .morreu
{
display: none;
}
input
input
.progresso
.morreu
Tempo
.vive:checked + .progresso,
.vive:checked + input + .progresso,
.vive:checked + .progresso + .morreu,
.vive:checked + input + .progresso + .morreu
{
display: none;
}
input
input
.progresso
.morreu
Tela Game Over
.morreu {
background: url(“gameover.png”);
animation: morre 5s;
animation-fill-mode: both;
}
@keyframes morre {
0%, 99% { visibility: hidden; }
100% { visibility: visible; }
}
.morreu {
background: url(“gameover.png”);
animation: morre 5s;
animation-fill-mode: both;
}
@keyframes morre {
0%, 99% { visibility: hidden; }
100% { visibility: visible; }
}
Tela Game Over
demora quase 5s para
mostrar a tela
Tela Game Over
.mata:checked + .morreu,
.mata:checked + input + .morreu {
animation: none;
visibility: visible;
}
.mata:checked ~ .timberman {
background: url('rip.png');
}
Vencer
Vencer
<form>
…
<div class=”arvore”>
<div class=”sprite tronco”></div>
<div class=”sprite galho-direito”></div>
<div class=”sprite galho-esquerdo”></div>
…
</div>
<div class=”timberman”>
<div class=”chao”>
<div class=”venceu”>
</form>
Vencer
.venceu {
display: none;
background-color: green;
}
Vencer
.venceu {
display: none;
background-color: green;
}
[id^=”bloco12”]:checked ~ .venceu {
display: block;
}
Vencer
.venceu {
display: none;
background-color: green;
}
[id^=”bloco12”]:checked ~ .venceu {
display: block;
}
EASY WIN!
Vencer
.venceu {
display: none;
background-color: green;
}
:checked ~ :checked ~ ... ~ :checked ~
.venceu {
display: block;
}
Desafios
Desafios
- Pontuação
- Rotate de cada bloco
- Animation timberman cortando
- Play do jogo
- Responsividade
github.com/FernandaBernardo
/timberman-css
fernanda.bernardo@elo7.com

Contenu connexe

En vedette

Etude EMA - Email Marketing Attitude BtoC 2016 du Sncd
Etude EMA - Email Marketing Attitude BtoC 2016 du SncdEtude EMA - Email Marketing Attitude BtoC 2016 du Sncd
Etude EMA - Email Marketing Attitude BtoC 2016 du SncdContact SNCD
 
Transformando barreiras para ajudar comunidades
Transformando barreiras para ajudar comunidadesTransformando barreiras para ajudar comunidades
Transformando barreiras para ajudar comunidadesFernanda Bernardo
 
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) FFRI, Inc.
 
Ux para aumentar a liberdade dos diabéticos
Ux para aumentar a liberdade dos diabéticosUx para aumentar a liberdade dos diabéticos
Ux para aumentar a liberdade dos diabéticosFernanda Bernardo
 
What we use to build Android apps at Silicon Straits
What we use to build Android apps at Silicon StraitsWhat we use to build Android apps at Silicon Straits
What we use to build Android apps at Silicon StraitsSilicon Straits
 
UX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosUX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosFernanda Bernardo
 
Como fazer um plano de aula para o ensino infantil
Como fazer um plano de aula para o ensino infantilComo fazer um plano de aula para o ensino infantil
Como fazer um plano de aula para o ensino infantilSimoneHelenDrumond
 
4 Rules for the New Underwriting Playbook
4 Rules for the New Underwriting Playbook4 Rules for the New Underwriting Playbook
4 Rules for the New Underwriting PlaybookCognizant
 
DevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwareDevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwarePaulo Lacerda
 

En vedette (11)

Etude EMA - Email Marketing Attitude BtoC 2016 du Sncd
Etude EMA - Email Marketing Attitude BtoC 2016 du SncdEtude EMA - Email Marketing Attitude BtoC 2016 du Sncd
Etude EMA - Email Marketing Attitude BtoC 2016 du Sncd
 
Transformando barreiras para ajudar comunidades
Transformando barreiras para ajudar comunidadesTransformando barreiras para ajudar comunidades
Transformando barreiras para ajudar comunidades
 
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017) An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
An Overview of the Android Things Security (FFRI Monthly Research Jan 2017)
 
Ux para aumentar a liberdade dos diabéticos
Ux para aumentar a liberdade dos diabéticosUx para aumentar a liberdade dos diabéticos
Ux para aumentar a liberdade dos diabéticos
 
What we use to build Android apps at Silicon Straits
What we use to build Android apps at Silicon StraitsWhat we use to build Android apps at Silicon Straits
What we use to build Android apps at Silicon Straits
 
035
035035
035
 
UX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticosUX para aumentar a liberdade de diabéticos
UX para aumentar a liberdade de diabéticos
 
Como fazer um plano de aula para o ensino infantil
Como fazer um plano de aula para o ensino infantilComo fazer um plano de aula para o ensino infantil
Como fazer um plano de aula para o ensino infantil
 
Diptheria
DiptheriaDiptheria
Diptheria
 
4 Rules for the New Underwriting Playbook
4 Rules for the New Underwriting Playbook4 Rules for the New Underwriting Playbook
4 Rules for the New Underwriting Playbook
 
DevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwareDevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de Software
 

Similaire à Jogos com css

JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQueryReinaldo Junior
 
HTML & CSS - Aula 4
HTML & CSS - Aula 4HTML & CSS - Aula 4
HTML & CSS - Aula 4lucampos_si
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
Dicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEBDicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEBMarco Pinheiro
 
Simplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na práticaSimplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na práticaMarianna Cruz Teixeira
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBLuciano Borges
 
HTML & CSS - Aula 2
HTML & CSS - Aula 2HTML & CSS - Aula 2
HTML & CSS - Aula 2lucampos_si
 
Realize mais com HTML 5 e CSS 3 - EDTED / RS
Realize mais com HTML 5 e CSS 3 - EDTED / RSRealize mais com HTML 5 e CSS 3 - EDTED / RS
Realize mais com HTML 5 e CSS 3 - EDTED / RSLeonardo Balter
 
Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Harlley Oliveira
 
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de Programação
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 

Similaire à Jogos com css (16)

JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQuery
 
HTML & CSS - Aula 4
HTML & CSS - Aula 4HTML & CSS - Aula 4
HTML & CSS - Aula 4
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 
XHtml
XHtmlXHtml
XHtml
 
Dicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEBDicas para criação rápida de projectos WEB
Dicas para criação rápida de projectos WEB
 
Simplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na práticaSimplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na prática
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
HTML & CSS - Aula 2
HTML & CSS - Aula 2HTML & CSS - Aula 2
HTML & CSS - Aula 2
 
Html, css, js, ajax
Html, css, js, ajaxHtml, css, js, ajax
Html, css, js, ajax
 
Introdução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, AjaxIntrodução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, Ajax
 
Realize mais com HTML 5 e CSS 3 - EDTED / RS
Realize mais com HTML 5 e CSS 3 - EDTED / RSRealize mais com HTML 5 e CSS 3 - EDTED / RS
Realize mais com HTML 5 e CSS 3 - EDTED / RS
 
Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?Afinal, o que é uma linguagem de programação?
Afinal, o que é uma linguagem de programação?
 
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
Curso de programação para iniciantes: Afinal, o que é uma linguagem de progra...
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 

Plus de Fernanda Bernardo

Plus de Fernanda Bernardo (16)

Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?Reinventar a roda a cada novo framework js, vale a pena?
Reinventar a roda a cada novo framework js, vale a pena?
 
Jogos 3.0 - MVP Conf
Jogos 3.0 - MVP ConfJogos 3.0 - MVP Conf
Jogos 3.0 - MVP Conf
 
Jogos 3.0
Jogos 3.0Jogos 3.0
Jogos 3.0
 
Palestrantes são seres super mágicos?
Palestrantes são seres super mágicos?Palestrantes são seres super mágicos?
Palestrantes são seres super mágicos?
 
Jogos: indo além do simples CSS 3.0
Jogos: indo além do simples CSS 3.0Jogos: indo além do simples CSS 3.0
Jogos: indo além do simples CSS 3.0
 
Ecmascript - Versão extendida
Ecmascript - Versão extendidaEcmascript - Versão extendida
Ecmascript - Versão extendida
 
EcmaScript
EcmaScriptEcmaScript
EcmaScript
 
Descomplicando o alinhamento com css
Descomplicando o alinhamento com cssDescomplicando o alinhamento com css
Descomplicando o alinhamento com css
 
Jogos com css 2.0
Jogos com css 2.0Jogos com css 2.0
Jogos com css 2.0
 
Isomorfismo pra quê?
Isomorfismo pra quê?Isomorfismo pra quê?
Isomorfismo pra quê?
 
A influência dos usuários no desenvolvimento do Talk7
A influência dos usuários no desenvolvimento do Talk7A influência dos usuários no desenvolvimento do Talk7
A influência dos usuários no desenvolvimento do Talk7
 
Front end ++: seo e flexbox
Front end ++: seo e flexboxFront end ++: seo e flexbox
Front end ++: seo e flexbox
 
Workshop android
Workshop androidWorkshop android
Workshop android
 
Heroku
HerokuHeroku
Heroku
 
Diabetes Mais Doce - Versão 1.0
Diabetes Mais Doce - Versão 1.0Diabetes Mais Doce - Versão 1.0
Diabetes Mais Doce - Versão 1.0
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 

Jogos com css