HTML (HyperText Markup Language).
É uma linguagem de marcação utilizada na construção de páginas na Web.
Exibindo informações na Web
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<title>HTML, CSS, JavaScript e AngularJS</title>
<meta name="description" content="HTML, CSS, JavaScript e AngularJS">
<meta name="author" content="Gui Seek">
<link rel="stylesheet" href="assets/css/style.css">
<script src="assets/js/script.js"></script>
</head>
<body>
Informação
</body>
</html>
Tags
-
Palavras entre parênteses angulares
-
Marcação semântica
-
Hierarquia de elementos
-
Atributos e valores
Estrutura de um documento
...
<body>
<header></header>
<nav></nav>
<main>
<section>
<article></article>
</section>
<aside>
</aside>
</main>
</body>
...
Semântica / Micro dados
Permite a representação de dados HTML de forma mais semântica para mecanismos de busca.
Exemplo sem semântica
...
<div>
<div>28/01/2016 19:00</div>
<div>HTML, CSS, JavaScript e AngularJS</div>
<div>
<span>Gumga</span>
<div>
<span>Avenida Duque de caxias</span>
<span>Maringá</span>
<span>Paraná</span>
</div>
</div>
</div>
...
Exemplo com semântica
...
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="startDate" content="2016-01-28T19:00">28/01/2016 19:00</div>
<div itemprop="name">HTML, CSS, JavaScript e AngularJS</div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place">
<span itemprop="name">Gumga</span>
<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress">Avenida Duque de caxias</span>
<span itemprop="addressLocality">Maringá</span>
<span itemprop="addressRegion">Paraná</span>
</div>
</div>
</div>
...
Documentação de referência?
Schema.org é patrocinado pelo Google, Microsoft, Yahoo e Yandex. Os vocabulários são desenvolvidos por um processo de comunidade aberta, usando a lista de discussão public-schemaorg@w3.org e através do GitHub.
Elemento raíz
Elemento
Descrição
<html>
Representa a raiz de um documento HTML ou XHTML. Todos os outros elementos devem ser descendentes desse elemento.
Metadados de documento
Elemento
Descrição
<head>
Representa uma coleção de metadados sobre o documento, incluindo links suas definições de scripts e folhas de estilo.
<title>
Define o título do documento, apresentado na barra de título do navegador ou na guia da página. Ele só pode conter texto e todas as tags contidas não são interpretados.
<base>
Define a URL base para URL relativa na página.
Metadados de documento
Elemento
Descrição
<link>
Usado para linkar arquivos externos, geralmente CSS.
<meta>
Define os metadados que não podem ser definidas usando outro elemento HTML.
<style>
Tag usada para escrever CSS dentro do documento HTML.
Scripting
Elemento
Descrição
<script>
Define um script interno ou link para um script externo. A linguagem de script é JavaScript.
<noscript>
Define um conteúdo alternativo a ser exibido quando o navegador não suporta scripts.
<template>
Container para conteúdo no lado cliente instanciado em tempo de execução usando JavaScript.
Seções
Elemento
Descrição
<body>
Representa o principal conteúdo de um documento HTML. Há apenas um elemento <body> em um documento.
<section>
Define uma seção em um documento HTML.
<nav>
Define uma seção que contém apenas links de navegação.
<article>
Define que pode existir de forma independente do resto do conteúdo. Esta tag poderia ser um post no fórum, um artigo de revista ou jornal, uma entrada de log da Web, um comentário enviado pelo usuário, ou qualquer outro item independente do conteúdo.
Seções
Elemento
Descrição
<aside>
Define um conteúdo reservado do resto do conteúdo da página. Se for removida, o conteúdo restante ainda fazem sentido.
<h1>,<h2>,<h3>,<h4>,<h5>,<h6>
São elementos que representam os seis níveis de titulos de cabeçalhos dos documentos. Um elemento título descreve brevemente o tema da seção.
<hgroup>
Agrupa um conjunto de elementos <h1> a <h6> quando um título tem vários níveis. Tag excluída da documentação do html5 pelo W3C.
<header>
Define o cabeçalho de uma página ou seção. Muitas vezes contém um logotipo, o título do site e uma menu de navegação do conteúdo.
Seções
Elemento
Descrição
<footer>
Define o rodapé de uma página ou seção. Muitas vezes contém um aviso de copyright, alguns links para informações legal ou endereços para dar feedback.
<address>
Define uma seção que contém informações de contato, como endereço e telefone.
<main>
Define o conteúdo principal ou importante no documento. Existe apenas um elemento <main> no documento.
Agrupando conteúdo
Elemento
Descrição
<p>
Define uma parte que deve ser exibido como um paragrafo.
<hr>
Representa uma ruptura temática entre parágrafos de um artigo ou seção ou qualquer conteúdo mais longo.
<pre>
Indica que o seu conteúdo é pré-formatado e que este formato deve ser preservada.
<blockquote>
Representa uma citação.
Agrupando conteúdo
Elemento
Descrição
<ol>
Define uma lista ordenada de itens.
<ul>
Define uma lista não ordenada.
<li>
Define um item de uma lista <ol> ou de uma <ul>.
Agrupando conteúdo
Elemento
Descrição
<dl>
Representa uma lista de definição.
<dt>
Representa um item da lista de definição <dd>.
<dd>
Representa a definição dos termos listados imediatamente antes dele.
Agrupando conteúdo
Elemento
Descrição
<figure>
O elemento figura representa um conteúdo de fluxo, opcionalmente com um subtítulo.
<figcaption>
Representa a legenda do <figure>.
<div>
Representa um contêiner genérico sem nenhum significado especial.
Semântica textual
Elemento
Descrição
<a>
Representa um hyperlink, ligando a outro recurso.
<em>
Representa a enfâse do conteudo.
<strong>
Representa a importância de um pedaço de texto com o forte elemento não altera o sentido da frase.
<abbr>
Representa uma abreviatura ou acrônimo, eventualmente, com o seu significado.
Semântica textual
Elemento
Descrição
<time>
Representa um valor de data e hora, eventualmente com um equivalente legivel por máquina.
<code>
Representa uma codificação.
<var>
Representa uma variável, que pode ser uma expressão matemática, ou codigo de programação, um identificador representando uma constante, um símbolo identificando uma quantificação física, um parametro de função ou um mero espaço reservado.
<samp>
Representa uma saída de um programa de computador.
<kbd>
Representa uma entrada do usuário, geralmente pelo teclado, mas não necessáriamente, podendo representar outro tipo de entrada como comandos de voz transcritos.
Semântica textual
Elemento
Descrição
<b>
Representa um texto que chama atenção para fins utilitários. Ele não transmite importância extra e não implica uma voz alternativa.
<span>
Representa o texto com nenhum significado específico. Deve ser usado quando nenhum outro elemento semântico transmite um significado adequado, o que, neste caso, é frequentemente trazida por atributos globais, como class, lang, ou dir.
<br>
Representa uma quebra de linha.
Conteúdo embutido
Elemento
Descrição
<img>
Representa uma imagem.
<iframe>
Representa um contexto de navegação aninhada, que é um documento HTML incorporado.
<embed>
Representa um ponto de integração para um, muitas vezes não HTML externo, a aplicação de conteúdo interativo.
<video>
Representa um vídeo, e seus arquivos de áudio e legendas, associadas com a interface necessária para reproduzi-lo.
<audio>
Representa um som, ou fluxo de áudio.
<source>
Permite aos autores especificar fontes de mídia alternativos para elementos como <video> ou <audio>.
Conteúdo embutido
Elemento
Descrição
<canvas>
Representa uma área de bitmap que os scripts podem ser usados para renderizar gráficos, como jogos ou quaisquer imagens renderizadas em tempo real.
<svg>
Define uma imagem vectorial incorporada.
<math>
Define uma fórmula matemática.
Tabulação de dados
Elemento
Descrição
<table>
Representa dados com mais de uma dimensão.
<tbody>
Representa o bloco de linhas que descreve os dados de uma <table>.
<thead>
Representa o bloco de linhas que descreve o título de uma coluna.
<tfoot>
Representa o bloco de linhas que descreve o resumo de uma coluna.
<tr>
Representa uma linha de células de uma tabela.
<td>
Representa uma célula de dados numa tabela.
<th>
Representa uma célula de cabeçalho de uma tabela.
Formulários
Elemento
Descrição
<form>
Representa um formulário, que consiste em controles, que podem ser enviados para um servidor para processamento.
<fieldset>
Representa um conjunto de controles.
<legend>
Representa a legenda para um <fieldset>.
<label>
Representa a legenda de um controle de um <form>.
<input>
Representa um campo de dados digitados permitindo que o usuário edite os dados.
Formulários
Elemento
Descrição
<button>
Representa um botão.
<select>
Representa um controle que permite a seleção entre um conjunto de opções.
<datalist>
Representa um conjunto de opções pré-definidas para outros controles.
<optgroup>
Representa um conjunto de opções, agrupados logicamente.
<option>
Representa uma opção em um elemento <select>, ou uma sugestão de um elemento <datalist>.
Formulários
Elemento
Descrição
<textarea>
Representa um controle de edição de texto multi linhas.
<output>
Representa o resultado de um cálculo.
<progress>
Representa o progresso de uma tarefa.
<meter>
Representa uma medida escalar (de um valor fracionário), dentro de um intervalo conhecido.
CSS (Cascading Style Sheets).
É uma linguagem de estilo utilizada para descrever a apresentação de um documento escrito em HTML ou outras linguagens de marcação, como SVG.
Seletores
Seletor
Seleciona
Tipo
Versão
*
Quaisquer elemento
Seletor universal
2
E
Elementos tipo E
Seletor tipo
1
E[foo]
Elementos com atributo "foo"
Seletor atributo
2
E[foo="bar"]
Elementos E cujo valor do atributo "foo" é exatamente igual a "bar"
Seletor atributo
2
E[foo~="bar"]
Elementos E cujo valor do atributo "foo" é uma lista de valores separados por espaço, um dos quais é exatamente igual a "bar"
Seletor atributo
2
Seletores
Seletor
Seleciona
Tipo
Versão
E[foo^="bar"]
Elementos E cujo valor do atributo "foo" começa exatamente com a string "bar"
Seletor atributo
3
E[foo$="bar"]
Elementos E cujo valor do atributo "foo" termina exatamente com a string "bar"
Seletor atributo
3
E[foo*="bar"]
Elementos E cujo valor do atributo "foo" contém a substring "bar"
Seletor atributo
3
E[foo|="en"]
Elementos E cujo atributo "foo" tem uma lista de valores começando com "en" e seguida por um hífen
Seletor atributo
2
Seletores
Seletor
Seleciona
Tipo
Versão
E:root
Elemento E raíz do documento
Pseudo-classe estrutural
3
E:nth-child(n)
Elemento E que é o enésimo filho do seu elemento pai
Pseudo-classe estrutural
3
E:nth-last-child(n)
Elemento E que é o enésimo filho (contado de trás para frente) do seu elemento pai
Pseudo-classe estrutural
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:nth-of-type(n)
Elemento E que é o enésimo irmão do seu tipo
Pseudo-classe estrutural
3
E:nth-last-of-type(n)
Elemento E que é o enésimo irmão (contado de trás para frente) do seu tipo
Pseudo-classe estrutural
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:first-child
Elemento E que é o primeiro filho do seu elemento pai
Pseudo-classe estrutural
2
E:last-child
Elemento E que é o último filho do seu elemento pai
Pseudo-classe estrutural
3
E:first-of-type
Elemento E que é o primeiro irmão de seu tipo
Pseudo-classe estrutural
3
E:last-of-type
Elemento E que é o último irmão de seu tipo
Pseudo-classe estrutural
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:only-child
Elemento E que é o único filho de seu elemento pai
Pseudo-classe estrutural
3
E:only-of-type
Elemento E que é irmão único do seu tipo
Pseudo-classe estrutural
3
E:empty
Elemento E que não tem elementos filhos (inclusive nós de texto)
Pseudo-classe estrutural
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:link,E:visited
Elemento E que sendo destino de um link ainda não foi visitado (:link) ou que já tenha sido visitado (:visited)
Pseudo-classe link
1
E:active,E:hover,E:focus
Elemento E durante determinadas ações do usuário
Pseudo-classe ação do usuário
1 e 2
E:target
Elemento E que é o destino de um fragmento identificador de um URI
Pseudo-classe :target
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:lang(pt-br)
Elemento E em um determinado idioma - "exemplo: pt-br"
Pseudo-classe :lang()
2
E:enabled,E:disabled
Elemento E de uma interface de usuário que está habilitado (:enabled) ou desabilitado (:disabled)
Pseudo-classe estado do elemento UI
3
E:checked
Elemento E de uma interface de usuário que está marcado (:checked) (por exemplo: radio-button ou checkbox)
Pseudo-classe estado do elemento UI
3
Seletores
Seletor
Seleciona
Tipo
Versão
E:first-line
Primeira linha formatada do elemento E
Pseudo-elemento :first-line
1
E:first-letter
Primeira letra formatada do elemento E
Pseudo-elemento :first-letter
1
E:before
Conteúdo gerado antes do elemento E
Pseudo-elemento :before
2
E:after
Conteúdo gerado depois do elemento E
Pseudo-elemento :after
2
Seletores
Seletor
Seleciona
Tipo
Versão
E.foo
Elemento E cujo valor da classe é "foo"
Seletor classe
1
E#foo
Elemento E cujo valor do id é "foo"
Seletor id
1
E:not(selector)
Elemento E que não casa com o seletor simples seletor
Pseudo-classe negação
3
Seletores
Seletor
Seleciona
Tipo
Versão
E F
Elemento F descendente do elemento E
Elemento descendente
1
E > F
Elemento F filho do elemento E
Elemento filho
2
E + F
Elemento F imediatamente precedido pelo elemento E
Elemento irmão adjacente
2
E ~ F
Elemento F precedido pelo elemento E
Elemento irmão geral
3
Responsividade
O Web design responsivo (RWD, na sigla em inglês) é uma configuração na qual o servidor sempre envia o mesmo código HTML a todos os dispositivos, e o CSS é usado para alterar o processamento da página no dispositivo.
Responsividade
Media Queries é a utilização de Media Types com uma ou mais expressões envolvendo características de uma media para definir formatações para diversos dispositivos.
...
<meta name="viewport" content="width=device-width, initial-scale=1.0">
...
Media queries
Para sinalizar aos navegadores que sua página se adaptará a todos os dispositivos, adicione uma metatag ao cabeçalho do documento:
...
<link rel="stylesheet" href="assets/css/mobile.css" media="screen and (max-width:...px)">
...
Media queries no CSS
...
/* Dispositivos pequenos (tablets, 768px e maior). */
@media (min-width: 768px) { ... }
/* Dispositivos médios (desktops, 992px e maior). */
@media (min-width: 992px) { ... }
/* Dispositivos grandes (grandes desktops, 1200px e maior). */
@media (min-width: 1200px) { ... }
...
Media queries no CSS
Definindo limites mínimos e máximos
...
/* Dispositivos (768px até 992px). */
@media (min-width: 768px) and (max-width: 992px) { ... }
...
Twitter Bootstrap
Bootstrap torna o desenvolvimento web front-end mais rápido e fácil. É feito para desenvolvedores de todos os níveis, todos dispositivos e projetos de qualquer tamanho.
Iniciando um projeto
Execute o comando a seguir no terminal para fazer download dos arquivos do framework e suas dependências:
Pré requisitos: NodeJS e bower ou npm instalados.
$ mkdir layout-loja-de-cerveja
$ cd layout-loja-de-cerveja
$ bower install bootstrap
// OU
$ npm install bootstrap
Mas vamos ao que interessa
Funções como objetos de primeira classe
Desfrutam de certas capacidades
- Podem ser criados por meio de literais;
- Podem ser atribuídos a variáveis, entradas de arrays e propriedades de outros objetos;
- Podem ser transmitidos como argumentos para funções;
- Podem ser retornados como valores a partir de funções;
- Podem contar com propriedades que podem ser criadas e atribuídas dinamicamente
Loop de eventos do navegador
Dentre outros, os tipos de eventos a seguir podem ocorrer
- Eventos do navegador;
- Eventos de rede;
- Eventos de usuários;
- Eventos de temporizadores
Exemplo
function startup() {
/* Faz algo maravilhoso */
}
window.onload = startup;
// OU AINDA
window.onload = function() { /* Faz algo maravilhoso */ }
O conceito de callback
Sempre que configuramos uma função que será chamada futuramente, estamos configurando o que é chamado de um callback.
Essencial para o uso efetivo do JavaScript!
Exemplo
function useless(callback) {
return callback();
}
Escopos e funções
Em JavaScript, escopos são declarados por funções e não por blocos, ou seja, o tempo de vida de uma variável é definido pela funções onde ela foi declarada, e não no fim do bloco como ocorre em outras linguagens.
Exemplo
if (window) {
var x = 123;
}
console.log(x);
Contexto de funções usando métodos apply e call
function somaArgumentos() {
var result = 0;
for (var n = 0; n < arguments.length; n++) {
result += arguments[n];
}
this.result = result;
}
var obj1 = {};
var obj2 = {};
somaArgumentos.apply(obj1, [1,2,3,4]); // obj1.result === 10
somaArgumentos.call(obj2, 1, 2, 3, 4); // obj2.result === 10
Exemplo de contexto, método call e callback
function forEach(list, callback) {
for (var n = 0; n < list.length; n++) {
callback.call(list[n],n);
}
}
var armas = ['machado','glock'];
forEach(armas, function(index) {
console.log(this);
console.log(armas[index]);
});
AngularJS
Veremos um pouco do poder deste framework
$ mkdir loja-de-cerveja
$ cp -R layout-loja-de-cerveja/* loja-de-cerveja/
$ cd loja-de-cerveja
$ bower install angular
// OU
$ npm install angular
AngularJS
HTML aprimorado para aplicativos da web!
Por quê AngularJS?
HTML é ótimo para declarar documentos estáticos, mas vacila quando tentamos usá-lo para declarar visualizações dinâmicas em aplicações web.
AngularJS permite estender elementos HTML para a sua aplicação.
O resultado é expressivo, legível e rápido para se desenvolver.
Frameworks MV*
Backbone.js
Ember.js
Knockout.js
Angular.js
Cappuccino
JavaScript MVC
Meteor
Spice.js
Riot.js
CanJS
JavaScript The Right Way
Criado pelo Google, Angular.js é como um polyfill para o futuro do HTML.
Não fui eu quem disse.
Características do AngularJS
SPA (Single Page Applications)
Aplicações inteiramente contidas no browser que não precisam fazer requisições de novas páginas no servidor.
Características do AngularJS
-
Separação de responsabilidades
- Controllers
- Services
- Factories
- Directives
- Providers
- Estrutura MVC ou MVWhatever
- Injeção de dependências (Dependency Injection)
- Ligação de dados (Data Binding)
- Rotas
Modularização com AngularJS
Criação de módulos reutilizáveis ficou fácil.
Por consequência disso, atualmente com uma busca no NPM por angular retornam em 4.323 resultados e no bower 6.043.
Exemplo de app simples
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
</head>
<body>
<div>
<label>Nome:</label>
<input type="text" ng-model="seuNome" placeholder="Seu nome">
<hr>
<h1>Olá {{seuNome}}!</h1>
</div>
</body>
</html>
Dando poder ao HTML com diretivas do AngularJS
<div ng-controller="UsuarioCtrl as ctrl">
<form ng-submit="ctrl.submit()" name="usuarioForm" novalidate>
<div>
<label>Usuário<label>
<input type="text" name="usuario" ng-model="ctrl.usuario" ng-minlength="5" ng-maxlength="10" required>
<div ng-show="usuarioForm.$submitted || usuarioForm.usuario.$touched">
<div ng-show="usuarioForm.usuario.$error.required">Preencha seu nome.</div>
<div ng-show="usuarioForm.usuario.$error.minlength">Deve ter mais de 5 caracteres.</div>
<div ng-show="usuarioForm.usuario.$error.maxlength">Deve ter menos de 10 caracteres.</div>
</div>
</div>
<div>
<button type="submit" ng-disabled="usuarioForm.$invalid">Salvar</button>
</div>
</form>
</div>
AngularJS
Vamos colocar a mão na massa!
Bóra fazer a loja funcionar...
Curso
HTML, CSS, JavaScript e AngularJS
Com Gui Seek / @guiseek