Escolar Documentos
Profissional Documentos
Cultura Documentos
Grosso modo, pode-se dizer que a web funciona com trocas de informações
entre um ponto e outro do planeta. Essas trocas são chamadas de requisições.
1/85
08/07/2020 Versão para impressão
uma resposta ao seu computador, com os dados da página em HTML, por exemplo.
O seu computador repassa essa informação ao navegador, que “desenha” a página
na tela.
A aplicação web, portanto, precisa contar com uma estrutura que permita a
comunicação entre dois lados por meio da rede, um chamado “cliente”, ou seja, a
máquina que o usuário da aplicação está usando com um navegador web, e outro
chamado “servidor”, uma máquina dedicada a processar as informações solicitadas
pelos clientes. Assim, será possível acessar um banco de dados para gravar essas
informações e gerar resposta para o cliente.
2/85
08/07/2020 Versão para impressão
Camada de front-end
3/85
08/07/2020 Versão para impressão
Camada de back-end
Transações comerciais
Envio de e-mails
Relatórios
Introdução à programação em C#
4/85
08/07/2020 Versão para impressão
5/85
08/07/2020 Versão para impressão
Caso necessite de ajuda para instalar o .NET Core e o Visual Studio Code, consulte
o material Ambiente de desenvolvimento, instalação e configuração, desta UC.
Abra o VS Code e selecione File > Open Folder, ou use o atalho do teclado
Ctrl + K, O (ou seja, segure a tecla Control e pressione rapidamente a tecla K e
depois O – não as duas ao mesmo tempo). Na tela de seleção de pasta, escolha
uma para seus projetos e depois crie nela uma nova pasta. Selecione esta nova
pasta e clique no botão Selecionar pasta.
Note que, na aba Explorer, aparece a pasta selecionada (no caso, “Hello
World”), mas sem conteúdo.
6/85
08/07/2020 Versão para impressão
Note que o terminal já está apontando para a pasta que você criou e abriu
anteriormente. No terminal, digite “dotnet new console” e tecle Enter.
7/85
08/07/2020 Versão para impressão
Note, na guia Explorer, que foram criados alguns arquivos na pasta Hello
World, especialmente Program.cs, o arquivo principal de código nesta aplicação.
8/85
08/07/2020 Versão para impressão
9/85
08/07/2020 Versão para impressão
Repita esse processo em cada teste que for realizar no material a seguir. Crie
um projeto para cada exemplo.
Abra o VS Code e selecione File > Open Folder, ou use o atalho do teclado
Ctrl + K, O (ou seja, segure a tecla Control e pressione rapidamente a tecla K e
depois O – não as duas ao mesmo tempo). Na tela de seleção de pasta, escolha
uma para seus projetos e depois crie nela uma nova pasta. Selecione esta nova
pasta e clique no botão Selecionar pasta.
10/85
08/07/2020 Versão para impressão
Note que, na aba Explorer, aparece a pasta selecionada (no caso, “Hello
World”), mas sem conteúdo.
11/85
08/07/2020 Versão para impressão
Janela do VS Code com aba “Explorer” ativada; nome “Hello World” aparece
nesta aba.
Note que o terminal já está apontando para a pasta que você criou e abriu
anteriormente. No terminal, digite “dotnet new console” e tecle Enter.
12/85
08/07/2020 Versão para impressão
Note, na guia Explorer, que foram criados alguns arquivos na pasta Hello
World, especialmente Program.cs, o arquivo principal de código nesta aplicação.
13/85
08/07/2020 Versão para impressão
14/85
08/07/2020 Versão para impressão
Repita esse processo em cada teste que for realizar no material a seguir. Crie
um projeto para cada exemplo.
using System;
namespace Hello_World
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
15/85
08/07/2020 Versão para impressão
Por ora, foquemos nossa atenção às linhas 7 a 10. Nelas, temos o método
Main, delimitado pela abertura e pelo fechamento de chaves. Esse método é
basicamente o que iniciará a execução do programa e será composto por todas as
instruções que desejamos executar. No caso, temos dentro deste um comando de
impressão trazendo “Hello World!”.
Console.WriteLine(“Segunda Linha”);
Variáveis
As variáveis nada mais são do que espaços na memória que têm um endereço,
recebem um determinado tipo de dado e são referenciados pelo seu nome. O
Flowgoritm, abordado em detalhes na videoaula da UC Planejar e documentar
aplicações web, permite que vejamos isso na prática.
16/85
08/07/2020 Versão para impressão
Tipo de Tamanho
Descrição Alcance (valores)
dado (bits)
Numérico
Byte inteiro sem 8 0 a 255
sinal
Numérico
Sbyte inteiro com 8 -128 a 127
sinal
Numérico
Short inteiro com 16 -32.768 a 32.767
sinal
Numérico
Ushort inteiro sem 16 0 a 65.535
sinal
Numérico
-2.147.483.648 a
Int inteiro com 32
2.147.483.647
sinal
Numérico
Uint inteiro sem 32 0 a 4294967295
sinal
Numérico -9.223.372.036.854.775.808
Long inteiro com 64 a
sinal 9.223.372.036.854.775.807
Numérico
0a
Ulong inteiro sem 64
18.446.744.073.709.551.615
sinal
Numérico
decimal
-3,402823e38 a
Float com 32
3,402823e38
precisão
simples
Numérico
decimal
-1,79769313486232e308 a
Double com 64
1,79769313486232e308
precisão
dupla
Numérico
decimal
(+ or -)1,0 x 10e-28 a 7,9 x
Decimal com 128
10e28
precisão de
29 dígitos
17/85
08/07/2020 Versão para impressão
Tipo base
para todos
Object
os demais
tipos
Sequência
String de
caracteres
Representa
0:00:00am 1/1/01 a
DateTime data ou
11:59:59pm 12/31/9999
hora
Os tipos mais comuns são int (inteiro), float (decimal simples), string (texto) e
bool (lógico). Acostume-se a utilizá-los e perceba que, em algumas situações,
outros tipos serão mais indicados.
Imagine que o seu software precisa guardar a idade do usuário. Ela poderia ser
guardada em uma variável do tipo “int”? Sem dúvida, poderia, porém “int” serve para
guardar valores entre -2.147.483.648 e 2.147.483.647.
Então, por que esse tipo de dado não é o mais indicado? Primeiramente,
porque não existe idade negativa. Segundo, porque nenhuma pessoa vive mais do
que 200 anos, e, terceiro, porque você gastaria 32 bits para guardar essa
informação.
O tipo byte comportaria a idade de uma pessoa (0 a 255) e gastaria 8 bits para
o armazenamento. O tipo de dado byte, portanto, é o mais adequado para guardar
idades.
18/85
08/07/2020 Versão para impressão
No C#, é preciso declarar uma variável para ela ser utilizada. A sintaxe para
declaração de variáveis é:
Observe os exemplos:
int dias;
string nomeClienteAtual;
float fornecedor;
float alturaCliente;
O nome de uma variável não pode ser composto por espaços ou caracteres
especiais, mas você pode juntar duas ou mais palavras. É importante que a inicial do
nome de uma variável seja sempre uma letra minúscula. Já as demais podem ser
maiúsculas, como em nomeClienteAtual, por exemplo.
A inicialização, ou seja, a atribuição de um valor inicial à variável pode ser feita logo
na declaração dela ou em outra parte do código. Observe:
Console.ReadLine()
19/85
08/07/2020 Versão para impressão
Exemplo:
string nome;
nome = Console.ReadLine();
O conteúdo lido é entendido como uma string (texto), logo deve ser atribuído a
uma variável string, caso contrário resultará em erro.
Para fazermos a leitura de uma informação que será atribuída a uma variável
numérica, será necessário realizar uma conversão.
Observe o exemplo:
int dias;
dias = int.Parse(Console.ReadLine());
Para fazer a leitura de uma string e convertê-la para float, utilize o comando
float.Parse.
Observe o exemplo:
float altura;
altura = float.Parse(Console.ReadLine());
20/85
08/07/2020 Versão para impressão
Para exibir o conteúdo de mais de uma variável em uma string, basta numerá-
las entre chaves. Veja:
21/85
08/07/2020 Versão para impressão
int idade=20;
float peso=70f;
string info = $"você têm {idade} anos e pesa {peso} kg.";
Console.WriteLine(info);
Operadores aritméticos
Os operadores aritméticos realizam operações matemáticas, e seu resultado
pode ser atribuído a uma variável ou utilizado em um teste condicional.
Operador Resultado
= Operação de atribuição
Math.Pow(base,
Exponenciação de valores reais
expoente)
22/85
08/07/2020 Versão para impressão
Prioridade Operador
23/85
08/07/2020 Versão para impressão
A fórmula é:
using System;
namespace myapp
{
class Program
{
static void Main(string[] args)
{
float tc,tf; //declaração das variáveis d
e tc e tf
Console.WriteLine("Informe a temperatura
em Graus Celsius:");
tc = float.Parse(Console.ReadLine()); //l
eitura da temperatura em celsius
tf = (tc * 1.8f) + 32f; // variável tf re
cebe a fórmula para seu cálculo.
Console.WriteLine(" A temperatura em Fahr
enheit é {0:N}°F.",tf); //impressão em F
}
}
}
Observações:
24/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program
{
static void Main(string[] args)
{
string nome; //declaração da variável
nome
float media,nota1,nota2,nota3,nota4;
//declaração das variáveis de notas e média
Console.WriteLine("Informe seu nome:"
);
nome = Console.ReadLine(); //leitura
do nome
Console.WriteLine("Informe a primeira
nota:");
nota1 = float.Parse(Console.ReadLine
()); //leitura da primeira nota
Console.WriteLine("Informe a segunda
nota:");
nota2 = float.Parse(Console.ReadLine
()); //leitura da segunda nota
Console.WriteLine("Informe a terceira
nota:");
nota3 = float.Parse(Console.ReadLine
()); //leitura da terceira nota
Console.WriteLine("Informe a quarta n
ota:");
nota4 = float.Parse(Console.ReadLine
()); //leitura da quarta nota
media = (nota1 + nota2 + nota3 + nota
4) / 4; // expressão aritmética para cálculo da média
Console.WriteLine(nome+", você ficou
com média {0:N}",media); //impressão do nome e média
}
}
}
Você entendeu bem o conteúdo até aqui? Se você se sente pronto, que tal
encarar os desafios listados? Neles, pedem-se algoritmos e códigos que usem
entrada, saída de dados e operações aritméticas.
25/85
08/07/2020 Versão para impressão
Operadores relacionais
Além de operações aritméticas, um programa C# pode executar operações
relacionais, ou seja, fazer a comparação entre dois elementos quaisquer. Você
poderá comparar uma variável com outra, uma variável com um determinado valor
ou, ainda, dois valores.
26/85
08/07/2020 Versão para impressão
Operador Descrição
== Igual a
!= Diferente de
Estruturas de decisão
Nos códigos descritos até aqui, todos os comandos são executados
sequencialmente, um após o outro. Nenhum deixa de ser executado. Porém, em
alguns casos, temos a necessidade de executar apenas determinados comandos se
uma condição for satisfeita. Para que isso seja possível, devemos implementar um
comando de decisão, ou seja, uma estrutura com uma ou mais condições que,
sendo verdadeiras, possibilitam essa execução.
Uma estrutura de desvio condicional simples é aquela que tem uma condição que
desvia a execução de um programa quando a sua condição é satisfeita.
Sintaxe:
27/85
08/07/2020 Versão para impressão
if(condição)
<comando1>
Condição Exemplo
Tabela 4 – Condição
É possível ainda comparar dois valores constantes. Isso só não é muito usual,
pois trará sempre o mesmo resultado.
if(condição)
{
<comando-1>
<comando-2>
<comando-3>
...
<comando-n>
}
28/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program
{
static void Main(string[] args)
{
int idade; //declaração da variável idade
como inteiro
Console.WriteLine("Informe sua idade:");
idade = int.Parse(Console.ReadLine()); //
leitura da idade e conversão em inteiro
if(idade>=18) //teste condicional
Console.WriteLine("Você tem idade par
a tirar carteira de habilitação."); //mensagem se condição for verdadeira
}
}
}
Operadores lógicos
Quando temos mais de uma condição para ser analisada em uma tomada de
decisão, utilizamos os operadores lógicos.
29/85
08/07/2020 Versão para impressão
Veja a tabela:
30/85
08/07/2020 Versão para impressão
C1 C2 C1 && C2 C1 || C2 ! C1
F F F F V
F V F V V
V F F V F
V V V V F
Prioridade Operador
1.º !
3.º &&
4.º ||
31/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
float media,frequencia;
Console.WriteLine("Informe sua média:");
media = float.Parse(Console.ReadLine());
Console.WriteLine("Informe sua frequencia:"
);
frequencia = float.Parse(Console.ReadLine
());
if(media>=7 && frequencia>=75)
{
Console.WriteLine("Você está aprovado."
);
}
}
}
}
Executando esse código, você percebe que a mensagem dizendo que você
está aprovado somente é mostrada se, simultaneamente, as condições de média e
frequência forem verdadeiras. Se uma delas for falsa, nenhuma mensagem é
mostrada.
32/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
string cor;
int ano;
Console.WriteLine("Informe a cor desejada par
a o automóvel:");
cor = Console.ReadLine();
Console.WriteLine("Informe o ano inicial:");
ano = int.Parse(Console.ReadLine());
if((cor=="preto" || cor=="cinza") && ano>=201
6)
{
Console.WriteLine("Automóvel aprovado.");
}
}
}
}
Veja as combinações:
33/85
08/07/2020 Versão para impressão
F F F F F
F F V F F
F V F V F
F V V V V
V F F V F
V F V V V
V V F V F
V V V V V
Tabela 8 – combinações
A tabela anterior é chamada de tabela verdade e é muito útil para nos ajudar a
prever todas as possibilidades de respostas informadas pelo usuário.
Uma estrutura de desvio condicional composta é aquela que executa uma lista de
comandos, se sua condição for verdadeira; ou uma segunda lista de comandos, se a
condição for falsa.
Sintaxe:
34/85
08/07/2020 Versão para impressão
if(condição)
{
<comando 1 >
<comando 2 >
...
<comando n >
}
else
{
<comando 1 >
<comando 2 >
...
<comando n >
}
Se a condição descrita no “if” for verdadeira, então os códigos entre “if” e “else”
são executados; e, depois, o programa segue seu fluxo normal. Caso a condição
não seja verdadeira, os comandos de “else” até o fim são executados.
35/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
float media;
Console.WriteLine("Informe sua média:");
media = float.Parse(Console.ReadLine());
if(media>=7)
Console.WriteLine("Você está aprovado."
);
else
Console.WriteLine("Você está reprovado."
);
}
}
}
Agora que você aprendeu condicionais simples e compostas, que tal testar
seus conhecimentos? Caso se sinta seguro, tente fazer os seguintes algoritmos e
códigos C#:
36/85
08/07/2020 Versão para impressão
Imagine que você deseja testar se o estado de seu cliente é “RJ”. Sendo verdadeira
essa condição, imagine que você deseja testar se o valor da encomenda é superior
a R$ 2.000,00 para calcular um valor de desconto.
Observe o exemplo:
37/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
string estado;
float pedido,desconto=0,total;
Console.WriteLine("Informe o estado do client
e:");
estado = Console.ReadLine();
Console.WriteLine("Informe o valor do pedid
o:");
pedido = float.Parse(Console.ReadLine());
if(estado=="RJ")
{
if(pedido>=2000)
desconto = 30f;
else
desconto = 15f;
}
total = pedido - (pedido * desconto/100);
Console.WriteLine("Valor com descontos: R${0:
N}",total);
}
}
}
No exemplo 7, se o estado for “RJ” e o valor do pedido for maior que 2.000,
temos desconto de 30%. Se não for, o desconto é de 15%.
38/85
08/07/2020 Versão para impressão
39/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
int op;
float num1, num2, Resultado=0;
Console.WriteLine("Informe o primeiro númer
o:");
num1 = float.Parse(Console.ReadLine());
Console.WriteLine("Informe o segundo número:"
);
num2 = float.Parse(Console.ReadLine());
Console.WriteLine("Informe a opração desejada
(1-Adição 2-Subtração 3-Multiplicação ou 4-Divisão):");
op = int.Parse(Console.ReadLine());
if(op==1){
Resultado = num1 + num2;
Console.WriteLine("O resultado da adição
é: {0:N}",Resultado);
}
else{
if(op==2){
Resultado = num1 - num2;
Console.WriteLine("O resultado da sub
tração é: {0:N}",Resultado);
}
else{
if(op==3){
Resultado = num1 * num2;
Console.WriteLine("O resultado da
multiplicação é: {0:N}",Resultado);
}
else{
if(op==4){
Resultado = num1 / num2;
Console.WriteLine("O resultad
o da divisão é: {0:N}",Resultado);
}
else{
Console.WriteLine("Operação i
nválida");
}
}
}
}
}
}
}
40/85
08/07/2020 Versão para impressão
Sintaxe:
switch(variável)
{
case < valor-1 > : < Lista de Comandos1 >
break;
case < valor-2 > : < Lista de Comandos2 >
break;
...
case < valor-n > : < Lista de ComandosN >
break;
Essa estrutura é usada nos casos em que se deseja verificar se uma variável
tem um valor específico, ou seja, apenas para comparação de igualdade. Também
não aceita expressões lógicas.
O código das operações aritméticas pode ser refeito de forma mais eficiente e
clara usando a estrutura switch. Veja o exemplo 9.
41/85
08/07/2020 Versão para impressão
42/85
08/07/2020 Versão para impressão
using System;
namespace myapp
{
class Program3
{
static void Main(string[] args)
{
int op;
float num1, num2, Resultado=0;
Console.WriteLine("Informe o primeiro númer
o:");
num1 = float.Parse(Console.ReadLine());
Console.WriteLine("Informe o segundo número:"
);
num2 = float.Parse(Console.ReadLine());
Console.WriteLine("Informe a operação desejad
a (1-Adição 2-Subtração 3-Multiplicação ou 4-Divisão):");
op = int.Parse(Console.ReadLine());
switch(op)
{
case 1 : //op == 1
Resultado = num1 + num2;
Console.WriteLine("O resultado da adiç
ão é: {0:N}",Resultado);
break;
case 2: //op == 2
Resultado = num1 - num2;
Console.WriteLine("O resultado da subt
ração é: {0:N}",Resultado);¬¬
break;
case 3: //op == 3
Resultado = num1 * num2;
Console.WriteLine("O resultado da mult
iplicação é: {0:N}",Resultado);
break;
case 4: //op == 4
Resultado = num1 / num2;
Console.WriteLine("O resultado da divi
são é: {0:N}",Resultado);
break;
default:
Console.WriteLine("Operação inválida"
);
break;
}
}
}
43/85
08/07/2020 Versão para impressão
É hora de um novo desafio, desta vez com exercícios que usam condicionais
encadeados e switch. Se você se sentir pronto, leia os enunciados e tente resolver
estes problemas com códigos C#.
44/85
08/07/2020 Versão para impressão
HTML5
O front-end de uma aplicação web geralmente envolve três itens: HTML,
JavaScript e CSS.
45/85
08/07/2020 Versão para impressão
O CSS, por sua vez, é utilizado para dar estilo à página, definindo cores, fontes
e o posicionamento de elementos, entre outras configurações.
Padrões W3C
Antes de entrar em detalhes sobre HTML e em exemplos, vamos discutir sobre
padrões. Em matéria de aplicações web, a W3C (World Wide Web Consortium) é
uma referência em padronização.
Particularidades do HTML5
46/85
08/07/2020 Versão para impressão
47/85
08/07/2020 Versão para impressão
48/85
08/07/2020 Versão para impressão
(objetos/8.png)
<figure >
Define um contêiner para uma imagem (tag <img>), que pode ficar agrupada à sua
descrição, utilizando a também nova tag <figcaption>.
<header >
É a seção de cabeçalho da página.
49/85
08/07/2020 Versão para impressão
<main>
Representa a porção principal do corpo da página. É onde o conteúdo estará. Deve
ser único na página.
<nav>
É a seção com links de navegação da página, para breadcrumbs e menus, por
exemplo.
<article>
É uma porção de conteúdo independente na página, como um post de blog ou uma
notícia.
<section>
É uma seção genérica na página, um agrupamento de elementos que podem se
referir a um article ou não.
<aside>
Representa uma região da página com conteúdo auxiliar ao conteúdo principal,
como notas explicativas ou links auxiliares.
<footer>
É a seção de rodapé da página, geralmente contendo informações sobre website,
autor, copyright e/ou endereço da empresa.
50/85
08/07/2020 Versão para impressão
(objetos/9.png)
51/85
08/07/2020 Versão para impressão
<video> e <audio>
Define um áudio ou vídeo que possa ser reproduzido na página.
<embed>
É a tag padrão para incluir conteúdos que dependem de plug-ins externos.
<canvas>
Define um “quadro de pintura”, uma região na página em que se pode desenhar,
geralmente via JavaScript.
<datalist >
São listas de itens usadas em conjunto com o tipo “list” de input (veja a seguir).
<output>
É o campo para resultado de um cálculo.
<progress >
É a barra de progresso, que mostra a porcentagem ou a etapa do processamento no
sistema.
52/85
08/07/2020 Versão para impressão
Caso esteja pronto para colocar seus novos conhecimentos à prova e adquirir
outros, propomos o seguinte desafio:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Título da Página</title>
</head>
<body>
<form action="#">
Campo teste:
<input type="text" />
<input type="submit" value="ok">
</form>
</body>
Depois disso, troque o atributo type da tag <input> pelos seguintes valores:
53/85
08/07/2020 Versão para impressão
number
date
color
Após cada mudança, recarregue a página para testar esses diferentes tipos de
campos e clique no botão Ok para ver se há alguma validação. No caso de
type=”text”, não há nenhuma validação acontecendo, mas em “e-mail”, por exemplo,
deverá haver.
<basefont>
Definição de um padrão de fonte para toda a página
<big>
Fontes maiores
54/85
08/07/2020 Versão para impressão
<center>
Centralização de elementos horizontalmente
<font>
Definição de fonte, cor e tamanho de um texto
<strike>
Texto riscado
<tt>
Fonte estilo “máquina de escrever”
Essas tags devem ser evitadas. Em vez delas, devem-se usar estilos CSS, o que
será estudado posteriormente no curso.
<acronym>
Corresponde à tag <abbr>, usada para indicar abreviação.
<dir>
Corresponde à tag <ul> para lista textual não numerada.
<applet>
Era usada para aplicações Java.
<frame> e <frameset>
Definem uma página HTML dentro da própria página.
55/85
08/07/2020 Versão para impressão
Pesquise por “Obsolete Attributes in HTML 5”, em <w3.org>, para obter uma lista
completa.
Apesar de não serem mais recomendados, esses atributos e tags ainda são
aceitos nos navegadores atuais. O efeito original continuará a acontecer, até por
conta da preocupação da compatibilidade de páginas antigas com o browser, mas é
possível que no futuro esse suporte deixe de existir. Por isso, e em conformidade
com os padrões estabelecidos pela W3C, esses elementos devem ser evitados.
56/85
08/07/2020 Versão para impressão
Não usaremos estilos nas páginas, apenas estrutura. Por isso, não nos
preocuparemos com cores, tipografia e o posicionamento dos elementos da página.
Será possível alcançar tudo isso com CSS.
Você pode revisitar esse exercício após estudos com CSS para aplicar um estilo a
essa página.
Para fazer a primeira página, abra o Visual Studio Code e selecione File >
Open Folder. Escolha uma pasta de sua preferência para armazenar todas as
páginas que escreveremos aqui. Feito isso, na área “Explorer”, ao lado do nome da
pasta aberta, use o ícone “New File” para criar um novo arquivo e nomeie-o como
“index.html”.
57/85
08/07/2020 Versão para impressão
Janela do Visual Studio Code, na guia “Explorer”, acessada pelo ícone de duas páginas de
papel. Ao lado do nome da pasta de trabalho, há um ícone com uma página de papel e um sinal
de + para criar um novo arquivo.
Inicie digitando a estrutura básica: doctype, html e head, com meta, title e body.
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8">
<title>Notícias da Hora</title>
</head>
<body>
</body>
</html>
Esses são os elementos básicos de uma página HTML. É boa prática usar o
elemento “meta” para definir a codificação da escrita (geralmente UTF-8), quando
queremos usar acentuação no conteúdo da página.
Para fins de internacionalização, o W3C define como padrão o uso do atributo lang
para definir a língua em que a página está escrita (no nosso caso, “pt”, para
português, mas como exemplos temos “en” para inglês, “es” para espanhol e “zh”
para chinês).
58/85
08/07/2020 Versão para impressão
<header>
<h1>Notícias Da Hora</h1>
<form>
<input type="search" />
<input type="submit" value="Buscar" />
</form>
</header>
Estamos aqui usando a tag <header> para definir o cabeçalho da página, com
o título (o logo) do nosso site. Para ele, utilizamos a tag <h1>. A família “H” de tags
define títulos e subtítulos para um texto em HTML. Para definir o título mais
importante do site ou de uma seção, é usado <h1>; para o segundo mais importante,
é usado <h2>; e assim por diante, até <h6>.
Não use as tags “H” apenas para definir tamanho de fonte, mas, sim, para demarcar
títulos ou indicar a importância de textos. Não pule a hierarquia das tags: depois de
<h1>, não use diretamente <h3> ou <h4> para um subtítulo, por exemplo, mas, sim,
<h2>.
Seguindo <h1>, temos um pequeno <form>, que servirá para implementar uma
busca pelo site. Note que nele usamos a tag <input> com o atributo type=”search”.
O form não realizará uma ação neste exemplo, pois não implementaremos código do
lado do servidor por ora. Veja mais detalhes sobre o funcionamento do elemento
form no exemplo 2, adiante.
Abaixo de </header>, incluiremos uma tag <main> para indicar que esta é a
região em que o conteúdo principal da página está. Dentro dela, incluiremos uma tag
<nav>, para delimitar um menu de navegação. O identificador desse <nav> será
“menu-lateral”.
59/85
08/07/2020 Versão para impressão
<main>
<nav id="menu-lateral">
<span>Navegue por categorias:</span>
<ul>
<li><a href="#">Cotidiano</a></li>
<li><a href="#">Esportes</a></li>
<li><a href="#">Tecnologia</a></li>
<li><a href="#">Comportamento</a></li>
</ul>
</nav>
A seguir, usamos uma tag <ul> para criar uma lista não numerada (no caso, a
lista é de links). Cada elemento dessa lista precisa ser declarado com a tag <li>.
Dentro da tag <li>, temos a tag <a>, usada para hyperlinks. No nosso caso,
não temos ainda definidas páginas para as categorias “Cotidiano”, “Esportes”,
“Tecnologia” e “Comportamento”. Por isso, em href, usamos o endereço “#”, que, em
vez de abrir uma nova página, mantém a página atual.
<section id="destaques">
<h2>Destaques</h2>
<a href="noticia1.html">
<img src="imagens/futebol.png" alt="Bola de
futebol no gramado" title="Futebol">
<h3>Com gol de França, São Paulo derrota o S
antos no Morumbi</h3>
</a>
<a href="noticia2.html">
<img src="imagens/ideias.png" alt="Ideias e
tecnologia" title="Tecnologia">
<h3>As idéias inovadoras de oito profissiona
is geniais</h3>
</a>
</section>
</main>
60/85
08/07/2020 Versão para impressão
Cada notícia nesta página é apenas um link que leva aos detalhes da
notícia. Por isso, usamos a tag <a> e preenchemos com uma imagem
(tag<img>) e um subtítulo (tag <h3>).
Evite usar caminhos absolutos (completos, com “http” e domínio) em tags <a>
quando estiver referenciando um recurso do próprio sistema. Prefira caminhos
relativos.
O atributo alt deve ser sempre considerado, pois é a mensagem mostrada na tela
quando o navegador, por algum motivo, não consegue mostrar a imagem.
O atributo title serve para mostrar uma descrição flutuante da imagem, que aparece
quando se para o mouse sobre ela. O recurso deve ser usado com moderação, já
que aparelhos com tela de toque não conseguem utilizá-lo.
61/85
08/07/2020 Versão para impressão
(objetos/11.png)
(objetos/11.png)
imagens de exemplo para que o aluno possa usar no exercício. Uma para futebol e
outra para tecnologia. Ambas medem 300 x 225.
Note que a tag <a> envolve todo o elemento <img> e o <h3>. Assim, toda a
área é clicável. Também não se esqueça de incluir, no fim, o fechamento da tag
<main>.
62/85
08/07/2020 Versão para impressão
Algumas tags são autocontidas, como <img>. Neste caso, o encerramento acontece
na própria tag: <img atributos />.
<footer>
<span>Todos os direitos Reservados. Contato (88) 1122
3-4455</span>
</footer>
63/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8">
<title>Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícias Da Hora</h1>
<form>
<input type="search" />
<input type="submit" value="Buscar" />
</form>
</header>
<main>
<nav id="menu-lateral">
<span>Navegue por categorias:</span>
<ul>
<li><a href="#">Cotidiano</a></li>
<li><a href="#">Esportes</a></li>
<li><a href="#">Tecnologia</a></li>
<li><a href="#">Comportamento</a></li>
</ul>
</nav>
<section id="destaques">
<h2>Destaques</h2>
<a href="noticia1.html">
<img src="imagens/futebol.png" alt="Bola de fu
tebol no gramado" title="Futebol">
<h3>Com gol de França, São Paulo derrota o San
tos no Morumbi</h3>
</a>
<a href="noticia2.html">
<img src="imagens/ideias.png" alt="Ideias e te
cnologia" title="Tecnologia">
<h3>As idéias inovadoras de oito profissionais
geniais</h3>
</a>
</section>
</main>
<footer>
<span>Todos os direitos Reservados. Contato (88) 1122
3-4455</span>
</footer>
</body>
</html>
64/85
08/07/2020 Versão para impressão
Teste no seu navegador a página que você desenvolveu. Revise o código caso
algo tenha saído errado.
Vamos agora criar a segunda página. No VS Code, use o ícone New File ao
lado do nome da pasta para criar o arquivo “noticia1.html”.
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8">
<title>Notícia 1 - Notícia da Hora</title>
</head>
<body>
</body>
</html>
65/85
08/07/2020 Versão para impressão
<header>
<h1>Notícias Da Hora</h1>
<form>
<input type="search" />
<input type="submit" value="Buscar" />
</form>
</header>
<main>
<nav id="menu-lateral">
<span>Navegue por categorias:</span>
<ul>
<li><a href="#">Cotidiano</a></li>
<li><a href="#">Esportes</a></li>
<li><a href="#">Tecnologia</a></li>
<li><a href="#">Comportamento</a></li>
</ul>
</nav>
66/85
08/07/2020 Versão para impressão
<article>
<header>
<h2>Com gol de França, São Paulo derrota o Santos no Mo
rumbi</h2>
<i>Os times paulistas jogaram pelo Campeonato Brasileir
o no último domingo</i>
</header>
<figure>
<img src="imagens/futebol2.png" alt="Bola de futebol" t
itle="Futebol"/>
<figcaption>A bola rolou no último Domingo</figcaption>
</figure>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing eli
t. Vivamus molestie iaculis ante eu ornare.
In auctor est non accumsan placerat. Mauris nec varius
orci. Nam sodales est id lectus finibus,
in cursus ipsum posuere. Phasellus vel euismod ex. Inte
ger non metus nunc. Mauris blandit malesuada
lacus quis iaculis.
</p>
<p>
Aliquam mauris augue, tincidunt elementum volutpat nec,
vulputate et dui. Nunc sed massa magna.
Nam mollis ligula justo, nec fringilla sapien venenatis
vel. Fusce eget euismod neque. Quisque
euismod sed nisl a placerat. Nunc scelerisque, est sed
laoreet faucibus, est augue gravida eros,
id convallis magna risus non mi.
</p>
</article>
67/85
08/07/2020 Versão para impressão
Utilize a imagem logo a seguir para fazer o teste. Salve-a como “futebol2.png”
na pasta “Imagens”, criada anteriormente.
Esse texto estranho que aparece no exemplo é um famoso texto chamado Lorem
Ipsum, bastante usado para preencher páginas apenas para que se possa validar
um leiaute ou fazer testes. Busque por “gerador de lorem ipsum” na internet para
ajudar a criar esses parágrafos.
68/85
08/07/2020 Versão para impressão
</main>
<footer>
<span>Todos os direitos Reservados. Contato (88) 1122
3-4455</span>
</footer>
69/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8">
<title>Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícia 1 - Notícias Da Hora</h1>
<form>
<input type="search" />
<input type="submit" value="Buscar" />
</form>
</header>
<main>
<nav id="menu-lateral">
<span>Navegue por categorias:</span>
<ul>
<li><a href="#">Cotidiano</a></li>
<li><a href="#">Esportes</a></li>
<li><a href="#">Tecnologia</a></li>
<li><a href="#">Comportamento</a></li>
</ul>
</nav>
<article>
<header>
<h2>Com gol de França, São Paulo derrota o San
tos no Morumbi</h2>
<i>Os times paulistas jogaram pelo Campeonato
Brasileiro no último domingo</i>
</header>
<figure>
<img src="imagens/futebol2.png" alt="Bola de f
utebol" title="Futebol"/>
<figcaption>A bola rolou no último Domingo</fi
gcaption>
</figure>
<p>Lorem ipsum dolor sit amet, consectetur adipisc
ing elit. Vivamus molestie iaculis ante eu ornare. In auctor est non accumsan pla
cerat. Mauris nec varius orci. Nam sodales est id lectus finibus, in cursus ipsum
posuere. Phasellus vel euismod ex. Integer non metus nunc. Mauris blandit malesua
da lacus quis iaculis.
</p>
<p>Aliquam mauris augue, tincidunt elementum volut
pat nec, vulputate et dui. Nunc sed massa magna. Nam mollis ligula justo, nec fri
ngilla sapien venenatis vel. Fusce eget euismod neque. Quisque euismod sed nisl a
placerat. Nunc scelerisque, est sed laoreet faucibus, est augue gravida eros, id
convallis magna risus non mi.
</p>
</article>
</main>
<footer>
70/85
08/07/2020 Versão para impressão
71/85
08/07/2020 Versão para impressão
72/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8" />
<title>Cadastro - Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícias da Hora</h1>
</header>
<main>
</main>
</body>
</html>
Dentro da tag <main>, vamos incluir o esqueleto do nosso formulário com a tag
<form> e, dentro dela, um botão “reset” e um botão “submit”.
Usa-se get quando se quer enviar informações explícitas via URL para outra página
(aparecerá algo como url?campo1=valor&campo2=valor no endereço da página
indicada pelo atributo action de <form>). Usa-se post quando o objetivo é omitir as
informações enviadas para o endereço de action. O mais comum é o uso de post.
73/85
08/07/2020 Versão para impressão
O fieldset não é obrigatório, mas é uma boa prática tanto para a leitura do código
HTML quanto para a semântica da página.
<fieldset>
<legend>Inscreva-se no nosso site</legend>
<ul>
<li>
<label for="txtNome">Nome</label>
<input type="text" id="txtNome" name="nome" required
/>
</li>
</ul>
</fieldset>
74/85
08/07/2020 Versão para impressão
A tag <label> é usada para descrever o campo. O atributo for deve ter
o mesmo valor do id do campo que ela referencia.
Usamos aqui a tag <input> com type igual a “text”. Ou seja, temos um
campo de texto livre. O atributo required indica que se trata de um
campo de preenchimento obrigatório.
Recomendamos que você, a cada novo campo incluído neste tutorial, teste a
página no browser para verificar seu resultado. Clique no botão Submit para ver as
diretivas de validação (como “required”) serem executadas.
<li>
<label for="txtEmail">Email</label>
<input type="email" id="txtEmail" name="email" required/>
</li>
Desta vez, foi incluído o campo de input do tipo “email”, com seu respectivo
label. Ele valida, ao realizar submit, se a informação incluída está em um formato
válido de e-mail. Caso não esteja, a ação do submit não é concluída.
75/85
08/07/2020 Versão para impressão
<li>
<label for="txtSenha">Senha</label>
<input type="password" id="txtSenha" name="senha" required/
>
</li>
O <input>, neste caso, é do tipo “password”. Este tipo de campo esconde o que
está sendo digitado, substituindo os caracteres por símbolos. Alguns browsers
embutem nele uma opção de visualizar o texto oculto.
<li>
<label>Data de Nascimento</label>
<input type="number" id="txtDia" name="nascimento-dia" min=
"1" max="31"/>
<select id="selMes" name="nascimento-mes">
<option value="1">Janeiro</option>
<option value="2">Fevereiro</option>
<option value="3">Março</option>
<option value="4">Abril</option>
<option value="5">Maio</option>
<option value="6">Junho</option>
<option value="7">Julho</option>
<option value="8">Agosto</option>
<option value="9">Setembro</option>
<option value="10">Outubro</option>
<option value="11">Novembro</option>
<option value="12">Dezembro</option>
</select>
<input type="number" id="txtAno" name="nascimento-ano"/>
</li>
No trecho:
76/85
08/07/2020 Versão para impressão
Por fim, temos um <input> do tipo “number” para o usuário digitar o ano
de nascimento. Não incluímos restrições ao valor.
<li>
<label>Sexo</label>
<label><input type="radio" name="genero" value="m"/>Mascu
lino</label>
<label><input type="radio" name="genero" value="f"/>Femin
ino</label>
</li>
Veja que, no exemplo anterior, o input “radio” está envolvido por uma tag <label>.
Isso não é obrigatório, mas constitui um recurso importante de usabilidade. Teste
retirar o <label> que está antes do primeiro <input type=”radio” …/> e o </label>
77/85
08/07/2020 Versão para impressão
após. Depois, no browser, clique na palavra “Masculino” e note que o radio button só
ficará marcado se clicarmos exatamente no círculo à esquerda. Depois teste clicar
na palavra “Feminino” e note que esta, por manter-se envolvida em <label>, expande
a área de clique para além do círculo, à palavra que descreve o radio.
<li>
<label><input type="checkbox" id="chkOfertas"
name="ofertas" />Desejo receber ofertas de sites parceir
os</label>
</li>
78/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8" />
<title>Cadastro - Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícias da Hora</h1>
</header>
<main>
<form method="POST" action="#">
<fieldset>
<legend>Inscreva-se no nosso site</legend>
<ul>
<li>
<label for="txtNome">Nome</label>
<input type="text" id="txtNome" name
="nome" required />
</li>
<li>
<label for="txtEmail">Email</label>
<input type="email" id="txtEmail" name=
"email" required />
</li>
<li>
<label for="txtSenha">Senha</label>
<input type="password" id="txtSenha"
name="senha" required/>
</li>
<li>
<label>Data de Nascimento</label>
<input type="number" id="txtDia" nam
e="nascimento-dia" min="1" max="31"/>
<select id="selMes" name="nascimento
-mes">
<option value="1">Janeiro</optio
n>
<option value="2">Fevereiro</opt
ion>
<option value="3">Março</option>
<option value="4">Abril</option>
<option value="5">Maio</option>
<option value="6">Junho</option>
<option value="7">Julho</option>
<option value="8">Agosto</option
>
<option value="9">Setembro</opti
on>
<option value="10">Outubro</opti
on>
<option value="11">Novembro</opt
79/85
08/07/2020 Versão para impressão
ion>
<option value="12">Dezembro</opt
ion>
</select>
<input type="number" id="txtAno" nam
e="nascimento-ano"/>
</li>
<li>
<label>Sexo</label>
<label><input type="radio" name="gen
ero" value="m"/>Masculino</label>
<label><input type="radio" name="gen
ero" value="f"/>Feminino</label>
</li>
<li>
<label>
<input type="checkbox" id="chkOf
ertas" name="ofertas" />
Desejo receber ofertas de sites
parceiros
</label>
</li>
</ul>
</fieldset>
<input type="reset" value="Limpar" />
<input type="submit" value="Salvar" />
</form>
</main>
</body>
</html>
O atributo align de input está obsoleto no HTML5 e não deve ser usado.
80/85
08/07/2020 Versão para impressão
Você está pronto para usar elementos de form em uma nova página? Se
estiver, faça este exercício:
Desenvolva uma página HTML com formulário de log in, com campos
de e-mail e senha.
81/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8" />
<title>Cadastro - Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícias da Hora</h1>
</header>
<main>
</main>
</body>
</html>
Dentro da tag <main>, vamos incluir uma tag <table>, que trará os dados do
cadastro.
<table>
<thead>
</thead>
<tbody>
</tbody>
</table>
A tag <table> é usada para tabular dados em uma página, usando colunas e
linhas para isso. Dentro dela, temos as marcações opcionais de <thead> (indica os
títulos das colunas) e <tbody> (indica o conteúdo da tabela).
Não use <table> para organizar leiaute de página. Use apenas para mostrar dados.
O uso da tag para estruturas uma página e seus elementos era muito comum nos
primórdios da internet, mas hoje deve ser evitado, já que deixa a página inadequada
para navegadores de mobile, por exemplo.
82/85
08/07/2020 Versão para impressão
<tr>
<th>Nome</th>
<th>Email</th>
<th>Nascimento</th>
<th>Gênero</th>
<th>Aceita ofertas</th>
</tr>
Sempre usamos <tr> para denotar uma linha na tabela. A tag <th> indica o
título de uma coluna. Agora, é momento de preencher o <tbody>.
<tr>
<td>Fulano da Silva</td>
<td>fulano@mail.com</td>
<td>01/11/1980</td>
<td>Masculino</td>
<td>Sim</td>
</tr>
<tr>
<td>Ciclana da Silva</td>
<td>ciclana@mail.com</td>
<td>05/10/1974</td>
<td>Feminino</td>
<td>Não</td>
</tr>
<tr>
<td>Beltrano da Silva</td>
<td>beltrano@mail.com</td>
<td>06/06/1995</td>
<td>Masculino</td>
<td>Não</td>
</tr>
Temos nesse código três linhas com dados e informações para cada coluna.
Usamos a tag <td> para delimitá-las.
83/85
08/07/2020 Versão para impressão
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="utf-8" />
<title>Cadastro - Notícias da Hora</title>
</head>
<body>
<header>
<h1>Notícias da Hora</h1>
</header>
<main>
<table>
<thead>
<tr>
<th>Nome</th>
<th>Email</th>
<th>Nascimento</th>
<th>Gênero</th>
<th>Aceita ofertas</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fulano da Silva</td>
<td>fulano@mail.com</td>
<td>01/11/1980</td>
<td>Masculino</td>
<td>Sim</td>
</tr>
<tr>
<td>Ciclana da Silva</td>
<td>ciclana@mail.com</td>
<td>05/10/1974</td>
<td>Feminino</td>
<td>Não</td>
</tr>
<tr>
<td>Beltrano da Silva</td>
<td>beltrano@mail.com</td>
<td>06/06/1995</td>
<td>Masculino</td>
<td>Não</td>
</tr>
</tbody>
</table>
</main>
</body>
</html>
84/85
08/07/2020 Versão para impressão
Salve seu código e teste-o no browser. Note que a tabela está sem bordas.
Estilos para a tabela devem ser aplicados via CSS.
85/85