Miguel Costa
"A serious and good philosophical work could be written consisting entirely of jokes."
Podem -- e devem -- ser usados para relembrar, nunca para aprender de raiz!
HyperText Markup Language
Estrutura
Comportamento
Estilo/Aspeto
html
Hypertext markup language
css
Cascading Stylesheet
js
JavaScript
Estrutura = O que existe
Titulos
Links
Imagens e media
Textos
Listas
Estilo = Aspeto
Cores
Posicionamentos
Efeitos
Tipos de letra
Tamanhos
Comportamento
Quando preencho o campo de pesquisa...
Alterar algo em resposta a um evento
Resultados mudam
dinamicamente!
Comportamento
Evento - Resposta
Quando preencho um campo...
Com scroll para baixo...
Quando carrego em algo...
Quando carregar todas as imagens
Alterar algo com base em eventos
Eventos
Eventos
Respostas
Escondo um preloader?
Mudo uma classe?
Apago um elemento?
Mostro um elemento?
<p class="texto">
Texto sobre um gato
</p>
Fim (tag)
Start (tag)
Atributo
<a href="http://www.google.com">Clica-me!</a>
<img src="http://placekitten.com/200/300" alt="sou um gato!">
nome do atributo
valor do atributo
vários atributos? Separados por espaços!
não é preciso fechar esta tag?
<p>
Visita <a href="http://www.google.pt/">este link</a> para pesquisares!
</p>
Link misturado com o resto do conteúdo
<html></html>
<body></body>
<div></div>
<h1></h1>
<p></p>
<span></span>
<ul></ul>
<li></li>
<meta />
<head></head>
<input />
<form></form>
<img />
<a></a>
<header></header>
<article></article>
<section></section>
<footer></footer>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Título da Página</title>
</head>
<body>
</body>
</html>
Tudo o que é visível vem para aqui!
Criar ficheiro com extensão .html
(ex.: index.html)
Qualquer editor de texto simples serve
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Introdução ao HTML</title>
<link rel="icon" href="caminho/para/imagem/com.formato">
</head>
<body>
</body>
</html>
Conjunto de caracteres com suporte para acentos
Cuidado com os tamanhos do favicon!
<head>
</head>
Tags para estruturar documento
Elementos para conteúdo
Elementos inline para agrupar e personalizar excertos de texto
Boas práticas
Tags para conteúdo (media)
atributo src?
src, a origem do recurso
caminhos (links) podem ser:
<button type="button">
Clica-me
</button>
Tags para interação
Tags para interação
Tags para interação
Tags para interação
<form>
<div>
<label for="nome">Nome</label>
<input type="text" id="nome" name="nome">
</div>
<div>
<label for="email">E-mail</label>
<input type="email" id="email" name="email">
</div>
<div>
<label for="mensagem">Mensagem:</label>
<textarea id="mensagem" name="mensagem"></textarea>
</div>
<div>
<label for="quer-spam">Quer Spam?</label>
<input type="checkbox" name="spam" id="quer-spam"></input>
</div>
<div>
<label for="assunto">Assunto</label>
<select name="assunto" id="assunto">
<option>Recrutamento</option>
<option>Tagalerice</option>
</select>
</div>
</form>
Id?
div?
Tantas tags e atributos novos...
falamos do "name" depois...
<p>
Texto sobre um gato
</p>
cor de texto?
cor de fundo?
tipo de letra
tamanho de letra
negrito, sublinhado...
dar aspeto diferente a esta palavra?
declaration = "propriedade: valor"
CSS - definir estilos para elementos comuns
fonte: C-Sharp corner
seletor: que tipo de elementos vão ser afetados?
/* Afecta todos os paragrafos */
p {
color: hotpink;
margin-top: 12px;
}
/* Afecta todos elementos com classe 'highlight' */
.highlight {
border-style: solid;
border-color: pink;
}
/* Afecta todos elementos do tipo 'p'
descendentes de elementos
de classe 'highlight' */
.highlight p {
border-style: solid;
border-color: pink;
}
/* Estilo de span quando o rato passa por cima */
span:hover {
font-weight: bold;
}
combinador de descendência (o espaço)
os mais frequentes!
body {
font-family: 'proxima nova';
font-size: 12px;
background-color: gray;
}
h1, h2, h3 {
/* só maiúsculas */
text-transform: uppercase;
}
p {
color: gray;
}
.quote {
font-style: italic;
font-weight: bold;
}
.has-image-in-background {
/* não esquecer de definir 'url' */
background-image: url('http://placekitten.com/1221/723');
background-position: center center;
/* ocupa 100% da largura. 'contain' seria outro valor possível */
background-size: cover;
}
pixels (há outras unidades)
há fontes genéricas (serif, sans-serif...) e personalizadas
pode também ser hexadecimal, rgb, rgba...
classe começa com '.'
vários seletores (separados por ',')
<!doctype HTML>
<html>
<head>
<!-- referenciar ficheiro externo de estilos aqui... -->
<link rel="stylesheet" href="style.css">
</head>
</html>
o nome do teu ficheiro
<!doctype HTML>
<html>
<head>
<!-- meter estilos dentro desta tag -->
<style>
...
</style>
</head>
</html>
corre-se o risco de ficar com um ficheiro demasiado grande!
Propriedades CSS comuns, organizadas por categorias
You don’t need to commit to memorizing every CSS Property and Value, as there are good places to look them up
-- Rachel Andrew, How to Learn CSS
Imagem via CSSTricks
Imagem via Techinfoweb
imagens via formget
demo e explicação via CSS Tricks
demo e explicação via CSS Tricks
imagens e explicação via mayvendev
"tamanho da sombra"
pode haver mais que uma sombra (separadas por vírgula)
efeito "blur"
imagens e explicação via mayvendev
sombra "entra" dentro do bloco
imagens e explicação via mayvendev e catswhocode
4 sombras no mesmo elemento
(separadas por vírgulas)
Inspetor Google Chrome
Block
Inline
Propriedade de estilo: "display"
<p>
Visita <a href="http://www.google.pt/">este link</a> para pesquisares!
</p>
<p>
E pronto!
</p>
Visita este link para pesquisares!
E pronto!
inline
alinhado com texto!
bloco
comprimento da tela
não se alinha com demais
NÃO experimentem em elementos inline ('span')
exemplo box model
<p>O rato roeu a rolha da garrafa</p>
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
Por defeito, "blocos" (como <p>) ocupam o espaço todo em comprimento
borders são boas para ter noção do tamanho de um elemento*
*outline é melhor ainda, mas agora não...
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) border-top-left-radius: 12px; border-top-right-radius: 12px; border-bottom-left-radius: 12px; border-bottom-right-radius: 12px;">O rato roeu a rolha da garrafa</p>
ou a abreviatura
border-radius: 12px;
para todos os cantos!
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) margin-top: 50px; margin-left:40px; ">O rato roeu a rolha da garrafa</p>
Elemento é "empurrado", mas mantém tamanho em altura!
margin-left
margin-top
50px
40px
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) margin-top: 50px; margin-left:40px; margin-right: 40px;">O rato roeu a rolha da garrafa</p>
Ficou
-- centrado --
margin-left
margin-top
50px
40px
40px
margin-right
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) margin-top: 50px; margin-left:40px; ">O rato roeu a rolha da garrafa</p>
Espaçamento interno
Elemento tem agora +50px de altura!
50px
40px
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
Comprimento do "pai" (neste caso, a janela do browser)
<p style="(...) width: 180px">O rato roeu a rolha da garrafa</p>
Comprimento "fixo"
Altura ajusta-se ao conteúdo automaticamente
antes de irmos para a altura
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) width: 880px; margin-top: 50px; margin-left: auto; margin-right: auto;">O rato roeu a rolha da garrafa</p>
auto
auto
distribui margens laterais uniformemente consoante o espaço que sobra
exemplo box model
<p style="border-width: 2px; border-color: red; border-style: solid">O rato roeu a rolha da garrafa</p>
<p style="(...) height: 400px;">O rato roeu a rolha da garrafa</p>
altura automática (depende do conteúdo)
400px
Cálculo do tamanho da caixa
Fonte: Scott Domes, FreeCodeCamp
fonte: codeburst
.parent {
display: flex;
/* alinhar no eixo "cruzado" (verticalmente, por defeito) */
/* center - centra elementos */
/* flex-start - posiciona els. no topo */
/* flex-end - posiciona els. no fundo */
align-items: center;
/* alinhar TODO o conteúdo no eixo principal (horizontalmente, por defeito) */
/* center - centrado */
/* space-between - espaço equidistante entre elementos */
/* space-around - espaço entre elementos no meio (incl. início e fim) */
justify-content: center;
align-content: center; /* center ou flex-start ou flex-end */
/* troca os eixos principais e cruzado */
/* também pode ser 'column' */
flex-direction: row;
/* se for 'nowrap', a altura dos itens vai ser toda reajustada */
flex-wrap: wrap;
}
.parent {
display: flex;
align-items: center;
justify-content: center;
}
.child {
/* ... */
}
.child {
/* define tamanho básico,
proporção de crescimento (quando possível)
e proporção de decrescimento (idem) */
/*
Exemplo: blocos de tamanho 300px
mas que crescem uma fração quando aplicável
e decrescem igualmente
*/
flex-grow: 1;
flex-shrink: 1;
flex-basis: 300px;
// ou
// flex: 1 1 300px;
}
.parent {
display: flex;
/* alinhar no eixo "cruzado" (verticalmente, por defeito) */
/* center - centra elementos */
/* flex-start - posiciona els. no topo */
/* flex-end - posiciona els. no fundo */
align-items: center;
/* alinhar TODO o conteúdo no eixo principal (horizontalmente, por defeito) */
/* center - centrado */
/* space-between - espaço equidistante entre elementos */
/* space-around - espaço entre elementos no meio (incl. início e fim) */
justify-content: center;
align-content: center; /* center ou flex-start ou flex-end */
/* troca os eixos principais e cruzado */
/* também pode ser 'column' */
flex-direction: row;
/* se for 'nowrap', a altura dos itens vai ser toda reajustada */
flex-wrap: wrap;
}
Propriedades CSS
Position: static e Position: relative (to itself)
Por defeito, todos os elementos têm "position: static"
"position: relative", podemos posicionar blocos com "top, left, right, bottom"
restantes blocos comportam-se como se o bloco "reposicionado" estivesse na sua posição normal
position: relative;
top: 12px;
left: 6px;
position: relative;
top: -12px;
left: -16px;
Position: relative
neste item de perfil, a fotografia podia muito bem ter algo como position: relative, com top: 0 e left: 150px
150px para a esquerda
(não contei, estou a inventar!)
o resto do conteúdo não foi "empurrado" pela imagem
150px
imagem via IGN
Position: absolute
Posicionamento em relação ao primeiro elemento pai que não seja estático (ou ao body)
elemento "flutua", deixa de influenciar posicionamento dos outros elementos
position: absolute;
top: 12px;
right: 6px;
position: absolute;
top: 12px;
right: 6px;
position: relative
position: static
relativo ao "body"
relativo ao
bloco vermelho
Position: absolute
Útil para posicionar sub-elementos livremente dentro de outros
fonte: The FWA
Position: absolute
fonte: Final Fantasy Fandom
Submenus e avisos fazem parte do menu, mas saem posicionam-se livremente sem influenciar o posicionamento dos outros blocos
Menu Principal
Submenus e avisos "flutuam" e podem ficar por cima do menu principal
Ícone mão apontadora pertence a submenu, mas sai para fora deste, e não contribui para o seu tamanho, tal como o menu e avisos
Position: fixed
Elemento fica posicionado em relação ao viewport (a janela do browser), acompanhando ações de scroll
Elemento "flutua", deixa de influenciar posicionamento dos outros elementos
Usado frequentemente para cabeçalhos e barras de navegação fixas, assim como modais e avisos...
Botão acompanha scroll
Se os elementos forem blocos e não tiverem comprimento definido (width: auto), eles deixam de ter o comprimento do elemento pai.
Mas se fizerem 'width: 100%', os elementos ficarão com o comprimento do bloco em relação ao qual são posicionados!
width: auto = 100% comprimento do pai
width: auto = comprimento do conteúdo
Estados possíveis de elementos, identificáveis por CSS
definidos com ':' à esquerda, logo a seguir ao seletor de elementos
/* exemplo */
a:hover {
color: red;
}
Mais exemplos
Dificuldades? Usem um gerador!
há rotateX, rotateY e rotateZ
deg = degrees (graus)
/* dá para combinar várias (separadas por ',' */
seletor-qualquer {
transform: rotate(30deg), translate(10px, 20px), scale(2);
}
há scaleX, scaleY
decimais (como 0.5) também funcionam!
imagens via Smashing Magazine
autor: vineeth.TR
Por agora, foco apenas nos primeiros!
/* exemplos de aplicações de transition */
.texto-que-muda {
color: red;
transition: color 240ms linear;
}
/* transição será gradual */
.texto-que-muda:hover {
color: green;
}
propriedade
tempo de transição (opcional)
duração (pode ser ms ou s)
/* pode haver mais do que uma propriedade, todas separadas por ',' */
seletor-para-uma-tag-qualquer {
transition: color 240ms linear, width 3s ease-in-out;
}
IMPORTANTE
para a transição funcionar, é preciso
Basicamente, são transições automáticas e com mais que um ponto-chave (keyframes)
@keyframes nome-da-animacao {
from {
opacity: 1;
color: hotpink;
font-size: 12px;
}
to {
opacity: 0.2;
color: rebeccapurple;
font-size: 21px;
}
}
/* para este exemplo, usei classe. Mas claro, podia ser um seletor qualquer! */
.seletor-qualquer {
animation-duration: 3s;
animation-name: nome-da-animacao;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-timing-function: linear;
}
Com isto, quando animação acaba, segue o caminho inverso antes de começar de novo
Com isto, animação repete-se sempre!
Por defeito, progressão não é linear
Com mais momentos-chave
@keyframes movimento {
0% {
top: 0;
left: 0;
transform: rotate(0deg);
}
30% {
top: 20px;
left: 40px;
transform: rotate(360deg);
}
60% {
top: 30px;
left: 140px;
transform: rotate(0deg);
}
100% {
top: 20px;
left: 100px;
transform: rotate(45deg);
}
}
.seletor-qualquer {
position: relative;
width: 40px;
height: 40px;
background-color: hotpink;
border: 1px solid blue;
animation-duration: 6650ms;
animation-name: movimento;
}
a 30% da duração...
no início
no fim
Adaptar aspeto do site consoante o "meio" (dispositivo, papel...)
Porque a web não é só para o teu computador!
imagem via jotform
imagem via tutorialspoint
/* no ficheiro CSS */
@media condicao-ou-contexto {
/* código CSS específico */
}
também podem adicionar outro ficheiro CSS ao projeto, mas com um atributo especial no <link>
/*
exemplo. Regras para impressão
*/
/* ... bla bla bla codigo CSS bla bla bla... */
@media print {
/* esconder elementos com classe 'header' ou 'footer' em impressão */
.header, .footer {
display: none;
}
/* AVANÇADO: mostrar links em impressão*/
a:after {
content: "("attr(href)")";
}
}
pseudo-elemento?
:after é usado para adicionar conteúdo NO FINAL de cada elemento do seletor
que conteúdo vai aparecer no final de cada<a>?
atributo href
(<a href="...">...</a>)
"display: none;" faz elementos desaparecerem
... e já agora, mais uns truques!
Dica: não tentem mudar fundo do body em @print!
/* em telas que não tenham mais de 500px de "width" */
@media screen and (max-width: 500px) {
p {
background: red;
}
}
/* em telas que não tenham menos de 600px de "width" */
@media screen and (min-width: 600px) {
.uma-classe-qualquer {
font-size: 32px;
}
}
... e já agora, mais uns truques!
/*
quando o comprimento seja maior que a altura
*/
@media (orientation:landscape) {
uma-tag-qualquer {
background: red;
}
}
/*
em telas que não tenham mais de 500px de "width"
E onde a altura seja maior que o comprimento
*/
@media screen and (max-width: 500px) and (orientation:portrait) {
uma-tag-qualquer {
background: blue;
}
}
Experimentem no codepen e redimensionem!
imagem via Google Developers
ativar "Responsive mode"
<html>
<head>
<!-- link para o ficheiro css, ou tag <style> -->
</head>
<body>
</body>
</html>
body {
background: hotpink;
}
@media (max-width: 600px) {
body {
background: blue;
}
}
mas... se a tela tem 375px de comprimento, não deveria mostrar azul?
queremos que se comporte como se tivesse uma resolução menor, senão fica impercetível
iPhone tem uma resolução muito maior! Renderiza a página assumindo uma resolução maior
<html>
<head>
<!-- link para o ficheiro css, ou tag <style> -->
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
</body>
</html>
body {
background: hotpink;
}
@media (max-width: 600px) {
body {
background: blue;
}
}
agora, o que conta é o comprimento do dispositivo, não a sua resolução!
TL;DR - Usem classes!
<div class="banner">
<h1 class="banner-title">
Banner Title
</h1>
</div>
Box-sizing "border-box" para tudo
* {
box-sizing: border-box;
}
permitem
calcular comprimentos e alturas
mais facilmente!
seletor para
"todos os elementos"
para layout
display: grid;
place-items: center;
display: grid;
grid-template-columns: minmax(250px, 25%) 1fr;
entre 250px e 25% comprimento
resto do comprimento
display: grid;
grid-template-columns: minmax(250px, 25%) 1fr;
altura determinada pelo
conteúdo ou elemento
resto da altura
display: flex;
flex-wrap: wrap;
justify-content: center;
flex: 1 1 var(--tamanho-base);
margin: var(--margem-entre-itens);
fonte: MDBootstrap
aspeto de texto
estados diferentes
animações
imagem via ishadeed
fontes: Sitepoint
aspeto
estados diferentes
animações
circular
sombra
fonte: Pearson UX Framework
Javascript - Linguagem de programação para interagir com uma página web
NOTA: Corre no browser
O que é?
A minha idade em dias
25 * 365
Mas substituindo "25" pela idade da pessoa
// vai escrever 'Miguel Bosta' na consola do browser
console.log("Miguel Bosta");
// criar 'variável' para guardar informação
var nome = "Miguel Bosta";
// também vai escrever 'Miguel Bosta' na consola do browser
console.log(nome);
// criar uma notificação de browser
alert(nome);
// isto vai simplesmente responder com a string 'nome'
console.log("nome");
Instruções são interpretadas e executadas por ordem, de cima para baixo.
ponto e vírgula (';') no final de cada instrução é opcional em JavaScript
<html>
<head>...</head>
<body>
...
<script src="caminho/para/script.js"></script>
</body>
</html>
... coisa pouca!
Variables in JavaScript are containers which hold reusable data.
They are like cups filled with stuff, and this stuff can be used over and over again depending on whichever way we choose.
- autor: Chris Nwamba, via scotch.io
var nome = 'Batman'
Declaração
var a = '3'
console.log(a)
quero que 'a' passe a ter o valor 3 (associação)
olha, preciso do valor de 'a' para fazer algo com ele
(neste caso, imprimir na consola)
em vez de var, também existe let e const, que não serão abordados agora...
// nomes adequados
var umNome
// case-sensitive
var umnome
var um_nome
var _umNOmE
// funciona, mas NÃO RECOMENDO!
var ágata
// nomes inadequados
// var 1nome
// var um-nome
// var um.nome
// variáveis podem ter letras,
// números (desde que n comece com um)
// e underscores
var aString = "texto normal";
var aNumber = 2;
var anotherNumber = aNumber + 1;
// output vai ser 3
console.log(anotherNumber)
// decimal
var aindaOutroNumero = 3.2;
// booleano: verdadeiro ou falso.
// Útil para condições
var estaCorreto = false;
// lista de itens
var aList = [1, 2, aString, aNumber];
// primeiro item da lista
console.log(aList[0]);
// último item da lista
console.log(aList[3]);
// objeto.
// Útil para organizar dados
// relacionados
var opcoes = {
estaDisponivel: false,
quantidade: 2,
nome: "Jorge"
}
// referenciar propriedades
// de objetos com "ponto"
console.log(opcoes.nome);
Complexos
Simples
// valores 'string' têm de estar
// envolvidos em "" ou ''
var aString = "texto normal"
// pode-se combinar strings somando
var b = 'texto ' + 'combinado'
// e quando quero texto com pelicas ou aspas?
var texto = "I am \"the Law\", yes!" // (I am "the Law", yes!)
// nr. de caracteres? Usem.length
texto.length // 12 - o espaço conta!
Conteúdo textual
".length" é uma propriedade. Falaremos delas depois...
var umNumero = 16
// também pode ser negativo
var numNegativo = -40
// pode-se fazer operações básicas com números
// qual será o valor de cada um destes casos?
var outroNumero = umNumero + 30
var aindaOutroN = umNumero - 10
var maisOutroNr = umNumero * 2
var aindaMaisNr = umNumero / 8
// pode-se fazer o mesmo com decimais
var nrDecimal = 20.4
// em alguns casos, somas com decimais podem dar "problemas"
console.log(285.72 + 142.86)
Contas e quantidades
var isStrong = true
var canFly = false
// são resultado de comparações
console.log(10 > 1) // true
console.log(20 >= 30) // false
console.log('b' > 'a') // true, 'b' vem depois
console.log('B' > 'a') // false? Tem a ver com tabela ASCII
console.log(10 === 11) // 10 e 11 não são iguais!
console.log(10 !== 11) // 10 e 11 não são iguais!
console.log(!true) // não-verdade = falso
console.log(!(10 > 11)) // verdade, 10 > 11 é mentira!
// vamos revisitá-los quando se falar de condições
verdadeiro ou falso?
símbolos condicionais
2 === 2 // equivale a...
'a' !== 'b' // difere de...
3 > 2 // maior que
1 < 2 // menor que
3 >= 3 // maior que ou igual a
3 <= 3 // menor que ou igual a
// Negação (inverte o valor)
!(3 === 2) // NÃO igual a...
// Avançado
// == vs ===
// != vs !==
// === e !== verifica tipo de variável também
3 !== '3' // uma é string, outra é número
// == e !=, em caso de tipos diferentes converte uma delas
3 == '3'
// combinar condições com && e ||
console.log( (2 > 1) && (3 > 1) ) // 2 > 1 E 3 > 1?
console.log( (1 < 0) || (2 > 1) ) // 1 < 0 OU 2 > 1?
AVANÇADO - combinações de condições
condicao && condicao-2 -> se uma for falsa, é mentira!
condicao || condicao-2 -> se uma for verdadeira, é verdade
Faz chuva OU faz sol?
Faz chuva E faz sol?
fazChuva() && fazSol()
fazChuva() || fazSol()
Isto são funções. Falaremos delas depois...
pode-se agrupar condições entre parêntesis
var jogador = {
primeiroNome: 'Carlos',
ultimoNome: 'Batman',
anoNascimento: 1939,
camisola: 6,
vitorias: 19,
derrotas: 87,
empates: 21,
jogoFavorito: 'Super Mario World'
}
console.log(jogador.camisola) // ou jogador['camisola']
// mudar valores de propriedades
jogador.vitorias = 90 // deixou de ser 19
// propriedades podem ter qualquer valor, até listas ou objetos
var jogadorBingo = {
nome: {
primeiro: 'Josefina',
ultimo: 'Benfica'
},
numeros: [1, 3, 4, 24, 87],
}
console.log(jogadorBingo.nome.primeiro) // 'Josefina'
console.log(jogadorBingo.numeros[2]) // 4
propriedade: valor
propriedades separadas por ','
nomes de propriedades não precisam de aspas ou pelicas desde que não tenham caracteres especiais como - ou _
objeto.propriedade
(usa ponto, como '.length' em strings e arrays)
var nomes = ['Batman', 'Rambo', 'Noddy', 1]
// imprimir o segundo nome. O primeiro índice é '0'
console.log(nomes[1])
// mudar o segundo valor para 'Stallone'
nomes[2] = 'Stallone' // nomes tem ['Batman', 'Rambo', 'Stallone', 1]
// imprimir comprimento da lista
console.log(nomes.length)
// adicionar entradas
nomes.push('Hulk') // ['Batman', 'Rambo', 'Stallone', 1, 'Hulk']
// remover última entrada
nomes.pop() // nomes tem ['Batman', 'Rambo', 'Stallone', 1]
// remover a segunda entrada
// desde o indice 1, remover 2 entradas
nomes.splice(1,2) // agora nomes tem ['Batman', 1]
console.log(nomes)
// combinar listas
var lista1 = [1,2,3]
var lista2 = [4,5]
var listaCombo = lista1.concat(lista2)
lista pode ter itens de vários tipos
variáveis simples
variáveis simples
if (numPessoas < 3) {
console.log('somos muito poucos')
}
function responderA(pessoa) {
console.log('Não gosto de ' + pessoa)
}
for (var i=0; i<nPessoas; i=i+1) {
console.log('pessoa ' + i + ' chama-se ' + pessoas[i])
}
bloco
// uma função é uma maneira de agrupar instruções
// e manipular o seu comportamento em função de variáveis (parâmetros)
// uma função pode ter mais que um parâmetro, ou nenhum...
function nomeDaFuncao(parametro1, parametro2) {
// ...
}
// funções podem depois ser chamadas com ou sem parâmetros
nomeDaFuncao("valor de parâmetro 1", "valor de parâmetro 2");
// exemplo: uma função que imprime na consola
// o resultado da soma de dois números
function umaSoma(valor1, valor2) {
// criamos uma variável para guardar o valor temporariamente
var resultado = valor1 + valor2;
console.log(resultado);
}
// vamos chamar a função com os números 1 e 2
umaSoma(1, 2); // vai imprimir 3 na consola
// declaração de uma função
function umaSoma(numero1, numero2) {
// ...
}
// uma função numa expressão
// pode ser associada a uma variável e invocada
var chamaPapi = function () {
console.log('papi')
}
chamaPapi()
// até podem ter uma função como propriedade...
var cao = {
nome: 'Krypto',
ladra: function() {
console.log('bark!')
}
}
cao.ladra() // bark!
// ... ou item de uma lista (apesar de ser "estranho" assim...)
var umaLista = ['a', 1, function() { console.log('bark') }, 'b']
umaLista[2]() // bark
// Avançado: até podem meter estas funções como parâmetros
function chamaFuncao(funcao) {
funcao()
}
chamaFuncao(chamaPapi) // 'papi'
// aliás, "function" também é um tipo de variável, como 'Object' ou 'String'
console.log(typeof chamaPapi)
para verificar o tipo de dados
função 'anónima' não tem nome... tal como o "nome" sugere!
// uma função pode fornecer um resultado
// que pode ser associado a uma variavel
// ou usado como qualquer outro valor
function umaSoma(numero1, numero2) {
// ...
var resultado = numero1 + numero2
return resultado
}
var resultadoDeSoma = umaSoma(3, 4)
console.log(resultadoDeSoma)
// no que irá resultar isto?
console.log(umaSoma(1,2) * umaSoma(3,4))
Uma função sem return retorna sempre 'undefined'
// correr um "bloco" de código se uma condição se verificar
// lembram-se dos "booleanos"?
if (4 < 3) {
console.log('isto nunca vai correr')
} else {
console.log('isto vai sempre correr')
}
// qual teria de ser o valor desta variável
// para imprimir "Gostei muito do primeiro!"?
var nome = "Joaquim"
if (nome === "Rambo") {
console.log("Gostei muito do primeiro!")
}
// condicao deve ser uma expressao
// que resulte em true ou false
if (condicao) {...}
else if (condicao) {...}
else {...}
// efetuar um número sequencial de ciclos
// é preciso definir
// - início
// - condição de fim
// - que fazer após cada passo
// ex.: imprimir 'olá' 5 vezes
for (var i=0; i < 5; i=i+1) {
console.log('olá')
}
// útil em conjunto com listas
// o que vai aparecer?
var pessoas = ['Josefina', 'Batman', 'Rambo']
var nPessoas = pessoas.length
for (var i=0; i < nPessoas; i=i+1) {
console.log('olá ' + pessoas[i] + '\n')
}
for (instrucao-inicial; condicao-para-continuar; no-final-de-cada-passo) {
// passos
}
ciclo pára quando isto der
false
(ver booleanos e condições)
// equivalente a
console.log('olá')
console.log('olá')
console.log('olá')
console.log('olá')
console.log('olá')
// mais simples que ciclo "for"
// efetua bloco enquanto condição for true
// ex.: dizer olá 5 vezes
var i = 0
while (i < 5) {
console.log("olá")
i = i + 1
}
while (condicao-para-ser-executado) {
// passos
}
ciclo pára quando isto der
false
(ver booleanos e condições)
// equivalente a
console.log('olá')
console.log('olá')
console.log('olá')
console.log('olá')
console.log('olá')
var x = 4
var y = 10
if (x __ y) {
console.log('certo')
}
Que símbolos condicionais (exceto o 'diferente de' tenho de colocar (em __) para o script imprimir "certo"?
Façam todas as possibilidades!
var x = 64
var y = 1
if (y __ x) {
console.log('certo')
}
var x = 'a'
var y = 'a'
if (y __ x) {
console.log('certo')
}
var x = 'a'
var z = 'u'
if (z __ x) {
console.log('certo')
}
var x = 64
var y = 1
if (y __ x) {
console.log('errado')
} else {
console.log('certo')
}
var bat = 'a'
var man = 'c'
if (bat __ man) {
console.log('errado')
} else {
console.log('certo')
}
// assumindo que exista um elemento com id="main-text-element"...
var anElement = document.getElementById("main-text-element");
// mudar o texto e elementos descendentes
anElement.innerHTML = "texto modificado";
// mudar estilo
// seguido de 'style', colocar a propriedade
// em camelCase
anElement.style.backgroundColor = "hotpink";
By Miguel Costa
Estilização de documentos para a web