Escolar Documentos
Profissional Documentos
Cultura Documentos
Conhecendo a disciplina
Nos últimos tempos, a internet deixou de ser palco exclusivo de grandes empresas de
comércio eletrônico (e-commerce), passando a fazer parte do dia a dia de pequenas e
médias empresas, que têm focado cada vez mais em levar seus produtos para serem
divulgados ou comercializados na internet.
Bons estudos!
Não pode faltar
INTRODUÇÃO À PROGRAMAÇÃO
WEB
Diego César Batista Mariano
Fonte: Shutterstock.
Convite ao estudo
Ao longo dos anos, a internet tornou-se fundamental para a sociedade. Estamos sempre
conectados à grande rede mundial de computadores e isso tem trazido mudanças
profundas no mercado de trabalho; empresas que não estão na web correm o risco de
deixarem de existir. Por esse motivo e outros, cada vez mais profissionais capacitados
estão sendo requisitados na área de desenvolvimento web.
As aplicações web, ou seja, aquelas que são executadas a partir da internet, podem ser
construídas usando-se uma gama de linguagens de marcação, estilo e programação.
Portanto, o caminho para se tornar um desenvolvedor web é longo e envolve muita
dedicação, e nesta unidade, você dará o primeiro passo.
Na primeira seção, você aprenderá os fundamentos da linguagem de marcação de
hipertexto (HTML), suas versões, diferenças e elementos básicos.
Por fim, na terceira seção, você aprenderá a construir tabelas e formulários, bem como
conhecerá os tipos de campos de entrada e outros elementos.
Vamos lá?
Entre as funções que você deverá desempenhar, podemos listar: detecção de problemas
em códigos-fonte da empresa e construção de novas páginas web.
Você, então, inicia o desenvolvimento de uma página web construindo o código HTML:
<!DOCTYPE html>
<html>
<head>
<title>Melhore sua conexão com nosso produto</title>
</head>
<body>
<h1>Melhore sua conexão com nosso produto</h1>
Em seguida, você testa essa página em um navegador do Google Chrome e obtém este
resultado:
Esse é o seu desafio: escrever o código para a resolução do problema e testá-lo. Para
isso, conte com o apoio do simulador a seguir:
Bons estudos!
conceito-chave
Entretanto, por muitos anos, a internet ficou restrita a um público que tinha maiores
recursos financeiros, uma vez que computadores e até mesmo o acesso a linhas
telefônicas (necessárias para conexões com a internet) tinham alto custo. A
popularização da internet teve início nos anos 2000 com a melhoria da infraestrutura de
comunicação e componentes eletrônicos.
Figura 1.3 | A internet é formada por uma grande rede de dispositivos conectados
remotamente que engloba todo o mundo
Fonte: Shutterstock.
Além disso, faz-se importante destacar que, com o advento da internet, a quantidade de
dispositivos e de aplicações online também contribuiu para o aumento da quantidade de
dados e informações enviadas para a nuvem para, em seguida, serem analisadas e
auxiliarem na tomada de decisão das empresas, demandando uma maior utilização da
internet.
Fonte: Shutterstock.
As URLs não estão presentes apenas em navegadores; elas podem ser usadas como
sistemas de navegação em redes para acesso de recursos e dispositivos. Observe, a
seguir, uma ilustração de como funciona uma URL:
protocolo://domínio:porta/caminho/recurso?busca#identificador
Entretanto, ao acessar um site, nem todas essas características precisam ser informadas.
Observe o exemplo a seguir:
https://biblioteca-virtual.com/uk
Um site pode ser considerado um documento de hipertexto que pode ser acessado a
partir de um navegador. Para que um site seja acessado por um cliente (e/ou um
usuário), ele deve estar disponibilizado em um computador que fique, o tempo todo,
conectado à internet, a fim de permitir que outros dispositivos o acessem. A esse
computador remoto dá-se o nome de servidor web (Figura 1.5). Um servidor é um
dispositivo que fornece algum serviço. No caso do servidor web, esse computador
fornece o serviço de hospedagem de documentos web.
Na teoria, seria possível hospedar um site em seu próprio computador apenas instalando
um software servidor web e adquirindo um domínio e um endereço de IP fixo.
Entretanto, a configuração desses sistemas é um pouco complexa e, a depender da
quantidade de acessos ao site, pode tornar o uso de seu computador inviável. Em geral,
para se colocar um site no ar, é preciso adquirir um domínio e alugar um servidor de
hospedagem.
Exemplificando
Antigamente, os endereços de site eram precedidos pela combinação de letras www (um
acrônimo para world wide web ou, na tradução, “rede mundial de computadores”),
como: www.google.com.br. Nos dias de hoje, esse mesmo site pode ser acessado sem o
www: google.com.br. Reflita sobre os motivos disso.
Desenvolvimento web
Linguagens back-end são aquelas que são executadas diretamente no servidor. Elas
podem ser utilizadas, por exemplo, para gerar uma página dinâmica que será enviada ao
browser. São exemplos de linguagem back-end: PHP (PHP: Hypertext Preprocessor) e
ASP (Active Server Pages). Já as linguagens front-end são aquelas executadas
diretamente no navegador do cliente, como, JavaScript, CSS (Cascading Style Sheets) e
HTML (HyperText Markup Language). A Figura 1.6 ilustra algumas das principais
linguagens de desenvolvimento web.
Fonte: Shutterstock.
No desenvolvimento de uma página web, a primeira linguagem que se deve
compreender é o HTML.
A linguagem HTML foi oficialmente proposta no início dos anos 1990 pelo cientista da
computação Tim Berners-Lee, enquanto trabalhava no CERN (Conseil Européen pour
la Recherche Nucléaire – Conselho Europeu de Pesquisa Nuclear). Tim Berners-Lee se
inspirou na linguagem SGML (Standard Generalized Markup Language) e ainda foi
idealizador do conceito WWW (World Wide Web).
Nos anos seguintes, o HTML passou a ser uma recomendação oficial do W3C (World
Wide Web Consortium), logo, iniciaram o desenvolvimento da terceira versão do
HTML. Entretanto, a nova versão trouxe tantas diferenças em relação ao HTML 2.0 que
tiveram problemas na implantação da proposta. Diante disso, os desenvolvedores
decidiram abandonar a versão 3.0 e iniciar o desenvolvimento de uma nova versão,
denominada HTML 3.2, oficialmente lançada em 1997.
O HTML 3.2 trouxe uma série de novos recursos, como a possibilidade de inserção de
tabelas e de texto ao redor de imagens.
Em dezembro de 1999, o W3C propôs oficialmente a versão HTML 4.01. Essa versão
trouxe novos recursos com suporte a frames e tornou obsoletas algumas tags das versões
anteriores do HTML. A quarta versão do HTML trazia recursos considerados
revolucionários na época, como suporte a linguagens de scripts e a folhas de estilo em
cascata. Nos anos seguintes, a W3C ainda propôs uma integração entre HTML e XML
(eXtensible Markup Language), que ficou conhecida como XHTML (eXtensible
Hypertext Markup Language), visando à construção de documentos que fossem XMLs
válidos.
A versão HTML5 veio apenas em 2014, trazendo uma série de novos recursos que
visavam, principalmente, à simplificação da sintaxe da linguagem. HTML5 trouxe
suporte a inserções de áudio e vídeo diretamente no HTML, além de suporte a imagens
vetoriais, como o formato SVG (Scalable Vector Graphics).
Elementos básicos
HTML é fundamentado no conceito das chamadas tags (marcações), que são códigos
especiais inseridos entre parênteses angulares, ou seja, os sinais de < (menor que) e >
(maior que). As tags podem ser do tipo simples ou composto (MARIANO; DE MELO-
MINARDI, 2017).
Tag simples:
<exemplo-de-tag-simples>
Tag composta:
<exemplo-de-tag-composta>Conteúdo</exemplo-de-tag-composta>
As tags podem ser personalizadas a partir da inserção de atributos, que recebem valores,
geralmente, declarados entre aspas, da seguinte forma:
<tag atributo="valor">
Pode-se, ainda, inserir uma tag dentro de outra tag. Nesse caso, a tag no interior é
denominada como tag filha. Observe:
<tag_pai>
<tag_filha_1>
<tag_filha_2>
<tag_filha_simples>
</tag_pai>
Neste caso, a tag pai possui três tags filhas. A menos que especificado, as tags filhas
herdam regras de formatação aplicadas à tag pai. Não há limites na quantidade de tags
embutidas em outras tags:
<tag1>
<tag2>
<tag3>
<tag4>
<tag5>
<tag_n></tag_n>
</tag5>
</tag4>
</tag3>
</tag2>
</tag1>
Fonte: elaborado pelo autor.
Em geral, costuma-se inserir tabulações (tab) para indicar que uma tag está contida
dentro de outra. Isso é denominado indentação, e indentar o código não é obrigatório
em HTML, entretanto, um código bem indentado facilita a leitura e, portanto, constitui
em uma boa prática de desenvolvimento de códigos.
Páginas HTML devem ser salvas com a terminação “.html”. Em geral, denominamos a
primeira página com o nome “index.html” (na tradução para o português: “índice”).
Exemplificando
Documentos web podem ser construídos utilizando-se simples editores de texto, como o
Bloco de Notas (Windows) ou o Gedit (Linux). Há desenvolvedores que preferem
utilizar editores de terminal de linha de comando, como vi ou nano. Há, ainda, editores
com recursos personalizados para desenvolvimento de códigos, como a indicação de
linhas e o syntax highlight, que é quando o editor colore palavras e blocos de código de
acordo com a função delimitada pela linguagem utilizada. Como exemplo desses
editores, podemos citar o Notepad++, o Visual Studio Code e o Sublime Text (Figura
1.8).
Agora que você foi introduzido aos conceitos básicos do HTML, vamos começar a criar
nossa primeira página de internet.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>Olá mundo!</p>
</body>
</html>
Fonte: elaborado pelo autor.
Teste a sua primeira página utilizando o Trinket e observe a saída do código a seguir:
Você pode, também, copiar o código em um bloco de notas, salvá-lo como “index.html”
e abri-lo em um navegador. Você verá a seguinte página (Figura 1.9):
1. <!DOCTYPE html>
A tag <html> aparece a seguir. Todo o conteúdo da página HTML deve ser inserido
dentro dessa tag, por isso, ela é fechada apenas na última linha.
2. <html>
3. <head>
5. <meta charset="utf-8">
Assimile
A tag meta é inserida dentro da tag <head>; ela tem múltiplos propósitos e
funcionalidades, em geral, relacionados a metadados da página. Observe algumas
variações dessa tag:
<meta name="description"> content="Descrição do Site">
<meta name="keywords"> content="Palavras-chave do site">
<meta http-equiv="refresh"> content="30">
A tag <head> é fechada na linha 6; em seguida, a tag <body> é aberta. Essa tag permite
a inserção do conteúdo que será exibido no corpo da página.
6. </head>
7. <body>
8. <p>Olá mundo!</p>
Por fim, as tags <body> e <html> são fechadas. Todas as tags compostas devem ser
fechadas.
9. </body>
10. </html>
Parágrafo e títulos
Nessa figura, vemos a estrutura de uma página, além de tags utilizadas para inserção de
parágrafos e títulos. A principal diferença entre elas está no tamanho da fonte. Títulos
podem ser inseridos por meio das tags <h1> a <h6>, sendo <h1> a maior e <h6> a
menor (Quadro 1.1).
Tag Tamanho
<h1></h1>
Título
<h2></h2>
Título
<h3></h3> Título
<h4></h4> Título
<h5></h5> Título
<h6></h6> Título
<p></p> Parágrafo
Pesquise mais
Recomendações de artigos:
o MARIANO, D. Fundamentos do HTML. Diegomariano, 12 ago. 2020a.
o MARIANO, D. Introdução ao HTML. Diegomariano, 13 ago. 2020b.
• Dicas de videoaulas:
o O QUE é um Website? [S.l.: s.n.], 2020. 1 vídeo (5:28 min.). Publicado
pelo canal Diego Mariano.
o COMO a internet funciona? [S.l.: s.n.], 2020. 1 vídeo (6:56 min.).
Publicado pelo canal Diego Mariano.
Referências
COMO a internet funciona? [S.l.: s.n.], 2020. 1 vídeo (6:56 min.). Publicado pelo canal
Diego Mariano. Disponível em: https://bit.ly/2My70qd. Acesso em: 19 out. 2020.
GOURLEY, D. et al. HTTP: the definitive guide. [S.l.]: O’Reilly Media, 2002.
O QUE é um Website? [S.l.: s.n.], 2020. 1 vídeo (5:28 min.). Publicado pelo canal
Diego Mariano. Disponível em: https://bit.ly/3rraz0j. Acesso em: 19 out. 2020.
INTRODUÇÃO À PROGRAMAÇÃO
WEB
Diego César Batista Mariano
Fonte: Shutterstock.
No início da seção, você foi desafiado a solucionar este problema ocasionado pelo
Código 1.1: no Internet Explorer os acentos e cedilha foram trocados por outros
caracteres, dificultando a leitura do texto proposto.
<!DOCTYPE html>
<html>
<head>
<title>Melhore sua conexão com nosso produto</title>
<meta charset="utf-8">
</head>
<body>
<h1>Melhore sua conexão com nosso produto</h1>
Fonte: Shutterstock.
Olá! Nesta seção, você conhecerá algumas tags utilizadas para se determinar a estrutura
de páginas HTML. Tags estruturais agem como containers que delimitam o
posicionamento de elementos em páginas. A partir delas, é possível determinar a forma
e o posicionamento de cada elemento em um documento web.
A tag estrutural mais utilizada é a div. Essa tag cria um container que permite a
aplicação de propriedades de estilo a todas as outras tags posicionadas dentro do bloco.
Entretanto, HTML5 trouxe uma série de novas tags que adicionam semântica à estrutura
das páginas, apesar de, na prática, possuírem a mesma funcionalidade que a tag div. São
exemplos dessas tags estruturais HTML: section, header, footer, nav, article e aside.
Além disso, você conhecerá novas tags para aprimorar a tipografia de seus websites
usando elementos inline, como adicionar textos em negrito, itálico e sublinhado. Você
aprenderá, ainda, a criar listas ordenadas e não ordenadas, a inserir links que conectam
sua página a outros endereços, a criar iframes que adicionam conteúdo externo a sua
página e a adicionar mídias, como imagens, áudios e vídeos, usando HTML5.
Nesta seção, você será apresentado a uma série de novas tags HTML, por isso, é
importante que pratique o que aprender. Reproduza os exemplos apresentados em seu
computador e verifique a execução em diferentes navegadores.
Agora, imagine que você acaba de ser contratado para realizar um estágio em uma
empresa que vende planos de internet. Em seu primeiro dia de trabalho, seu chefe lhe
apresentou as funções que desempenhará. Uma delas envolve prestar manutenção no
código-fonte do site de vendas da empresa.
<div class="card-header">
<h4 class="my-0 font-weight-normal">Free</h4>
</div>
<div class="card-body">
</div>
</div>
<div class="card-header">
<h4 class="my-0 font-weight-normal">Pro</h4>
</div>
<div class="card-body">
</div>
</div>
<div class="card-header">
<h4 class="my-0 font-weight-normal">Enterprise</h4>
</div>
<div class="card-body">
</div>
</div>
</div>
Supondo que você não tenha conhecimento das folhas de estilo utilizadas e faça
alterações apenas nos códigos HTML, descreva os passos para a resolução do problema.
conceito-chave
A princípio, pode ser difícil perceber, mas cada bloco de conteúdo da página está
organizado em blocos de códigos (containers) cercados por uma tag HTML, conforme
pode ser visto na Figura 1.14. Esses blocos, por sua vez, estão organizados dentro de
outros blocos, de forma a construir uma estrutura física para o conteúdo da página. Cada
um desses containers, embora não apareça no exemplo, pode ser visualizado se se
aplicar os códigos de estilo). Geralmente, o espaço ocupado pelo conteúdo é delimitado
de maneira quadrangular. Observe, na Figura 1.15, as possíveis posições das tags
estruturais. Perceba que as seções 1 e 2 (Artigos) fazem parte de um container maior
localizado ao lado da seção 3 (News).
Observe, na Figura 1.15, a primeira linha pontilhada (primeiro container), que delimita
todo o conteúdo da página. Dentro desse container, temos dois outros containers, que
dividem a página em uma seção principal (tópicos 1 e 2, à esquerda) e um menu
secundário (tópico 3, à direita). Os textos em News (tópico 3) foram inseridos
linearmente, logo, não é necessário adicionar tags estruturais para cada um deles. Por
padrão, HTML insere novos elementos abaixo de outros elementos.
A Figura 1.15, na caixa à esquerda, apresenta a seção Artigos, em que novas divisórias
foram inseridas (representadas pelos retângulos azuis). A primeira delas foi dividida em
duas partes. A seguir, um novo bloco foi dividido em quatro containers, que, por sua
vez, são divididos em duas partes (imagem/texto). Nesse caso, foi aplicada uma
propriedade para que os quatro containers que representam artigos sejam alocados lado
a lado, sendo cada um adicionado em seu próprio container.
Cada um desses containers possui uma tag composta, que deve ser corretamente
posicionada dentro ou ao lado de outras tags. Caso uma dessas tags compostas não seja
corretamente fechada, a estrutura da página pode ser corrompida, causando danos no
leiaute do site, como o problema apresentado na Figura 1.16.
Figura 1.16 | Estrutura da página corrompida devido a uma tag não fechada
Nesse caso, apenas uma tag em um dos containers não foi fechada, desconfigurando
completamente a estrutura da página. Esse é considerado um dos erros mais comuns em
desenvolvimento web e, mesmo assim, ainda pode ser um erro difícil de solucionar, isso
porque, em páginas muito grandes, uma tag incorretamente fechada pode ser difícil de
ser detectada. Por isso, é sempre importante indentar corretamente o seu código.
Exemplificando
<!DOCTYPE html><html><head><title>Importância da
indentação</title></head><body><div><p>DIV 1</p><div><p>DIV 2</p><div><p>DIV
3</p><div><p>DIV 4</p></div></div></div></body></html>
Agora, vamos apresentar esse mesmo código indentado. Observe, a seguir, como os
blocos de tags compostas estão organizados. A maioria dos editores de código inclui
marcadores e linhas que delimitam as declarações de abertura e fechamento de tags,
logo, observe que o erro pode ser facilmente encontrado: há uma tag não fechada na
linha 19.
<!DOCTYPE html>
<html>
| <head>
| | <title>Importância da indentação</title>
| </head>
| <body>
| | <div>
| | | <p>DIV 1</p>
| | | <div>
| | | | <p>DIV 2</p>
| | | | <div>
| | | | | <p>DIV 3</p>
| | | | | <div>
| | | | | | <p>DIV 4</p>
| | | | | </div>
| | | | </div>
| | | </div>
||
| </body>
</html>
Fonte: elaborado pelo ator.
Novidades do HTML5
Exemplificando
<!DOCTYPE html>
<html>
<head></head>
<body>
<header>
<nav></nav>
</header>
<div>
<article>
<section></section>
</article>
<aside></aside>
</div>
<footer></footer>
</body>
</html>
Entretanto, ao implementar esse código, você não verá nada no navegador, uma vez que
tags estruturais apenas delimitam o posicionamento em que os itens serão inseridos.
Você poderá visualizá-los quando implementar regras de estilo com CSS.
A Figura 1.17 ilustra um exemplo de implementação dessas tags para se estruturar uma
página HTML.
Nesse exemplo, vemos que a tag <header> é usada para delimitar a região do cabeçalho
da página (não confunda com o cabeçalho do documento, que apenas mantém os
metadados da página e, portanto, não é exibido). Dentro da tag <header> está a tag
<nav>, utilizada para armazenar menus de navegação. Observe que poderia ser utilizada
a tag <menu>, a depender do contexto, ou, ainda, inverter a ordem em que
<header> e <nav> estão descritas.
A seguir, uma <div> delimitará todo o conteúdo central de uma página (Quadro 1.2).
Em geral, essa seção é utilizada para carregar elementos dinâmicos (i.e., elementos que
serão alterados em diferentes páginas). Esse container, então, é dividido em duas
colunas: (1) <article>, região em que será adicionado o texto e que ocupa a maior parte
do espaço da div; e (2) <aside>, que receberá menus laterais e, portanto, possui uma
largura menor. Dentro de <article>, pode-se inserir tags do tipo <section>, a fim de se
categorizar o conteúdo e facilitar a navegação em páginas muito grandes; por fim, o
<footer>, também conhecido como rodapé, recebe informações complementares, que,
em geral, são repetidas em todas as páginas.
Reflita
Modificado no
<TAG> Definição
HTML5
b Texto em negrito x
br Quebra de linha
hr Linha horizontal x
li Item da lista
ol Lista ordenada
p Parágrafo
<!DOCTYPE html>
<html>
| <head><meta charset="UTF-8"></head>
| <body>
| | <h1>Título</h1>
| | <hr>
| | <span>
| | | <b>Negrito</b>
| | | <strong>Ênfase forte</strong>
| | | <i>Itálico</i>
| | | <em>Ênfase fraco</em>
| | | <u>Sublinhado</u>
| | </span>
| </body>
</html>
Fonte: elaborado pelo ator.
A seguir, abra o arquivo em um navegador; assim, você terá a página da Figura 1.18.
Perceba que as tags <b> e <strong> têm o mesmo efeito no texto: a inserção de negrito
(linhas 9-10); da mesma forma, <i> e <em> alteram o texto para itálico (linhas 11-12).
Apesar de terem efeitos práticos similares, o motivo de uso dessas tags deve estar
relacionado ao contexto empregado. Em geral, <strong> e <em> são indicados para
inserção de ênfase, enquanto <b> e <i> são as tags tradicionais usadas para
configuração de negrito e itálico.
Outro recurso textual do HTML é o que corresponde à inserção de listas, que podem ser
ordenadas (ol) ou não ordenadas (ul). Observe a implementação de listas a seguir:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"</head>
<body>
<h1>Lista</h1>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
<h2>Lista ordenada</h2>
<ol>
<li>Item</li>
<li>Item</li>
</ol>
</body>
</html>
Teste em seu navegador ou utilize o Trinket para visualizar a saída das listas (Figura
1.19).
Ambos os tipos de lista têm o mesmo método para inserção de itens: a tag <li>. Observe
que a lista não ordenada insere apenas um ponto (bullet) antes do item, já a lista
ordenada insere um numeral.
Uma outra tag que vale a pena mencionar é <style>. Essa tag permite alterar os estilos
da página, que serão abordados com maior intensidade quando falarmos sobre folhas de
estilo em cascata (CSS). Entretanto, aqui, apresentaremos um breve uso dessa tag sem
entrar em detalhes.
O código a seguir reproduz a Figura 1.20 com a cor de fundo vermelha. Essa
configuração foi feita usando-se a propriedade CSS backgroung-color com o valor
red (vermelho em inglês) aplicada à tag body.
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"</head>
<body>
<p>Texto normal</p>
<pre>Texto pre</pre>
<style>
body{
background-color: red;
}
</style>
</body>
</html>
Teste o código utilizando a ferramenta Trinket. Você pode alterar a cor de fundo
(background) do corpo da página (body) (Figura 1.21).
Figura 1.21 | Fundo (background) do corpo da página (body) na cor vermelha (red)
Links em HTML
A tag <a> é um elemento do tipo inline que permite a inserção de links para outras
páginas (SILVA, 2018). Por padrão, o texto em um link é exibido sublinhado e na cor
azul, entretanto, essas configurações podem ser alteradas usando-se folhas de estilos.
Um link recebe, no atributo href, o endereço ao qual será direcionado. Além disso, links
podem ser absolutos ou relativos. Os links absolutos informam o endereço completo do
item a ser acessado. Observe um exemplo de link absoluto:
<a href="https://google.com.br">Link</a>
Os links relativos devem levar em consideração a posição do arquivo que se deseja
acessar. Por exemplo: se o arquivo que deseja está na “public/views”, você deve acessá-
lo desta forma (Figura 1.22):
Figura 1.22 | Criando um link para uma página secundária usando Sublime Text
Caso queira criar um link desse outro arquivo, indique que o arquivo se encontra duas
pastas antes. Para isso, use a seguinte estrutura:
<a href="../../index.html">Link</a>
Sendo que cada “..” indica que está retornando a uma pasta anterior.
<a href="../../index.html" target="_blank">Link</a>
Atenção
A tag <a> cria ligações para outros locais, enquanto a tag <link> cria uma ligação entre
o documento atual e um conteúdo externo, como quando queremos adicionar um
arquivo CSS a nossa página.
Imagens podem ser inseridas em HTML usando-se a tag <img>. Essa tag recebe o
atributo src, que receberá o endereço completo da imagem. Nesse caso, as regras
utilizadas para se definir o endereço são as mesmas usadas para se inserir links <a>.
Observe o uso da tag <img>:
<img src="endereco_da_imagem.extensao">
Exemplificando
<html>
<head>
<title>img</title>
</head>
<body>
<img src="tag.png">
</body>
</html>
Ao abrir esse arquivo no navegador, você verá a seguinte página (Figura 1.25):
Podemos, ainda, incluir imagens da internet em uma página web apesar de não ser uma
boa prática inserir o src da imagem diretamente da internet, pois isso mantém seu site
dependente de uma página, ou seja, de uma imagem hospedada em outro servidor, e isso
pode deixar seu carregamento mais lento. Teste o exemplo da página com o Trinket:
HTML ainda permite a inserção de arquivos de áudio e vídeo diretamente na página por
meio das tags <audio> e <video>, respectivamente. A seguir, mostraremos um exemplo
contendo as tags <audio> e <video>.
<!DOCTYPE html>
<audio controls>
<source src="musica.mp3" type="audio/mpeg">
</audio>
<video controls>
<source src="video.mp4" type="vide/mp4">
</video>
iframes
<iframe src="https://www.youtube.com/embed/fXabY0-2jO8"></iframe>
Nesse exemplo, você só precisa informar o endereço do elemento que será incorporado;
a partir do acesso a um servidor externo, o item será inserido e todos os componentes
dele serão incluídos na sua página, sem a necessidade de se acrescentar qualquer outro
código. O exemplo apresentado gera a seguinte página (Figura 1.27):
É possível, ainda, controlar a largura e a altura do iframe por meio dos atributos width e
height, respectivamente. Esses atributos recebem valores em pixels. Por exemplo:
<iframe
width="640"
height="480"
src="https://www.youtube.com/embed/fXabY0-2jO8"
>
</iframe>
O código apresentado cria um iframe de tamanho 640px de largura por 480px de altura.
HTML5 Responsivo
Nos últimos anos, novos meios de acesso a websites têm se popularizado, como
celulares, tablets, laptops e computadores com telas de diversos tamanhos. Assim, um
site desenvolvido especificadamente para um dispositivo com tela FULL HD
(1920x1080) não pode ser visualizado corretamente em um smartphone cuja resolução é
375x812.
Figura 1.28 | Exemplo de uma página carregada em três diferentes dispositivos: computador
desktop, tablet e smartphone
Fonte: capturas de tela do site da Biblioteca Virtual da Kroton com adaptação do autor.
Pesquise mais
Nesta seção, você aprendeu as tags estruturais <div>, <section>, <article> além de tags
utilizadas para inserção de links e imagens (<a> e <img>, respectivamente).
Dicas de videoaulas:
Tags básicas:
o TAGS. [S.l.: s.n.], 2017. 1 vídeo (5:14 min.). Publicado pelo canal Diego
Mariano.
Inserindo imagens no HTML:
o IMAGENS. [S.l.: s.n.], 2017. 1 vídeo (3:05 min.). Publicado pelo canal
Diego Mariano.
• Trabalhando com links:
o LINKS. [S.l.: s.n.], 2017. 1 vídeo (3:35 min.). Publicado pelo canal
Diego Mariano.
Referências
IMAGENS. [S.l.: s.n.], 2017. 1 vídeo (3:05 min.). Publicado pelo canal Diego Mariano.
Disponível em: https://bit.ly/3oQuyUr. Acesso em: 10 nov. 2020.
LINKS. [S.l.: s.n.], 2017. 1 vídeo (3:35 min.). Publicado pelo canal Diego Mariano.
Disponível em: https://bit.ly/36JIBop. Acesso em: 10 nov. 2020.
MARIANO, D.; DE MELO-MINARDI, R. Introdução à programação web para
bioinformática: html, css, php and javascript. [S.l.]: Independently Published, 2017.
TAGS. [S.l.: s.n.], 2017. 1 vídeo (5:14 min.). Publicado pelo canal Diego Mariano.
Disponível em: https://bit.ly/3oNYYXn. Acesso em: 10 nov. 2020.
W3C WORKING DRAFT. HTML: the markup language (an HTML language
reference). [s.d.]. Disponível em: https://bit.ly/3pOldxK. Acesso em: 10 nov. 2020.
FOCO NO MERCADO DE TRABALHO
Fonte: Shutterstock.
No início desta seção, você foi apresentado a uma página com leiaute desconfigurado e
a seu respectivo código-fonte. O seu desafio consiste em consertá-lo.
Para solução do problema, você deve verificar, inicialmente, onde ele ocorreu.
Percebemos que o possível trecho com erro envolve o texto div class="card mb-4-
shadow-sm". Vamos, então, pesquisar todas as ocorrências desse termo no Código 1.5
(exposto anteriormente). Observe que esse termo aparece três vezes:
DESENVOLVIMENTOS DE
FORMULÁRIOS E TABELAS EM
HTML5
Diego César Batista Mariano
Tabelas são essenciais para organizar dados, já os formulários permitem que clientes
interajam com o website.
Fonte: Shutterstock.
Olá! Nesta seção, você aprenderá sobre a construção de tabelas (componentes que
permitem a inserção de dados tabulares) e de formulários (tipos de elementos HTML
usados para envio de informações).
Tabelas são essenciais para organizar dados e podem ser criadas usando-se a tag
<table>. Devemos ressaltar que cada elemento da tabela deve ser declarado
separadamente usando-se a tag <td>, que representa uma célula. Além disso, um
conjunto de células deve ser organizado em uma linha, que deve ser criada usando-se o
comando <tr>. Apesar de as tabelas poderem receber uma quantidade maior de linhas,
essas são consideradas as principais tags para se produzir uma tabela mínima. Nesta
seção, você conhecerá também as outras tags relacionadas a tabelas e suas
particularidades.
Por fim, você também verá como criar formulários HTML, que permitem que clientes
interajam com seu website. A função dos formulários é receber valores digitados ou
arquivos inseridos e, então, enviá-los para o servidor, por meio de uma página
previamente estabelecida, a fim de que seja processado por uma linguagem back-end.
Vide por exemplo um sistema que coleta data de nascimento. Qual seria a forma ideal
de digitar a data? 01-01-2021, 01/01/2021 ou 1º de janeiro de 2021? E para clientes de
países em que o mês é digitado em uma posição invertida ao dia? Todas essas questões
representam problemas na hora de processar os dados. Por isso, HTML5 apresentou a
tag input do tipo date, que coleta a data correta, pedindo ao usuário que apenas a
selecione no calendário.
Diante disso, requisitaram você para construir essa página por meio da qual os clientes
da empresa de planos de internet poderão entrar em contato com o estabelecimento.
Você, então, pesquisou modelos de formulários de contato e encontrou o exemplo da
Figura 1.32 a seguir.
Com base no modelo apresentado na Figura 1.32, construa um código HTML que
reproduza um formulário de contato. Utilize tabelas sem bordas para alinhar os campos
e-mail e telefone.
Neste momento, não se preocupe com o processamento e o envio de e-mails, pois isso
será apresentado posteriormente. E quando tratarmos sobre CSS, aprenderemos métodos
melhores para alinhar elementos lado a lado.
Bons estudos!
conceito-chave
Tabelas
Caro aluno, você já viu como páginas podem ser estruturadas, agora, verá tags que
representam componentes importantes do HTML, como as tabelas.
Você já deve ter visto alguma tabela, no entanto, é importante que relembre alguns
conceitos para entender como ela é interpretada em HTML. Uma tabela possibilita
organizar informações em três componentes principais: colunas, linhas e células,
conforme a Figura 1.33.
Figura 1.33 | Exemplo de tabela
Em HTML, tabelas são definidas por meio da tag composta <table>. Ao se criar uma
tabela, as linhas são inseridas por meio da tag <tr>. Células podem ser inseridas
usando-se a tag <th>, para célula de cabeçalho, ou <td>, para células comuns. Por
padrão, o texto inserido a partir da tag de cabeçalho <th> está em negrito, enquanto os
elementos inseridos por meio da tag de células comuns <td> são alinhados à esquerda
em fonte normal. A Figura 1.34 ilustra como uma tabela pode ser estruturada em
HTML.
O Código 1.15 a seguir nos mostra um exemplo de uma simples tabela em HTML. A
saída do código da tabela pode ser visualizada na Figura 1.35 e corresponde à
visualização em um navegador (browser). No simulador, você consegue executar e
modificar a informação da tabela.
<table>
<tr>
<th>#</th>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>1</td>
<td>1A</td>
<td>1B</td>
<td>1C</td>
</tr>
<tr>
<td>2</td>
<td>2A</td>
<td>2B</td>
<td>2C</td>
</tr>
<tr>
<td>3</td>
<td>3A</td>
<td>3B</td>
<td>3C</td>
</tr>
</table>
Fonte: elaborado pelo autor. Figura 1.35 | Visualização da tabela no navegador
1. <table>
2. <tr>
A primeira linha tem uma característica especial: ela deve receber as células de
cabeçalho, portanto, cada célula é declarada com a tag <th> (na prática, isso apenas
deixa o texto em negrito). Vamos adicionar quatro células (ou seja, teremos quatro
colunas):
3. <th>#</th>
4. <th>A</th>
5. <th>B</th>
6. <th>C</th>
A primeira linha deve, então, ser fechada para que a próxima possa ser aberta:
7. </tr>
9. <tr>
10. <td>1</td>
11. <td>1A</td>
12. <td>1B</td>
13. <td>1C</td>
14. </tr>
15.
16. <tr>
17. <td>2</td>
18. <td>2A</td>
19. <td>2B</td>
20. <td>2C</td>
21. </tr>
22.
23. <tr>
24. <td>3</td>
25. <td>3A</td>
26. <td>3B</td>
27. <td>3C</td>
28. </tr>
29. </table>
Por padrão, tabelas inseridas não possuem borda. Você pode inseri-las usando o atributo
border, que recebe um valor numérico indicando a largura desejada para a borda,
conforme vemos na Figura 1.36.
<table border=1>
Você pode, ainda, adicionar cor ao fundo de uma tabela usando o atributo bgcolor, que
recebe o nome da cor desejada (em inglês). Neste caso, foi inserida a cor amarela
(yellow).
<table border=1 bgcolor="yellow">
A seguir, apresentaremos uma tabela em HTML contendo algumas cores e seus códigos
em hexadecimal. Observe que utilizamos o atributo bgcolor com a tag <td> para cada
linha da primeira coluna na tabela; já na segunda coluna, temos os códigos em
hexadecimal. Tais cores podem ser utilizadas na concepção de uma página web em
HTML. Observe a tabela e seu código na ferramenta Trinket:
O atributo height recebe um valor em pixels para definir a altura do item. Observe que
ele foi aplicado apenas na primeira linha <tr>. O atributo width determina a largura do
item, logo, observe que, após ter sido aplicado em cada célula, a largura delas nas linhas
seguintes também foi alterada.
Podemos modificar e verificar a cor de fundo da tabela, teste com a ferramenta Trinket,
alterando para a cor azul, e modifique os valores de altura e largura.
Reflita
Mesclando células
É possível mesclar células usando o atributo colspan, utilizado para mesclar colunas,
como na Figura 1.39. Podemos, ainda, mesclar linhas utilizando o atributo rowspan.
Observe a estrutura na Figura 1.40. Esses atributos podem ser utilizados tanto em
células do tipo <th> quanto do tipo <td>. Para isso, primeiro você deve determinar
quantas colunas serão mescladas (no exemplo a seguir, duas). A seguir, utilizar o
atributo colspan para indicar quais células serão unidas. Como mencionado, pode-se,
ainda, utilizar a propriedade rowspan para unir linhas.
HTML5 trouxe tags que permitem uma melhor maneira de organizar tabelas: <thead>,
<tbody> e <tfoot>. A tag <thead> é utilizada para inserir as células do cabeçalho. O
conteúdo da tabela deve ser inserido em <tbody>; já <tfoot> pode ser usado para
inserção de linhas conclusivas ou de notas de rodapé. Observe a tabela criada e ilustrada
na Figura 1.41.
Caro aluno, agora que você conhece as tags para criação de tabela, aprenderá a criar
outro elemento em HTML: os formulários. Você já deve ter se deparado com páginas de
serviços na internet em que é preciso preencher formulários de contato, de suporte, de
atendimento, orçamento, compras, cadastro, entre outros. Então, agora você conhecerá
algumas das tags utilizadas na construção de formulários.
Formulários
Formulários são tipos de elementos HTML usados para coletar os dados que o
desenvolvedor deseja processar e/ou salvar (TITTEL; NOBLE; COUTO, 2018). O uso
de formulários é a forma mais efetiva para se obter dados relevantes dos usuários do seu
website (GUPTA, 2013). A Figura 1.32 ilustra um exemplo de formulário de contato
com alguns campos para inclusão de dados pessoais e mensagem.
Formulários podem ser criados usando-se a tag <form>, que pode receber como
principais atributos action, method e name (MARIANO; DE MELO-MINARDI, 2017).
O atributo action informa ao navegador para qual endereço deve enviar as informações
presentes no formulário; o atributo method indica o método a ser utilizado para envio
(POST e GET são os mais comuns); por fim, o atributo name indica o nome utilizado
para o formulário.
Assimile
POST pode ser utilizado, por exemplo, para envio de arquivos ou em formulários com
dados sigilosos.
Por outro lado, os envios por meio do método GET transmitem os dados pela URL da
página. Por exemplo:
www.site.com.br/?id=1
Nesse exemplo, é feita uma requisição do tipo GET, em que a variável id é igual a 1.
Portanto, os dados enviados em GET são visualmente públicos (MARIANO; DE
MELO-MINARDI, 2017).
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulários</title>
</head>
<body>
<form
name="meu_primeiro_formulario"
method="POST"
action="gravaDados.php"
enctype="multipart/form-data"
>
</form>
</body>
</html>
Observe que o formulário é aberto por meio da tag <form> e fechado via tag
</form>.
Em name="meu_primeiro_formulario", define-se o nome do formulário. No
caso, ele foi nomeado como “meu_primeiro_formulario”. Observe que
evitamos o uso de espaços ou outros caracteres especiais. Isso se dá uma vez que
esse nome pode ser utilizado na etapa de processamento, já os caracteres
especiais podem ser codificados ou não, a depender do tipo de enctype utilizado
para envio.
Em method="POST" define-se o método de envio considerado, o qual foi o
POST.
Em action="gravaDados.php" define-se que o atributo action aponta para
“gravarDados.php”. Assim, para que esse formulário funcione corretamente,
deve existir um arquivo denominado “gravarDados.php”, que recebe os dados
enviados pelo método POST e processa-os usando a linguagem de programação
PHP (outras linguagens também podem ser utilizadas, entretanto, citaremos
apenas PHP aqui, pois será a linguagem abordada ao final dos nossos estudos).
Por fim, em enctype="multipart/form-data", define-se que o enctype utilizado é
o “multipart/form-data”. Declarar o enctype é necessário quando queremos
enviar arquivos anexados ao formulário.
A seguir, você conhecerá os elementos que podem ser incluídos em formulários HTML.
Elementos de formulários
Menu de seleção: elemento que fornece um menu suspenso que será exibido
quando o usuário clicar. É criado com a tag <select>. Cada item é adicionado
usando-se a tag <option>. Observe o exemplo com um menu de seleção com os
dias da semana.
<select name="dias_da_semana">
<option value="segunda">Segunda-Feira</option>
<option value="terca">Terça-Feira</option>
<option value="quarta">Quarta-Feira</option>
<option value="quinta">Quinta-Feira</option>
<option value="sexta">Sexta-Feira</option>
<option value="sabado">Sábado</option>
<option value="domingo">Domingo</option>
</select>
Fonte: elaborado pelo autor.
Botões: botões permitem diversos tipos de ação e podem ser integrados por
meio de scripts. São criados com a tag <button>.
<button>Clique aqui</button>
Exemplos: <label>Dias da semana:</label> e <label>Contato:</label>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulários</title>
</head>
<body>
<form
method="POST"
action="gravaDados.php"
enctype="multipart/form-data"
>
<label>Dias da semana:</label>
<select name="dias_da_semana">
<option value="segunda">Segunda-Feira</option>
<option value="terca">Terça-Feira</option>
<option value="quarta">Quarta-Feira</option>
<option value="quinta">Quinta-Feira</option>
<option value="sexta">Sexta-Feira</option>
<option value="sabado">Sábado</option>
<option value="domingo">Domingo</option>
</select>
<br>
<label>Contato:</label>
<br>
<label>Enviar:</label>
<button>Clique aqui</button>
</form>
</body>
</html>
Fonte: elaborado pelo autor. Figura 1.42 | Elementos de formulários: menu de seleção, área
de texto e botão (à esquerda). À direita é exibido o menu de seleção quando clicado
<input type="text">
A tag <input> pode ter diversos tipos (especificados no atributo type), como caixas de
texto, senhas, caixas de seleção múltiplas e únicas, entre outros.
A tag <input> recebe uma série de atributos que definirão o tipo dos dados que serão
submetidos como entrada. Observe o Quadro 1.4.
Tipo Descrição
button Botão.
Exemplificando
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulários</title>
</head>
<body>
<input type="button"><br><br>
<input type="checkbox"><br><br>
<input type="color"><br><br>
<input type="date"><br><br>
<label>Entrada do tipo: datetime</label><br>
<input type="datetime"><br><br>
<input type="datetime-local"><br><br>
</div>
<input type="email"><br><br>
<input type="file"><br><br>
<input type="hidden"><br><br>
<input type="image"><br><br>
<input type="month"><br><br>
<input type="number"><br><br>
</div>
<input type="password"><br><br>
<input type="radio"><br><br>
<input type="range"><br><br>
<input type="reset"><br><br>
</div>
<input type="submit"><br><br>
<input type="tel"><br><br>
<input type="text"><br><br>
<input type="time"><br><br>
<input type="url"><br><br>
<input type="week"><br><br>
</div>
</form>
</body>
</html>
Fonte: elaborado pelo autor.
As caixas de texto (type text) são os elementos de entrada mais comuns. Esse tipo de
input gera uma caixa de texto de linha única em que o usuário poderá digitar qualquer
tipo de informação. As caixas de texto de senhas (type password) são bastante similares
a elas. A principal diferença é que nos inputs do tipo password, o texto é criptografado
diretamente quando digitado. Observe o exemplo da Figura 1.44.
<label>Texto escondido</label><br>
<input type="password"<br><br>
Figura 1.44 | Inputs dos tipos text e password. Ao digitar no campo do tipo password, os
caracteres são exibidos como marcadores
Botões
Além do elemento <button>, HTML fornece duas outras formas de criação de botões. A
primeira delas é utilizando-se o input do tipo button. A outra forma de gerar um botão é
utilizando um input do tipo submit. Entretanto, o botão do tipo submit tem a função
específica de enviar o formulário para a página indicada no atributo action de form,
conforme a Figura 1.45.
<label>Similar a button</label>
<input type="button" value="Botão"<br>
<input type="submit" value="Enviar">
As caixas de seleção permitem que usuários escolham certas opções. Elas são divididas
em dois tipos: caixas de seleção únicas (radio), caracterizadas por seu formato circular,
e caixas de seleção múltiplas (checkbox), caracterizadas pelo seu formato quadrangular.
<label>Seleção múltipla</label>
<input type="checkbox" name="multiplo" value="1">
<input type="checkbox" name="multiplo" value="2">
<input type="checkbox" name="multiplo" value="3"><br>
<label>Seleção única</label>
<input type="radio" name="unico" value="2">
<input type="radio" name="unico" value="2">
<input type="radio" name="unico" value="2">
Fonte: elaborado pelo autor. Figura 1.46 | Caixas de seleção múltiplas (checkbox) e únicas
(radio)
Perceba que cada entrada apresenta um mesmo valor para o atributo name. Isso indica à
página de processamento que os campos de seleção representam uma mesma variável.
A diferença entre os campos será dada pelo valor existente no atributo value. Nos
códigos de seleção múltipla e única apresentados, observe que a variável multiplo
recebe os valores [1, 2, 3], enquanto a variável unico recebe o valor 2.
HTML5 apresentou novos tipos de entradas para formulários, como os inputs dos tipos
date e color. O tipo date fornece um campo que, quando clicado, exibe um calendário
que permite ao usuário selecionar uma data. A Figura 1.47 ilustra o resultado da
utilização do input do tipo date.
<input type="date">
Já as entradas do tipo color permitem que o usuário selecione uma cor. Esse elemento
retorna um código de cores RGB, como vemos na Figura 1.48.
<input type="color">
Bom trabalho!
Referências
TITTEL, E.; NOBLE, J.; COUTO, E. HTML, XHTML e CSS Para Leigos. Tradução
de Elda Couto. Rio de Janeiro: Alta Books, 2018.
W3C WORKING DRAFT. HTML: the markup language (an HTML language
reference). [s.d]. Disponível em: https://bit.ly/3tp54kx. Acesso em: 17 nov. 2020.
Fonte: Shutterstock.
No início desta seção, você foi apresentado a uma página com leiaute desconfigurado e
a seu respectivo código-fonte. O seu desafio consiste em consertá-lo.
Para solução do problema, você deve verificar, inicialmente, onde ele ocorreu.
Percebemos que o possível trecho com erro envolve o texto div class="card mb-4-
shadow-sm". Vamos, então, pesquisar todas as ocorrências desse termo no Código 1.5
(exposto anteriormente). Observe que esse termo aparece três vezes:
DESENVOLVIMENTOS DE
FORMULÁRIOS E TABELAS EM
HTML5
Diego César Batista Mariano
Tabelas são essenciais para organizar dados, já os formulários permitem que clientes
interajam com o website.
Fonte: Shutterstock.
Olá! Nesta seção, você aprenderá sobre a construção de tabelas (componentes que
permitem a inserção de dados tabulares) e de formulários (tipos de elementos HTML
usados para envio de informações).
Tabelas são essenciais para organizar dados e podem ser criadas usando-se a tag
<table>. Devemos ressaltar que cada elemento da tabela deve ser declarado
separadamente usando-se a tag <td>, que representa uma célula. Além disso, um
conjunto de células deve ser organizado em uma linha, que deve ser criada usando-se o
comando <tr>. Apesar de as tabelas poderem receber uma quantidade maior de linhas,
essas são consideradas as principais tags para se produzir uma tabela mínima. Nesta
seção, você conhecerá também as outras tags relacionadas a tabelas e suas
particularidades.
Por fim, você também verá como criar formulários HTML, que permitem que clientes
interajam com seu website. A função dos formulários é receber valores digitados ou
arquivos inseridos e, então, enviá-los para o servidor, por meio de uma página
previamente estabelecida, a fim de que seja processado por uma linguagem back-end.
Vide por exemplo um sistema que coleta data de nascimento. Qual seria a forma ideal
de digitar a data? 01-01-2021, 01/01/2021 ou 1º de janeiro de 2021? E para clientes de
países em que o mês é digitado em uma posição invertida ao dia? Todas essas questões
representam problemas na hora de processar os dados. Por isso, HTML5 apresentou a
tag input do tipo date, que coleta a data correta, pedindo ao usuário que apenas a
selecione no calendário.
Diante disso, requisitaram você para construir essa página por meio da qual os clientes
da empresa de planos de internet poderão entrar em contato com o estabelecimento.
Você, então, pesquisou modelos de formulários de contato e encontrou o exemplo da
Figura 1.32 a seguir.
Com base no modelo apresentado na Figura 1.32, construa um código HTML que
reproduza um formulário de contato. Utilize tabelas sem bordas para alinhar os campos
e-mail e telefone.
Neste momento, não se preocupe com o processamento e o envio de e-mails, pois isso
será apresentado posteriormente. E quando tratarmos sobre CSS, aprenderemos métodos
melhores para alinhar elementos lado a lado.
Bons estudos!
conceito-chave
Tabelas
Caro aluno, você já viu como páginas podem ser estruturadas, agora, verá tags que
representam componentes importantes do HTML, como as tabelas.
Você já deve ter visto alguma tabela, no entanto, é importante que relembre alguns
conceitos para entender como ela é interpretada em HTML. Uma tabela possibilita
organizar informações em três componentes principais: colunas, linhas e células,
conforme a Figura 1.33.
Figura 1.33 | Exemplo de tabela
Em HTML, tabelas são definidas por meio da tag composta <table>. Ao se criar uma
tabela, as linhas são inseridas por meio da tag <tr>. Células podem ser inseridas
usando-se a tag <th>, para célula de cabeçalho, ou <td>, para células comuns. Por
padrão, o texto inserido a partir da tag de cabeçalho <th> está em negrito, enquanto os
elementos inseridos por meio da tag de células comuns <td> são alinhados à esquerda
em fonte normal. A Figura 1.34 ilustra como uma tabela pode ser estruturada em
HTML.
O Código 1.15 a seguir nos mostra um exemplo de uma simples tabela em HTML. A
saída do código da tabela pode ser visualizada na Figura 1.35 e corresponde à
visualização em um navegador (browser). No simulador, você consegue executar e
modificar a informação da tabela.
<table>
<tr>
<th>#</th>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>1</td>
<td>1A</td>
<td>1B</td>
<td>1C</td>
</tr>
<tr>
<td>2</td>
<td>2A</td>
<td>2B</td>
<td>2C</td>
</tr>
<tr>
<td>3</td>
<td>3A</td>
<td>3B</td>
<td>3C</td>
</tr>
</table>
Fonte: elaborado pelo autor. Figura 1.35 | Visualização da tabela no navegador
1. <table>
2. <tr>
A primeira linha tem uma característica especial: ela deve receber as células de
cabeçalho, portanto, cada célula é declarada com a tag <th> (na prática, isso apenas
deixa o texto em negrito). Vamos adicionar quatro células (ou seja, teremos quatro
colunas):
3. <th>#</th>
4. <th>A</th>
5. <th>B</th>
6. <th>C</th>
A primeira linha deve, então, ser fechada para que a próxima possa ser aberta:
7. </tr>
9. <tr>
10. <td>1</td>
11. <td>1A</td>
12. <td>1B</td>
13. <td>1C</td>
14. </tr>
15.
16. <tr>
17. <td>2</td>
18. <td>2A</td>
19. <td>2B</td>
20. <td>2C</td>
21. </tr>
22.
23. <tr>
24. <td>3</td>
25. <td>3A</td>
26. <td>3B</td>
27. <td>3C</td>
28. </tr>
29. </table>
Por padrão, tabelas inseridas não possuem borda. Você pode inseri-las usando o atributo
border, que recebe um valor numérico indicando a largura desejada para a borda,
conforme vemos na Figura 1.36.
<table border=1>
Você pode, ainda, adicionar cor ao fundo de uma tabela usando o atributo bgcolor, que
recebe o nome da cor desejada (em inglês). Neste caso, foi inserida a cor amarela
(yellow).
<table border=1 bgcolor="yellow">
A seguir, apresentaremos uma tabela em HTML contendo algumas cores e seus códigos
em hexadecimal. Observe que utilizamos o atributo bgcolor com a tag <td> para cada
linha da primeira coluna na tabela; já na segunda coluna, temos os códigos em
hexadecimal. Tais cores podem ser utilizadas na concepção de uma página web em
HTML. Observe a tabela e seu código na ferramenta Trinket:
O atributo height recebe um valor em pixels para definir a altura do item. Observe que
ele foi aplicado apenas na primeira linha <tr>. O atributo width determina a largura do
item, logo, observe que, após ter sido aplicado em cada célula, a largura delas nas linhas
seguintes também foi alterada.
Podemos modificar e verificar a cor de fundo da tabela, teste com a ferramenta Trinket,
alterando para a cor azul, e modifique os valores de altura e largura.
Reflita
Mesclando células
É possível mesclar células usando o atributo colspan, utilizado para mesclar colunas,
como na Figura 1.39. Podemos, ainda, mesclar linhas utilizando o atributo rowspan.
Observe a estrutura na Figura 1.40. Esses atributos podem ser utilizados tanto em
células do tipo <th> quanto do tipo <td>. Para isso, primeiro você deve determinar
quantas colunas serão mescladas (no exemplo a seguir, duas). A seguir, utilizar o
atributo colspan para indicar quais células serão unidas. Como mencionado, pode-se,
ainda, utilizar a propriedade rowspan para unir linhas.
HTML5 trouxe tags que permitem uma melhor maneira de organizar tabelas: <thead>,
<tbody> e <tfoot>. A tag <thead> é utilizada para inserir as células do cabeçalho. O
conteúdo da tabela deve ser inserido em <tbody>; já <tfoot> pode ser usado para
inserção de linhas conclusivas ou de notas de rodapé. Observe a tabela criada e ilustrada
na Figura 1.41.
Caro aluno, agora que você conhece as tags para criação de tabela, aprenderá a criar
outro elemento em HTML: os formulários. Você já deve ter se deparado com páginas de
serviços na internet em que é preciso preencher formulários de contato, de suporte, de
atendimento, orçamento, compras, cadastro, entre outros. Então, agora você conhecerá
algumas das tags utilizadas na construção de formulários.
Formulários
Formulários são tipos de elementos HTML usados para coletar os dados que o
desenvolvedor deseja processar e/ou salvar (TITTEL; NOBLE; COUTO, 2018). O uso
de formulários é a forma mais efetiva para se obter dados relevantes dos usuários do seu
website (GUPTA, 2013). A Figura 1.32 ilustra um exemplo de formulário de contato
com alguns campos para inclusão de dados pessoais e mensagem.
Formulários podem ser criados usando-se a tag <form>, que pode receber como
principais atributos action, method e name (MARIANO; DE MELO-MINARDI, 2017).
O atributo action informa ao navegador para qual endereço deve enviar as informações
presentes no formulário; o atributo method indica o método a ser utilizado para envio
(POST e GET são os mais comuns); por fim, o atributo name indica o nome utilizado
para o formulário.
Assimile
POST pode ser utilizado, por exemplo, para envio de arquivos ou em formulários com
dados sigilosos.
Por outro lado, os envios por meio do método GET transmitem os dados pela URL da
página. Por exemplo:
www.site.com.br/?id=1
Nesse exemplo, é feita uma requisição do tipo GET, em que a variável id é igual a 1.
Portanto, os dados enviados em GET são visualmente públicos (MARIANO; DE
MELO-MINARDI, 2017).
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulários</title>
</head>
<body>
<form
name="meu_primeiro_formulario"
method="POST"
action="gravaDados.php"
enctype="multipart/form-data"
>
</form>
</body>
</html>
Observe que o formulário é aberto por meio da tag <form> e fechado via tag
</form>.
Em name="meu_primeiro_formulario", define-se o nome do formulário. No
caso, ele foi nomeado como “meu_primeiro_formulario”. Observe que
evitamos o uso de espaços ou outros caracteres especiais. Isso se dá uma vez que
esse nome pode ser utilizado na etapa de processamento, já os caracteres
especiais podem ser codificados ou não, a depender do tipo de enctype utilizado
para envio.
Em method="POST" define-se o método de envio considerado, o qual foi o
POST.
Em action="gravaDados.php" define-se que o atributo action aponta para
“gravarDados.php”. Assim, para que esse formulário funcione corretamente,
deve existir um arquivo denominado “gravarDados.php”, que recebe os dados
enviados pelo método POST e processa-os usando a linguagem de programação
PHP (outras linguagens também podem ser utilizadas, entretanto, citaremos
apenas PHP aqui, pois será a linguagem abordada ao final dos nossos estudos).
Por fim, em enctype="multipart/form-data", define-se que o enctype utilizado é
o “multipart/form-data”. Declarar o enctype é necessário quando queremos
enviar arquivos anexados ao formulário.
A seguir, você conhecerá os elementos que podem ser incluídos em formulários HTML.
Elementos de formulários
Menu de seleção: elemento que fornece um menu suspenso que será exibido
quando o usuário clicar. É criado com a tag <select>. Cada item é adicionado
usando-se a tag <option>. Observe o exemplo com um menu de seleção com os
dias da semana.
<select name="dias_da_semana">
<option value="segunda">Segunda-Feira</option>
<option value="terca">Terça-Feira</option>
<option value="quarta">Quarta-Feira</option>
<option value="quinta">Quinta-Feira</option>
<option value="sexta">Sexta-Feira</option>
<option value="sabado">Sábado</option>
<option value="domingo">Domingo</option>
</select>
Fonte: elaborado pelo autor.
Botões: botões permitem diversos tipos de ação e podem ser integrados por
meio de scripts. São criados com a tag <button>.
<button>Clique aqui</button>
Exemplos: <label>Dias da semana:</label> e <label>Contato:</label>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulários</title>
</head>
<body>
<form
method="POST"
action="gravaDados.php"
enctype="multipart/form-data"
>
<label>Dias da semana:</label>
<select name="dias_da_semana">
<option value="segunda">Segunda-Feira</option>
<option value="terca">Terça-Feira</option>
<option value="quarta">Quarta-Feira</option>
<option value="quinta">Quinta-Feira</option>
<option value="sexta">Sexta-Feira</option>
<option value="sabado">Sábado</option>
<option value="domingo">Domingo</option>
</select>
<br>
<label>Contato:</label>
<br>
<label>Enviar:</label>
<button>Clique aqui</button>
</form>
</body>
</html>
Fonte: elaborado pelo autor. Figura 1.42 | Elementos de formulários: menu de seleção, área
de texto e botão (à esquerda). À direita é exibido o menu de seleção quando clicado
<input type="text">
A tag <input> pode ter diversos tipos (especificados no atributo type), como caixas de
texto, senhas, caixas de seleção múltiplas e únicas, entre outros.
A tag <input> recebe uma série de atributos que definirão o tipo dos dados que serão
submetidos como entrada. Observe o Quadro 1.4.
Tipo Descrição
button Botão.
Exemplificando
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulários</title>
</head>
<body>
<input type="button"><br><br>
<input type="checkbox"><br><br>
<input type="color"><br><br>
<input type="date"><br><br>
<label>Entrada do tipo: datetime</label><br>
<input type="datetime"><br><br>
<input type="datetime-local"><br><br>
</div>
<input type="email"><br><br>
<input type="file"><br><br>
<input type="hidden"><br><br>
<input type="image"><br><br>
<input type="month"><br><br>
<input type="number"><br><br>
</div>
<input type="password"><br><br>
<input type="radio"><br><br>
<input type="range"><br><br>
<input type="reset"><br><br>
</div>
<input type="submit"><br><br>
<input type="tel"><br><br>
<input type="text"><br><br>
<input type="time"><br><br>
<input type="url"><br><br>
<input type="week"><br><br>
</div>
</form>
</body>
</html>
Fonte: elaborado pelo autor.
As caixas de texto (type text) são os elementos de entrada mais comuns. Esse tipo de
input gera uma caixa de texto de linha única em que o usuário poderá digitar qualquer
tipo de informação. As caixas de texto de senhas (type password) são bastante similares
a elas. A principal diferença é que nos inputs do tipo password, o texto é criptografado
diretamente quando digitado. Observe o exemplo da Figura 1.44.
<label>Texto escondido</label><br>
<input type="password"<br><br>
Figura 1.44 | Inputs dos tipos text e password. Ao digitar no campo do tipo password, os
caracteres são exibidos como marcadores
Botões
Além do elemento <button>, HTML fornece duas outras formas de criação de botões. A
primeira delas é utilizando-se o input do tipo button. A outra forma de gerar um botão é
utilizando um input do tipo submit. Entretanto, o botão do tipo submit tem a função
específica de enviar o formulário para a página indicada no atributo action de form,
conforme a Figura 1.45.
<label>Similar a button</label>
<input type="button" value="Botão"<br>
<input type="submit" value="Enviar">
As caixas de seleção permitem que usuários escolham certas opções. Elas são divididas
em dois tipos: caixas de seleção únicas (radio), caracterizadas por seu formato circular,
e caixas de seleção múltiplas (checkbox), caracterizadas pelo seu formato quadrangular.
<label>Seleção múltipla</label>
<input type="checkbox" name="multiplo" value="1">
<input type="checkbox" name="multiplo" value="2">
<input type="checkbox" name="multiplo" value="3"><br>
<label>Seleção única</label>
<input type="radio" name="unico" value="2">
<input type="radio" name="unico" value="2">
<input type="radio" name="unico" value="2">
Fonte: elaborado pelo autor. Figura 1.46 | Caixas de seleção múltiplas (checkbox) e únicas
(radio)
Perceba que cada entrada apresenta um mesmo valor para o atributo name. Isso indica à
página de processamento que os campos de seleção representam uma mesma variável.
A diferença entre os campos será dada pelo valor existente no atributo value. Nos
códigos de seleção múltipla e única apresentados, observe que a variável multiplo
recebe os valores [1, 2, 3], enquanto a variável unico recebe o valor 2.
HTML5 apresentou novos tipos de entradas para formulários, como os inputs dos tipos
date e color. O tipo date fornece um campo que, quando clicado, exibe um calendário
que permite ao usuário selecionar uma data. A Figura 1.47 ilustra o resultado da
utilização do input do tipo date.
<input type="date">
Já as entradas do tipo color permitem que o usuário selecione uma cor. Esse elemento
retorna um código de cores RGB, como vemos na Figura 1.48.
<input type="color">
Bom trabalho!
Referências
TITTEL, E.; NOBLE, J.; COUTO, E. HTML, XHTML e CSS Para Leigos. Tradução
de Elda Couto. Rio de Janeiro: Alta Books, 2018.
W3C WORKING DRAFT. HTML: the markup language (an HTML language
reference). [s.d]. Disponível em: https://bit.ly/3tp54kx. Acesso em: 17 nov. 2020.
DESENVOLVIMENTOS DE
FORMULÁRIOS E TABELAS EM
HTML5
Diego César Batista Mariano
Sim! Utilize os conhecimentos adquiridos até aqui para solucionar esse desafio.
Fonte: Shutterstock.
Para construir uma página de contato usando apenas HTML, seu código-fonte deve ficar
da seguinte forma:
2. <html>
3. <head>
4. <head>
charset=
"utf-8"
>
5. <title>
Formulários
<title>
6. </head>
7.
8. <body>
Após a abertura do corpo da página, deve-se, então, criar o formulário. Veja que ele
aponta para a página contato.php (aprenderemos, em outra oportunidade, sobre php).
9. <form method="POST" action="contato.php">
10. <h1>Contato</h1>
11.
Aqui, temos o primeiro rótulo seguido do seu campo de entrada: um input do tipo
text (caixa de texto):
Essas quebras de linha foram introduzidas para separar os itens inseridos. (Quando
tratarmos sobre CSS, veremos formas melhores de inserir margens.)
15. <br><br>
16.
Aqui, é utilizada uma tabela para posicionar corretamente os itens (mais uma vez,
ressaltamos que adiante apresentaremos formas melhores de posicionar objetos com
CSS).
17. <table>
18. <tr>
19. <td>
20. <label>E-mail</label><br>
21. <input type="email" name="number" placeholder="Entre com o seu E-mail">
22. </td>
23.
24. <td>
25. <label>Telefone</label><br>
26. <input type="email" name="number" placeholder="Entre com o seu
telefone">
27. </td>
28. </tr>
29. </table>
30.
31. <br>
32.
33. <label>Assunto</label><br>
34. <input type="text" name="assunto" size="50" placeholder="Informe o assunto">
35.
36. <br><br>
37.
A seguir apresentamos uma textarea: um campo que permite a inserção de várias linhas
de texto.
38. <label>Mensagem</label><br>
39. <textarea name="mensagem" placeholder="Entre com a
mensagem" rows="5" cols="50"></textarea>
40.
41. <br><br>
42.
O último item do formulário é um input do tipo submit. Esse item é necessário para que
o formulário seja enviado para a página apontada no atributo action da tag <form>.
43. <input type="submit" name="submit" value="Enviar">
44.
45. </form>
46. </body>
47. </html>
48.
Observe que o código apresentado apresenta alguns novos atributos; são eles: size, cols
e rows.
Size altera o tamanho da entrada do tipo text. Observe que os campos e-mail e telefone
apresentam o tamanho padrão. Apenas os campos nome e assunto foram alterados para
ficarem com um tamanho maior.
É notável, ainda, que o formulário de contato construído apenas com HTML apresenta
diferenças visuais quando comparado ao formulário modelo (Figura 1.32), uma vez que
este aplicou folhas de estilo personalizadas (CSS), que veremos em outra oportunidade.
Não pode faltar
INTRODUÇÃO AO CASCADING
STYLE SHEETS (CSS)
Diego César Batista Mariano
Enquanto o HTML é utilizado para estruturar as páginas o CSS é utilizado para cuidar
da aparência da página, com a aplicação de estilos, como a formatação de textos, cores
dos elementos, imagens de fundo, entre outros.
Fonte: Shutterstock.
Convite ao estudo
Caro aluno, nesta unidade você se aprofundará nos estudos para se tornar um
desenvolvedor web. Com os conhecimentos apresentados nesta unidade, você aprenderá
a estilizar as páginas em html, tornando-as visualmente mais amigáveis. Agora, você vai
aperfeiçoar o layout de suas páginas. Aqui, veremos as folhas de estilo em cascata.
Na seção 1, veremos uma breve introdução à linguagem CSS (Cascading Style Sheets),
a inclusão do CSS em um website, as regras e os seletores CSS, além das propriedades
de texto, formatação, cores e propriedades background em CSS.
Na seção 2, abordaremos layouts em CSS; aprenderemos os conceitos do box model
HTML/CSS, como as propriedades de bordas, preenchimentos e margens; e veremos o
posicionamento de elementos em páginas HTML, além de propriedades como largura e
altura. Por fim, na seção 3, veremos a formatação em tabelas CSS e em formulários
HTML, animações e transição usando-se CSS, além de alguns frameworks CSS.
Vamos lá!
Olá!
Isso se deve ao fato de a linguagem HTML ter sido planejada para armazenar e
estruturar os conteúdos, enquanto a aparência da página é de responsabilidade das
folhas de estilo.
CSS é a sigla para cascating style sheet (folha de estilo em cascata). CSS é uma
linguagem propriamente desenvolvida para configuração de estilo e aparência. Ela é
fundamentada na definição de estilos aplicados a seletores (elementos HTML) por meio
das propriedades.
Aqui, veremos como construir códigos HTML usando-se as três formas e qual delas é
considerada mais apropriada.
Nesta seção, você vai conhecer os fundamentos da linguagem CSS, sua sintaxe e
principais características. Você verá, ainda, como formatar textos, alterar cores de
elementos e adicionar imagens como planos de fundo.
Você foi contratado por uma empresa de provedor de internet que solicitou que você
crie a página web do provedor. Assim, você deverá criar a estrutura das páginas e
aplicar o estilo (CSS). Dessa vez, você criará uma página de apresentação da empresa
(“QUEM SOMOS”), mas enquanto você trabalhava em uma página experimental para a
empresa de vendas de planos de internet, você construiu os códigos index.html e
estilo.css a seguir:
<!DOCTYPE html>
<html>
<head>
<title>Planos de internet</title>
<meta charset="utf-8">
<link href="estilo.css"rel="stylesheet">
</head>
<body>
<h1>Quem somos?</h1>
<span>tag span</span>
<p>
</p>
</body>
</html>
/* Arquivo estilo.css */
body{
font-family: "Roboto";
color:#333;
font-size:16px;
Foi sugerido por um dos membros da equipe, a inclusão de uma fonte externa, a fonte
“Roboto”: uma fonte gratuita disponível na plataforma de fontes do Google. Você
acessou o site, fez o download da fonte e a instalou em seu computador.
Roboto é uma fonte não serifada, o que difere da fonte apresentada. Observe a Figura
2.2 a seguir:
Explique o que pode ter ocorrido e como você pode resolver esse problema.
conceito-chave
A estrutura de uma página Web pode ser criada utilizando-se apenas a linguagem
HTML, possibilitando a construção de seus primeiros websites, todavia, é possível criar
páginas com o visual não tão amigável para o usuário. Na medida em que páginas da
internet se tornaram mais complexas, tornou-se necessário melhorar e estruturar o seu
desenvolvimento. Isso se deve ao fato de a linguagem HTML ter sido planejada para
armazenar e estruturar os conteúdos, porém o visual e a aparência da página devem ser
desenvolvidos por meio das folhas de estilo em cascata (ou CSS).
Atenção
HTML e CSS não são linguagens de programação. Enquanto HTML é uma linguagem
de marcação de hipertextos, CSS é uma linguagem de folhas de estilos.
Atributo style
Tag <Style>
As configurações de estilo são inseridas dentro da tag < style >< /style >. Nesse caso, é
necessário informar um seletor, que será abordado na próxima seleção.
<style>
p{
color: red;
}
</style>
<p>Olá mundo!</p>
<link href="estilo.css" rel="stylesheet">
Nesse exemplo, a tag <link> recebe dois atributos. O primeiro é o atributo href, que
informa a localização e o nome do arquivo que será ligado à página HTML. O arquivo
importado é denominado “estilo.css”, e para esse exemplo, deve estar no mesmo
diretório do arquivo HTML que o importou. O segundo é o atributo rel, que informa o
tipo do arquivo conectado, que, nesse caso, trata-se de uma folha de estilos (stylesheet).
Os dois primeiros métodos para inserção de estilos são realizados internamente, ou seja,
no código HTML. Portanto, o uso desses métodos não é considerado uma boa prática,
logo, a maneira mais adequada para aplicar estilos na sua página web é por meio da
inserção dos códigos relacionados à aparência em um arquivo externo, nomeado com a
extensão “.css”.
Assimile
!important
Por exemplo, imagine que você acaba de criar uma página e adicionou o seguinte
código:
<!DOCTYPE html>
<html>
<head>
<title>Minha página</title>
<meta charset="utf-8">
</head>
</hmtl>
Código 2.4 | Tag <style> com cor de fundo preto e cor da fonte vermelha incorporada
ao arquivo index.html
<!DOCTYPE html>
<html>
<head>
<title>Minha página</title>
<meta charset="utf-8">
<style>
body{
background-color: black;
color:red;
}
</style>
</head>
<body>
<p>Olá mundo!</p>
</body>
</html>
Dessa vez, os estilos foram aplicados usando-se a tag <style>. Veja que foi aplicada ao
seletor body a propriedade background-color (cor de fundo) de valor black (preto).
Além disso, foi aplicada ao body a propriedade color (cor de texto) de valor red
(vermelho). Mesmo assim, o conteúdo da tag <p> recebeu a cor vermelha.
Isso ocorre porque: (1) declarações da tag <style> têm prioridade sobre a folha de estilo
padrão do navegador (que iria inserir fundo branco e cor de texto preta) e (2) a tag
<p> está inserida dentro das tags <body></body>; portanto, na ausência de uma
declaração para o seletor p, os estilos da tag de nível superior são aplicados à tag em
questão.
Agora, veja o que ocorre se você adicionar um atributo style que muda a cor da tag <p>
para azul (Figura 2.8):
Código 2.5 | Tag <style> com atributo style que altera a cor da tag <p> para azul
<!DOCTYPE html>
<html>
<head>
<title>Minha página</title>
<meta charset="utf-8">
<style>
body{
background-color: black;
color:red;
}
</style>
</head>
<body>
<p>style="color:blue">Olá mundo!</p>
</body>
</html>
Aqui, observamos que o atributo style tem prioridade sobre a tag </style>. A não ser que
haja a declaração !important, que tem prioridades sobre todas as outras, desde que ela
seja aplicada diretamente sobre o seletor desejado. Observe a Figura 2.9:
<!DOCTYPE html>
<html>
<head>
<title>Minha página</title>
<meta charset="utf-8">
<style>
body{
background-color: black;
color:red;
}
p{
color:green !important;
}
</style>
</head>
<body>
<p>style="color:blue">Olá mundo!</p>
</body>
</html>
Nesse caso, temos três declarações para a propriedade color: verde, vermelho e azul.
Assim, podemos observar claramente a importância do efeito cascata, que age como
camadas sobrepondo estilos declarados em folhas de estilo de menor importância. A
Figura 2.10 ilustra como o navegador reconhece os estilos aplicados e seleciona apenas
um deles.
Note que a cor azul (blue) foi reconhecida, mas o navegador optou pela propriedade
green (verde) que é declarada com !important
<p>class="vermelho">Olá mundo!</p>
<p>id="apresentacao">Seja bem-vindo(a)</p>
Aqui, temos duas tags <p>, sendo que a primeira recebe a class “vermelho” e a segunda
recebe o id “apresentação”.
Seletores
Seletores representam elementos de uma página HTML cujas propriedades CSS serão
aplicadas (SILVA, 2018). Como apresentado na seção anterior, tags são simples
exemplos de seletores, mas além delas, existem muitos outros, como as classes, os
identificadores, os seletores universais e os seletores múltiplos (quando múltiplos
elementos são listados). Observe o Quadro 2.1 a seguir:
Seletor Exemplo
Descrição
Seleciona todos os elementos com as classes de valor
.class .introducao
“introdução”, ou seja, class="introducao"
Agora, vamos separar os códigos em dois arquivos diferentes, sendo um arquivo .html
(Código 2.7) e o outro .css (Código 2.8).
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Minha página</title>
5. <meta charset="utf-8">
6. <link href="estilo.css"rel="stylesheet">
7. </head>
8. <body>
9. <p>tag p</p>
10.<span>tag span</span>
11. <div>tag div</div>
12.<p class="texto-verde">
14.</p>
15.<p class="texto-vermelho">
17.</p>
18.<p id="azul">
20.</p>
21.<p class="texto-verde">
23. </p>
24. </body>
25. </html>
/* Arquivo estilo.css */
/* Parágrafos devem estar em cinza */
p{
color: gray;
/* span em roxo */
span{
color: purple;
div{
color: orange;
/* classes */
.texto-verde{
color: green;
.texto-vermelho{
color: red;
/* IDs */
#azul{
color: blue;
Pode-se observar que classes e IDs só aplicam formatações aos elementos em que foram
declarados. Enquanto classes podem ser utilizadas múltiplas vezes, um ID só pode ser
usado em um único elemento. Para diferenciar classes e IDs, CSS requer que os
seletores sejam declarados usando-se os símbolos “.” e “#”, respectivamente. Logo, a
declaração “.texto-verde” representa uma classe, enquanto a declaração “#azul”
representa um ID.
Assimile
Comentários CSS
Comentários são trechos de códigos que são ignorados durante a interpretação dos
comandos. Na prática, eles são utilizados para documentação, i.e., para inserir
explicações sobre o funcionamento dos códigos. Em CSS, comentários devem ser
inseridos entre os símbolos /* e */. Por exemplo:
/* Isto é um comentário CSS */
p{ color: red; }
p, div, span{
color: gray;
A Figura 2.12 mostra o resultado da página. Observe que você deve apagar as
declarações individuais para os seletores div e span ou, então, as regras definidas
posteriormente substituirão essa nova regra. Isso se deve ao efeito em cascata, que será
explicado no decorrer desta seção.
/* Seletor universal */
*{
margin:0;
Agora, observe que todas as tags possuem a mesma margem. Além disso, a margem
para a borda da página foi removida. O seletor universal permite que você reinicie as
configurações de estilo de uma página e construa seus estilos sem influência de estilos
herdados de outras folhas de estilo, que será abordada na sequência da seção. No
próximo tópico, apresentaremos algumas propriedades CSS.
Propriedades de textos
Agora, falaremos das outras propriedades CSS referentes a fontes. As fontes dizem
respeito à forma como são “desenhados” os caracteres usados em textos. O Quadro 2.2
sintetiza algumas propriedades CSS que podem ser aplicadas às fontes.
• xx-small
• x-small
• small
• medium
• large
• x-large
font-size Tamanho da fonte.
• xx-large
• smaller
• larger
length: medida CSS de comprimento
• normal
• bold
• bolder
• lighter
• 100
• 200
font-weight “Peso da fonte” (variações de negrito). • 300
• 400
• 500
• 600
• 700
• 800
• 900
• extra-condensed
• condensed
• semi-condensed
• semi-expanded
• expanded
• extra-expanded
• ultra-expanded
As fontes que não possuem serifas são consideradas mais esteticamente agradáveis.
Entretanto, as serifas facilitam a percepção da palavra pelo olhar humano. Elas são
muito utilizadas em blocos de texto pequenos, como em jornais.
Outra propriedade digna de nota é a font-size, que altera o tamanho do texto. Em geral,
os valores de font-size são inseridos em pixels (ex.: 12px), mas existem outras unidades
de medida que podem ser utilizadas, como “em”, “rem”, valores percentuais, entre
outros.
Exemplificando
1.<!DOCTYPE html>
2.<html>
3.<head>
4. <title>Fontes</title>
5. <meta charset="utf-8">
6. <link href="estilo.css"rel="stylesheet">
7.</head>
8.<body>
9.
11.
12. <p class="pesada">
13. Testando o valor bolder da propriedade font-weight.
14. </p>
15.
16. <p class="leve">
18. </p>
19.
20.<p class="italico">Font-style: Itálico.</p>
21.
22.<p class="oblique">Font-style: Olique.</p>
23.
25.
26.<p class="condensado">Ultra-condensado.</p>
27.
28.</body>
29.</html>
/* Arquivo estilo.css */
p{
.pesada{
font-weight: bolder;
}
.leve{
font-weight: lighter;
.italico{
font-style: italic;
.oblique{
font-style: oblique;
.variante{
font-variant: small-caps;
.condensado{
font-stretch: ultra-condensed;
Formatação de alinhamento
.direita{
text-align: right;
.justificado{
text-align: justify;
}
.esquerda{
text-align: left;
.centro{
text-align: center;
<!DOCTYPE html>
<html>
<head>
<title>Texto</title>
<meta charset="utf-8">
<link href="estilo.css"rel="stylesheet">
</head>
<body>
<p class="esquerda">Alinhado à esquerda.</p>
<p class="centro">Alinhado ao centro.</p>
<p class="direita">Alinhado à direita.</p>
<p class="justificado">
</p>
</body>
</html>
Cores
Anteriormente, apresentamos a propriedade color, que altera a cor da fonte, e vimos que
ela pode receber os nomes das cores em inglês: red (vermelho), green (verde), blue
(azul) etc. Entretanto, existem métodos melhores para definição de cores, usando-se, por
exemplo, diferentes sistemas de cores. Podemos alterar cores utilizando as seguintes
propriedades (MAUJOR, 2016):
Dica
Acesse o site Adobe Color e use a paleta de cores para selecionar uma cor. A Figura
2.17 mostra o código hexadecimal da cor e de outras cores que harmonizam com a cor
selecionada.
Você não precisa memorizar os códigos hexadecimais. Sempre que precisar escolher
uma cor, você pode consultar na web ferramentas que ajudem a selecionar cores HTML
para o padrão hexadecimal de cores.
A seguir, veja um exemplo de uso das propriedades que alteram a cor do fundo de uma
página; uma propriedade bastante utilizada é a background-color. Observe os códigos
index.html (Código 2.13) e o estilo.css (Código 2.14) a seguir:
1. <!DOCTYPE html>
2. <html>
3. <head>
5. <meta charset="utf-8">
6. <link href="estilo.css"rel="stylesheet">
7. </head>
8. <body>
9. <p>
10. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sapien sapien,
finibus ac sollicitudin et, gravida nec lacus. Fusce ullamcorper fermentum ante, non
pellentesque ipsum volutpat at.
11. </p>
12. </body>
13. </html>
/* Arquivo estilo.css */
body{
/* Cor de texto */
color:#ffffff; /* branco */
/* Cor de fundo */
background-color:#000000; /* preto */
Ao se alterar a cor de fundo, a cor das fontes deve contrastar com ela. Logo, se alterou a
cor do fundo para preto, a cor da fonte deve ser oposta. Entretanto, não é recomendado
usar cores escuras como cor de fundo.
CSS possibilita, ainda, usar uma imagem como plano de fundo. Para isso, você pode
utilizar a propriedade background-image. Nesse caso, o nome da imagem deve ser
passado entre o valor url(“NOME-DA-IMAGEM.extensão”).
Exemplificando
1. <!DOCTYPE html>
2. <html>
3. <head>
5. <meta charset="utf-8">
6. <link href="estilo.css"rel="stylesheet">
7. </head>
8. <body>
9. <p>
10. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sapien sapien,
finibus ac sollicitudin et, gravida nec lacus. Fusce ullamcorper fermentum ante, non
pellentesque ipsum volutpat at.
11. </p>
12. </body>
13. </html>
/* Arquivo estilo.css */
body{
/* Imagem de fundo */
background-image: url('imagem_fundo.jpg');
background-size: 100%;
Observe que, nesse caso, uma propriedade adicional foi inserida: background-size, que
determina o tamanho da imagem de fundo (nesse caso, 100%). Atente-se, ainda, à
extensão da imagem “.jpg”. Muitos erros cometidos ao inserir imagens de fundo
ocorrem devido à inserção incorreta da extensão da imagem. Note, também, que a
imagem deve estar localizada no mesmo diretório do arquivo “index.html”. Caso não
esteja, a imagem não será reconhecida.
No Quadro 2.3, ilustramos uma série de propriedades utilizadas para configurar o plano
de fundo (background):
Propriedade Descrição
Reflita
Saiba mais
Por ter sido um pioneiro na divulgação da linguagem CSS no Brasil, seus tutoriais
estavam sempre indexados em ferramentas de busca (i.e., Google). Mas o que fez dele a
grande referência brasileira quanto a folhas de estilo foi o efeito CSS, que exibia um
dinossauro ao passar o mouse sobre os links (efeito que foi, infelizmente, removido das
versões mais recentes do seu site). Ele se autointitula: “o dinossauro das CSS”. Com
bom humor e uma linguagem simples, o site do Maujor, até hoje, é considerado uma
referência na área, contendo uma série de especificações de propriedades CSS. Por
exemplo, veja o tutorial de CSS moderno “explicado para dinossauros”:
Pesquise mais
Recomendações de artigos:
MDN WEB DOCS. Referência de CSS. 2020.
MARIANO, D. Folhas de estilo em cascata (CSS). Diegomariano. 15 ago.
2020a.
MARIANO, D. Iniciando a construção de um Website. Diegomariano. 15 ago.
2020b.
Dicas de videoaulas:
Fundamentos das CSS. [S.l.: s.n.], 2017. 1 vídeo (12:24 min.) Publicado pelo
canal Diego Mariano.
Disponível em: https://bit.ly/2NYGw1Y. Acesso em: 23 fev. 2021.
MARIANO, D. CSS3. [S.l.: s.n.], 2017. 1 vídeo (8:02 min.) Publicado pelo
canal Diego Mariano.
Nesta seção, você aprendeu os fundamentos da linguagem CSS; nas próximas seções,
você aprenderá as propriedades referentes aos espaçamentos de elementos HTML.
Até lá!
Referências
MARIANO, D. CSS3. [S.l.: s.n.], 2017. 1 vídeo (8:02 min.) Publicado pelo canal Diego
Mariano. Disponível em: https://bit.ly/2MOrCuo. Acesso em: 23 fev. 2021.
Fundamentos das CSS. [S.l.: s.n.], 2017. 1 vídeo (12:24 min.) Pulbicado pelo canal
Diego Mariano.
Disponível em: https://bit.ly/3c6pbff. Acesso em: 23 fev. 2021.
MDN WEB DOCS. CSS básico. 2020. Disponível em: https://mzl.la/38a6juQ. Acesso
em: 23 fev. 2021.
INTRODUÇÃO AO CASCADING
STYLE SHEETS (CSS)
Diego César Batista Mariano
Como garantir que fontes externas de uma página sejam exibidas corretamente
em todos os computadores?
A incorporação de fontes externas possibilita que sua página seja corretamente exibida
em computadores que não possuam as fontes desejadas instaladas. O @font-face
permite que uma fonte externa possa ser incorporada a uma página HTML.
Fonte: Shutterstock.
O que aconteceu é que a fonte utilizada não estava instalada no computador em que o
site foi visualizado. Para solucionar esse problema, pode-se utilizar a diretiva @font-
face.
Essa diretiva do CSS permite que você insira uma fonte diretamente no código fonte de
um site.
Passo 1 - baixando a fonte: acesse o site Google Fonts e faça o download do
arquivo “Roboto.zip”.
Passo 2 - abra o arquivo com algum programa de extração de arquivos
compactados (recomendamos o WinRar).
@font-face {
font-family:"Roboto";
src: url("Roboto-Regular.ttf");
O @font-face permite que uma fonte externa possa ser incorporada a uma página
HTML. A incorporação de fontes externas possibilita que sua página seja corretamente
exibida em computadores que não possuam as fontes desejadas instaladas (Figura 2.21).
LAYOUT EM CSS
Diego César Batista Mariano
Fonte: Shutterstock.
Caro aluno, conhecer as estruturas de uma página web não é o suficiente para construir
uma página WEB amigável. Você deve ter percebido que a maior parte dos websites
comerciais possui estilos bem elaborados, que, com apenas HTML, possivelmente, não
produziria o mesmo resultado. No HTML, tags estruturais são utilizadas para
determinar a semântica dos tipos de conteúdo inseridos. Nesse quesito, CSS pode ser
essencial para construir páginas mais atrativas. Você pode posicionar corretamente
elementos em determinadas posições.
Além disso, para desenvolver uma página WEB, é importante conhecer algumas
propriedades, como altura e largura, e o posicionamento dos elementos em CSS. As
propriedades de posicionamento permitem definir onde um elemento deverá aparecer
em uma página WEB, se sua posição será fixa ou baseada em outros elementos da
página.
Por fim, veremos alguns estilos que serão aplicados em vídeos exibidos na página. Você
também será introduzido a um conceito fundamental para a construção de páginas
responsivas: os containers.
Você havia sido requisitado a construir uma página de contato para a empresa de
provedor de internet, agora, você deve recriar a página de contato. Entretanto, deve
construir uma página completa com cabeçalho, menu de navegação, área de conteúdo
delimitada por um container e rodapé.
Página inicial.
Página “quem somos”.
Página “produtos”.
Página “contato”.
Importante
Você pode utilizar os códigos construídos anteriormente como base para iniciar
o desenvolvimento da sua página.
Utilize tags estruturais para cada parte do site. Ex.: header, nav, main, article,
div.
Chame o logo do site de “logo.png”. Segue abaixo um exemplo:
NÃO utilize tabelas para colocar inputs em colunas! Utilize a propriedade float.
O botão de enviar deve ter cor de fundo verde e borda verde escura.
Bons estudos!
conceito-chave
Todas as tags HTML, desde divs a até mesmo blocos de parágrafos, podem ser
interpretadas como caixas. A caixa delimitará os espaços que os elementos HTML
poderão ocupar e o posicionamento de cada item de um site. Assim, esses elementos
podem ser formatados usando-se o chamado modelo de caixa, do inglês box model
(W3SCHOOLS, 2020).
A Figura 2.23 ilustra um exemplo de como o box model funciona na prática. Na divisão
da figura, temos (A), (B) e (C). A Figura 2.23 (A) ilustra a visualização da caixa que
envolve o menu de um site. Ao passar o cursor sobre partes de código visualizadas pela
ferramenta inspecionar elemento, o navegador destaca a caixa que compõe os
elementos. (B-C). Observe que mesmo os elementos de caixas possuem suas próprias
caixas quando analisados individualmente.
Figura 2.23 | Visualizando as caixas usando a ferramenta inspecionar elemento
(A)
(B)
(C)
Fonte: captura de tela da Biblioteca Virtual elaborada pelo autor.
A Figura 2.24 ilustra a estrutura do modelo de caixa CSS com suas propriedades. A
seguir, será descrita cada uma dessas propriedades.
Para que possamos compreender corretamente o modelo de caixa CSS, vamos começar
introduzindo o conceito de bordas. Isso será necessário, uma vez que as margens
internas e externas serão aplicadas entre as bordas, que podem ser inseridas com a
propriedade border, que deve receber:
A espessura da borda.
Um tipo: solid (sólido), doted (pontilhado), dashed (tracejado), double (borda
dupla), groove (borda 3D), none (nenhuma borda), entre outros.
Uma cor (pode ser apresentada no padrão hexadecimal, como #000000).
A seguir, vamos mostrar uma aplicação de bordas em uma página index.html. Para isso,
criamos o arquivo estilo.css mostrado a seguir:
/* Arquivo estilo.css */
div {
border:1px dashed #000;
<!DOCTYPE html>
<html>
<head>
<title>Bordas</title>
<meta charset="utf-8">
<link href="estilo.css" rel="stylesheet">
</head>
<body>
<div>
</div>
</body>
</html>
A Figura 2.25 ilustra o resultado da página index.html e estilo.css. Observe que a borda
foi aplicada diretamente a uma div. Bordas podem ser aplicadas a quaisquer elementos.
Agora é com você! Teste o código index.html com o estilo.css, altere a espessura e a cor
da borda e observe o resultado mostrado na ferramenta Trinket:
Podemos, também, aplicar uma segunda propriedade border à tag <p>. Observe o trecho
de código do arquivo estilo.css a seguir:
/* Arquivo estilo.css */
div {
border:1px dashed #000;
#p {
border:10px solid #999;
Observe que uma segunda borda de cor cinza (#999), sólida (solid) e com 10px de
espessura foi inserida entre o texto e a borda da div. Podemos alterar o tamanho das
margens usando as propriedades margin e padding, conforme o Quadro 2.4 a seguir:
/* Margens
superior, lados e
inferior */
margin: 5px 0
10px;
/* Margens
topo/rodapé e
lados */
margin: 10px 0;
/* Todas iguais */
Propriedade Função Exemplo
margin: 10px;
/* Margem
superior */
margin-top Margem superior.
margin-top: 10px;
/* Margem
inferior */
margin-
Margem inferior.
bottom
margin-bottom:
10px;
/* Margem
margin-left Margem esquerda. esquerda */
margin-left: 10px;
/* Margem direita
*/
margin-right Margem direita.
margin-right:
10px;
/* Margens
Margem interna. Mesmas regras aplicadas à margin são internas */
padding
válidas.
padding: 10px;
/*Padding
superior*/
padding-top Margem interna superior.
padding-top:
10px;
/* Padding
inferior*/
padding-
Margem interna inferior.
bottom
padding-bottom:
10px;
/* Padding
esquerdo*/
padding-left Margem interna esquerda.
padding-left:
10px;
padding-right:
10px;
A seguir, observe como alterar as margens internas da tag <p> usando a propriedade
padding:
p{
border:10px solid #999;
padding:30px;
p{
border:10px solid #999;
padding:30px;
}
Antes
p{
border:10px solid #999;
margin:30px;
Depois
Ao passar um único valor para a propriedade padding ou margin, esse valor é aplicado
para todas as bordas. Você pode especificar os valores desejados das bordas superior,
direita, inferior e esquerda, como vemos na Figura 2.29.
Nesse exemplo, você aplicou uma margem superior de 10px, direita de 20px, inferior de
5px e nenhuma margem à esquerda.
Assimile
p{
border-left:10px solid #ffeb3b;
background-color:#ffffcc;
padding:30px 10px;
Note que foi aplicada uma margem interna de 30px (superior e inferior) e 10px (direita
e esquerda).
BOX MODEL
Para os casos apresentados até o momento, todas as margens ocupam todo o espaço
horizontal disponível, mas a altura depende do conteúdo do bloco. Podemos, então,
determinar a altura e a largura utilizando as propriedades altura (height) e largura
(width). Observe o Quadro 2.5, temos algumas dessas propriedades com as funções e
exemplos de cada uma delas.
/* Altura */
height Define a altura de elemento.
height: 200px;
/* Altura
máxima */
Define a altura máxima. Usado em sites com design responsivo,
max-height
caso a janela seja reajustada.
max-height:
300px;
/* Altura mínima
*/
Define a altura mínima. Usado em sites com design responsivo,
min-height
caso a janela seja reajustada.
min-height:
100px;
width: 800px;
/* Largura
máxima */
Define a largura máxima. Usado em sites com design
max-width
responsivo, caso a janela seja reajustada.
max-width:
1000px;
/* Largura
Define a largura mínima. Usado em sites com design mínima */
min-width
responsivo, caso a janela seja reajustada.
width: 800px;
Por padrão, HTML insere novos elementos abaixo de outros elementos já declarados.
Podemos resolver isso por meio da propriedade float.
/* Arquivo estilo.css */
div {
height:100px;
width:100px;
#alfa{
background-color: #ED3107;
float:left;
#beta{
background-color: #1786EB;
float:left;
#gama{
background-color: #07EB98;
float:left;
#delta{
background-color: #EB950C;
float:left;
Observe a Figura 2.31 o resultado da aplicação de float:left; com as divs lado a lado.
A propriedade float left permite que o próximo elemento HTML seja inserido ao lado
do elemento atual. Nesse caso, isso indica que o elemento que recebe essa propriedade
deve ficar à esquerda do próximo elemento. Se no lugar de left utilizássemos a opção
right, o elemento atual seria posicionado à direita. Observe o Código 2.20 a seguir:
/* Arquivo estilo.css */
div {
height:100px;
width:100px;
#alfa{
background-color: #ED3107;
float:right;
#beta{
background-color: #1786EB;
float:right;
}
#gama{
background-color: #07EB98;
float:right;
#delta{
background-color: #EB950C;
float:right;
Observe que o primeiro bloco (vermelho) foi posicionado no lado direito da tela,
passando a ser o último. A propriedade float: right indica que o bloco deve “flutuar à
direita”, ou seja, ele deve estar à direita de todos os elementos a seguir.
Agora, suponha que desejemos que os dois últimos quadrados sejam colocados na linha
debaixo; se apenas removermos a propriedade float: left, nosso código apresentará
problemas. Observe o que ocorre ao removermos a propriedade do bloco delta,
conforme a Figura 2.33.
Div: 1ª linha
Div: Alfa
Div: Beta
Div: 2ª linha
Div: Gama
Div: Delta
Como as linhas possuem características idênticas, podemos criar uma classe para
representá-las. Aplicaremos a elas a propriedade clear:both; que fará com que sejam
posicionadas uma abaixo da outra. Observe os códigos index.html (Código 2.21) e
estilo.css (Código 2.22).
<!DOCTYPE html>
<html>
<head>
<title>Posicionamento</title>
<meta charset="utf-8">
<link href="estilo.css" rel="stylesheet">
</head>
<body>
<div class="linha">
<div id="alfa"></div>
<div id="beta"></div>
</div>
<div class="linha">
<div id="gama"></div>
<div id="delta"></div>
</div>
</body>
</html>
/* Arquivo estilo.css */
div {
height:100px;
width:100px;
#alfa{
background-color: #ED3107;
float:left;
#beta{
background-color: #1786EB;
float:left;
#gama{
background-color: #07EB98;
float:left;
#delta{
background-color: #EB950C;
float:left;
.linha{
width: 200px;
clear:both;
Exemplificando
Observe, a seguir, um uso da propriedade clear both para um site de notícias. Sites de
notícias requerem que imagens sejam exibidas ao redor de textos, entretanto, nem todas
as imagens devem ser exibidas com essas configurações, sendo necessário, algumas
vezes, que haja uma separação clara entre imagem e texto.
Float left usado para posicionar texto ao redor de uma imagem (esquerda). Ao lado,
vemos a propriedade clear both aplicada.
Agora, suponhamos que queremos adicionar uma margem de 20px separando os blocos.
Podemos, simplesmente, adicionar o seguinte código no arquivo “estilo.css”:
div {
height:100px;
width:100px;
margin:10px;
Nesse caso, usamos 10px, porque cada bloco aplicará uma distância de 10px em relação
ao outro (como cada linha tem dois blocos, logo, a margem será de 20px). Entretanto,
ao carregar a página, ela aparecerá conforme mostrado na Figura 2.37.
O problema ocorre, pois foi delimitado o tamanho máximo de largura e altura. Se cada
bloco tem largura e altura de 100px e uma margem de 10px para cada borda, logo ele,
ocupará 120px de largura e de altura (100+10+10). Como temos dois blocos por linha
(ou seja, 240px) e delimitamos o tamanho da linha para 200px, a interface entrará em
colapso e se desestruturará ao atingir o limite da linha. Note que, mesmo adicionando a
propriedade de flutuação à esquerda, ao atingir o limite máximo de largura definido, o
bloco será empurrado para a linha abaixo.
Position
Observe que apenas a div da cor alaranjada é exibida. Isso acontece porque ela é a
última a ser declarada, logo, ela sobrepõe a todas as outras. Podemos visualizar que as
outras divs ainda estão presentes, adicionando propriedades de distância para as
margens da página:
/* Arquivo estilo.css */
*{margin:0px; padding:0px;}
div{height:100px; padding:100px;}
#alfa{
background-color: #ED3107;
position:absolute;
}
/* Distância de 30px para o topo e de 30px para o lado esquerdo */
#beta{
background-color: #1786EB;
position:absolute;
top: 30px;
left: 30px;
#gama{
background-color: #07EB98;
position:absolute;
top: 60px;
left: 60px;
#delta{
background-color: #EB950C;
position:absolute;
top: 90px;
left: 90px;
Figura 2.40 | O bloco vermelho (alfa) tem a prioridade mais alta (z-index: 4), o bloco beta (azul)
tem prioridade 2, enquanto o gama (verde) tem prioridade 3. Logo, o verde deve estar acima
do azul e abaixo do vermelho. Delta tem a mais baixa prioridade (1)
Assimile
A prioridade de exibição de conteúdo em uma página é vital para que o layout seja
exibido corretamente. Teste a propriedade z-index para reposicionamento da ordem de
exibição de blocos aqui:
Position fixed
Agora, vamos falar sobre a propriedade position fixed. Fixed determina que um item
esteja sempre em uma mesma posição, independentemente da quantidade de itens em
uma página. No exemplo a seguir, vamos adicionar textos na página e fixar cada
imagem em um canto. Teste o código utilizando o Trinket:
<!DOCTYPE html>
<html>
<head>
<title>Posicionamento</title>
<meta charset="utf-8">
<link href="estilo.css" rel="stylesheet">
</head>
<body>
<!-- Note que o posicionamento das divs é independente da ordem em que são descritas
a posição real só será definida no CSS, com as propriedades top, bottom, left e right -->
<div id="alfa"></div>
<div id="beta"></div>
<div id="gama"></div>
<div id="delta"></div>
<span id="conteudo">
[...]
</span>
</body>
</html>
/* Arquivo estilo.css */
div{
height: 100px;
width: 100px;
span{
color: #777;
font-size: 20px;
line-height: 25px;
#alfa{
background-color: #ED3107;
position:fixed;
top: 0px;
left: 0px;
background-color: #1786EB;
position:fixed;
right: 0px;
bottom: 0px;
#gama{
background-color: #07EB98;
position:fixed;
right: 0px;
top: 0px;
#delta{
background-color: #EB950C;
position:fixed;
left: 0px;
bottom: 0px;
À medida que o usuário rolar pela página gerada anteriormente, os quatro blocos
coloridos continuarão fixos nos locais delimitados (Figura 2.41):
Existe propriedades para a manipulação de áudios e vídeos usando CSS. Para ilustrar
este exemplo, utilizaremos o vídeo disponível gratuitamente na plataforma Pexels. Para
facilitar a análise, vamos renomear o vídeo para “video.mp4”.
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Vídeos</title>
5. <meta charset="utf-8">
6. <link href="estilo.css" rel="stylesheet">
7. </head>
8. <body>
9. <video controls>
10. <source src="video.mp4" type="video/mp4">
11. </video>
12. </body>
12. </html>
<video controls>
<source src="video.mp4" type="video/mp4">
</video>
Observe que a tag vídeo recebe o atributo “controls”. Esse atributo será responsável por
inserir os botões de início e pause do vídeo, além do volume, maximização e botões de
configurações. Neste exemplo, usamos a tag <source> para indicar o nome e o tipo do
vídeo. Agora, vamos aplicar algumas propriedades de estilo a essa página (Código
2.27).
/* Arquivo estilo.css */
1. video{
2.
3. /* borda*/
5.
8.
9. }
Até o momento, foi mostrado como inserir bordas, agora, vamos à propriedade CSS
para inclusão de sombras. A propriedade CSS responsável por isso é a box-shadow, que
recebe quatro valores: distância de x | distância de -y | desfoque | cor.
Neste exemplo, foi inserido uma sombra na cor preta com distância para os eixos x e y
de 3px e um desfoque de 10px.
Pode-se ainda aplicar as propriedades de tamanho (width), como pode ser visto no
Código 2.28:
video{
/* borda*/
width: 100%;
}
Esse código utiliza a propriedade width para que o vídeo ocupe todo o espaçamento da
página. Note que, por ser um vídeo vertical, a altura do vídeo ultrapassa o tamanho
natural da página HTML (Figura 2.44):
Containers
O conceito de container pode ser aplicado a qualquer elemento HTML. Aqui, vamos
introduzi-lo para delimitar margens de exibição do vídeo.
Primeiro, vamos criar uma div container para delimitar todo o conteúdo exibido
(Código 2.29):
<div class="container">
<video controls>
<source src="video.mp4" type="video/mp4">
</video>
</div>
O vídeo deve estar entre as tags de abertura e fechamento da div container. Os estilos
serão aplicados como uma classe. Agora, vamos configurar o arquivo estilo.css:
video{
/* borda*/
width: 100%;
.container{
width: 960px;
margin: 20px auto;
Observe que ao delimitar a largura do nosso container em 960px com margem de 20px
(para o topo e o rodapé) e o valor auto (para a esquerda e direita), o valor auto
configura os mesmos valores tanto para direita quanto para a esquerda. Por exemplo:
imagine que o monitor tem uma resolução de 1280px de largura por 768px de altura;
como seu container tem tamanho de 960px, sobram 320px que não serão utilizados. A
propriedade auto distribui 160px para cada lado, assim, o container fica centralizado na
página (Figura 2.46). Observe como o vídeo será exibido:
Um ponto importante a ser ressaltado é que a exibição do vídeo dessa forma se deve à
combinação de dois fatores:
Perceba que a tag vídeo está dentro do container, logo, o vídeo terá largura de 100%
sobre o tamanho de sua div pai, ou seja, 960px.
Reflita
Saiba mais
A inserção direta de vídeos em um website pelo HTML não é bastante utilizada por
desenvolvedores web, e isso se deve ao fato de o carregamento de vídeos consumir
recursos computacionais do servidor, uma vez que vídeos demandam espaço de
armazenamento e banda para a transmissão dos dados. Muitas vezes, desenvolvedores
optam por inserir os vídeos em plataformas especializadas, como YouTube, Vimeo ou
Twitch, e, por fim, embutir o vídeo na página por meio de tags de frames.
Pesquise mais
Para saber um pouco mais sobre propriedades CSS, recomendamos o seguinte artigo:
Além disso, você pode estudar um pouco mais assistindo às seguintes videoaulas:
Caro aluno, nesta seção você aprendeu a posicionar elementos em páginas. Esse
conceito é fundamental para a elaboração de páginas web mais completas. Agora, você
já está pronto para construir websites mais profissionais. Portanto, na próxima seção,
apresentaremos algumas propriedades interessantes para formatação de tabelas e
formulários, além de conceitos de frameworks CSS.
Até mais!
Referências
CHIEF OF DESIGN. Curso de HTML e CSS - Float Left, Right [Aula 25]. [S.l.: s.n.],
2019. 1 vídeo (5:20 min.) Publicado pelo canal Chief of Design. Disponível em:
https://bit.ly/3edv64Q. Acesso em: 24 fev. 2021.
CHIEF OF DESIGN. Curso de HTML e CSS - Z-index [Aula 24]. [S.l.: s.n.], 2019. 1
vídeo (6:09 min.) Publicado pelo canal Chief of Design. Disponível em:
https://bit.ly/30g9MDL. Acesso em: 24 fev. 2021.
MDN WEB DOCS. Float. 2019. Disponível em: https://mzl.la/3sVaF0C. Acesso em:
24 fev. 2021.
LAYOUT EM CSS
Diego César Batista Mariano
O que é um Container?
Fonte: Shutterstock.
<!DOCTYPE html>
<html>
<head>
<title>Planos de internet</title>
<meta charset="utf-8">
</head>
<body>
<header>
<div class="container">
<div id="logo">
<a href="#">
</a>
</div>
<nav>
<a href="#">Produtos</a>
<a href="#">Contato</a>
</nav>
</div>
</header>
<main>
<div id="cabecalho-interno">
<div class="container">
<h1>Contato</h1>
</div>
</div>
<article class="container">
<div class="linha">
<label>Nome completo</label><br>
</div>
<div class="linha">
<div class="coluna">
<label>E-mail</label>
</div>
<div class="coluna">
<label>Telefone</label>
</div>
<div style="clear:both"></div> <!-- Esta div foi necessária para impedir o colapso da
div abaixo -->
<div class="linha">
<label>Assunto</label>
</div>
<div class="linha">
<label>Mensagem</label>
</div>
<div class="linha">
</div>
</form>
</article>
</main>
<footer>
</footer>
<!—Fim/Rodapé -->
</body>
</html>
Veja que nossa página ainda não possui nenhum estilo aplicado; vamos configurar
cores, posicionamentos e margens usando CSS (Código 2.32):
/*
Arquivo: estilo.css
*/
*{
}
/* ------------------------- Tags principais ------------------------- */
body{
a{
header{
nav{
nav a{
nav a:hover{ /* :hover aplica um estilo quando o mouse está sobre um item */
h1{
h5{
color:#777; /* cor: variação de cinza; */
article{
label{
footer{
input{
textarea{
#logo{
#cabecalho-interno{
.container{
.botao-enviar{
.linha{
.coluna{
TABELAS EM CSS
Diego César Batista Mariano
Fonte: Shutterstock.
Olá!
Nesta seção, daremos continuidade ao uso das folhas de estilo em cascata. Desta vez,
você aprenderá os fundamentos para formatação de estilos para tabelas e formulários.
Apesar de ser um recurso oriundo das primeiras versões do HTML, as tabelas ainda são
utilizadas em muitas aplicações, em especial, para exibição de conteúdo tabular. A
principal diferença é que as alterações nos estilos, como bordas e cores, eram realizadas
por meio de atributos das tags. Nos dias de hoje, convencionou-se que a melhor maneira
de alterar estilos tanto em tabelas quanto em qualquer elemento HTML é por meio das
propriedades CSS. Aqui, aplicaremos propriedades CSS de bordas, margens e cores de
fundo em tabelas e formulários.
Nesta seção, você também será introduzido ao maravilhoso mundo dos frameworks
CSS/JavaScript, que são bibliotecas de códigos com inúmeras funcionalidades já
desenvolvidas e testadas por muitos outros desenvolvedores. Por meio de um
framework é possível aplicar diversas configurações de estilos apenas inserindo o nome
das classes; além disso, ele permite que desenvolvedores criem aplicações com interface
amigável utilizando-se poucas linhas de código.
Por fim, você será introduzido ao mundo das animações utilizando apenas a linguagem
CSS. As propriedades de animação permitem transitar entre um estilo e outro.
Animações em CSS, apesar de serem mais simples quando comparadas com JavaScript,
permitem tornar a página mais dinâmica com um baixo custo para carregamento pelo
navegador.
Página inicial.
Página “quem somos”.
Página “produtos”.
Alfa 10 Mb - - - - 50
Beta 20 Mb x - - - 90
Gama 50 Mb x x 5 GB - 120
DICA
CONCEITO-CHAVE
Caro aluno, nesta seção, você aprenderá a aplicar estilos em tabelas e formulários. Nas
primeiras versões do HTML, estilos eram aplicados com o conteúdo, o que dificultava a
manutenção e a escalabilidade do código. Com as aplicações CSS, foi possível separar
códigos de conteúdos e códigos de estilo, e os estilos podem ser aplicados a todas as
tabelas e formulários de uma página web.
O foco principal desta seção será apresentar estilos para tabelas, mas muitas das
propriedades aplicadas a tabelas também podem ser aplicadas a formulários. Além
disso, muitas dessas propriedades já foram apresentadas anteriormente para outros
elementos CSS. Por fim, você vai conhecer dois poderosos frameworks CSS para
inserção de estilos automáticos: DataTables e Bootstrap. Os frameworks reduzem
consideravelmente a quantidade de código necessária para construção de páginas com
layout amigável. Você verá que, conhecendo fundamentos básicos desses frameworks,
já é possível construir belas páginas.
Para ilustrarmos o conteúdo apresentado, vamos utilizar o Quadro 2.7 com dados da
população brasileira do ano de 2017:
Elementos da tabela
Podemos aplicar estilos a tabelas usando as tags internas de tabelas. Uma tabela é
composta por elementos como no Quadro 2.8:
Descrição Tag
Tabela <table>
Linhas <tr>
Células <td>
Cabeçalho <thread>
Corpo <tbody>
Rodapé <tfoot>
td, th {
border: 1px solid #ccc;
padding: 10px;
Note que também aplicamos uma margem interna de 10px. Por padrão, tabelas não
apresentam margens internas, o que pode dificultar a leitura.
Perceba, ainda, que cada célula possui um espaçamento que gera um efeito de borda
dupla. Podemos remover isso usando a propriedade “border-colapse” (“A Complete
Guide to the Table Element”, 2013). Veja:
table {
border-collapse: collapse;
Por fim, podemos, também, adicionar detalhes ao nosso cabeçalho (tag ), como inverter
a cor de fundo e de texto:
table {
border-collapse: collapse;
td, th {
border: 1px solid #ccc;
padding: 10px;
th {
background-color: #333;
front-weight: bold;
color: #fff;
Veja que declaramos th duas vezes (na primeira vez, foram aplicadas regras à td e th,
mas abaixo, apenas à th. Não há qualquer problema em fazer múltiplas declarações a
um elemento CSS; deve-se, apenas, ressaltar que o efeito cascata garante que, caso haja
duas declarações idênticas, a última declaração realizada se sobreponha à outra (exceto
se a expressão !important for usada).
Formatação de dados da tabela
Note, pelos exemplos anteriores, que a formatação de tabelas pode demandar bastante
tempo, uma vez que requer que você aplique diversas regras individualmente, visando
facilitar a leitura dos dados na tabela. Algumas das regras apresentadas parecem simples
e repetitivas (como as regras de inserção de bordas para a tabela), logo, pode-se
observar que não é necessário reimplementar essas mesmas regras em toda a página
HTML criada. Por isso, surgiram os chamados frameworks CSS, que facilitam a
construção de sites fornecendo uma série de componentes básicos para formatação de
layouts amigáveis usando-se poucas linhas de códigos.
Assimile
O que é um framework?
DataTables
Dica
Usando o DataTables
Caso não consiga fazer o download dos arquivos, mostraremos, a seguir, como fazer
uma instalação usando a CDN (Content Delivery Network ou, na tradução, Rede de
Fornecimento de Conteúdo). Com a CDN, não é necessário baixar os arquivos, basta
utilizar os links disponibilizados pelos servidores (requer conexão com a internet). Para
isso, serão necessários apenas três passos:
<link href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"
rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"
></script>
<script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"
></script>
<script>
$(document) .ready( function(){
$('nome_tabela') .DataTable();
} );
</script>
Importante: altere o valor “#nome-tabela” pelo ID que você deu a sua tabela.
Após a configuração do DataTables, note que que foi incluído na linha 6 o seguinte
código:
<link href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"
rel="stylesheet">
Agora, compare as diferenças das duas versões, uma tabela construída com o estilo
nativo do navegador e uma tabela construída com o estilo nativo do DataTables (2.52):
Figura 2.52 | Diferença do estilo padrão do navegador (A) e do estilo padrão do DataTables (B)
(A) Sem DataTables
(B) Com DataTables
Observe que DataTables inseriu uma linha divisória de cabeçalho, uma barra de buscas
e de paginação, além dos mecanismos de ordenação Figura 2.53.
Bootstrap
Assim como DataTables, o Bootstrap pode ser executado via CDN. Para isso, basta
inserir os seguintes códigos em sua página:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/
dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/
dist/js/bootstrap.bundle.min.js"
></script>
Bootstrap é executado por meio de classes atribuídas. Por exemplo, uma formatação
simples de tabelas pode ser feita atribuindo-se a classe “table”:
<table class="table">
Entretanto, o Bootstrap oferece uma série de classes que podem ser aplicadas em
conjunto com a classe table para se formatar tabelas. É possível utilizar as seguintes
classes (Tabela 3):
Classe Descrição
table-hover Altera a cor da linha quando o cursor é passado sobre determinada linha.
A Figura 2.55 a seguir apresenta alguns exemplos de uso das classes apresentadas na
tabela anterior para a tabela de população brasileira estratificada por estados:
Você pode, ainda, aplicar cores às linhas usando as propriedades de cores. Observe o
resultado na Figura 2.56:
<table class="table">
<thead>
<th>
<th>UF</th>
<th>População</th>
<th>Sigla</th>
<th>Região</th>
</th>
</thead>
<tbody>
<tr class="table-primary">
<td>Região</td>
<td>829619</td>
<td>AC</td>
<td>Norte</td>
</tr>
<tr class="table-secondary">
<td>Alagoas</td>
<td>3375823</td>
<td>AL</td>
<td>Nordeste</td>
</tr>
<tr class="table-sucess">
<td>Amapá</td>
<td>797722</td>
<td>AP</td>
<td>Norte</td>
</tr>
<tr class="table-danger">
<td>Amazonas</td>
<td>4063614</td>
<td>AM</td>
<td>Norte</td>
</tr>
<tr class="table-warning">
<td>Bahia</td>
<td>1534447</td>
<td>BA</td>
<td>Nordeste</td>
</tr>
<tr class="table-warning">
<td>Ceará</td>
<td>9020460</td>
<td>CE</td>
<td>Nordeste</td>
</tr>
<tr class="table-light">
<td>Distrito Federal</td>
<td>3039444</td>
<td>DF</td>
<td>Centro-oeste</td>
</tr>
<tr class="table-dark">
<td>Espírito Santo</td>
<td>4016356</td>
<td>ES</td>
<td>Sudeste</td>
</tr>
</tbody>
</table>
O Bootstrap utiliza classes para alterar as cores das linhas na tabela, e o seu uso é
bastante simples e prático. Por exemplo: para a cor azul, utiliza-se a classe: table-
primary.
Com base no código apresentado, quais seriam as classes utilizadas para colorir as
linhas nas cores:
a. Cinza
b. Verde
c. Vermelho
d. Amarelo
e. Azul claro
f. Cinza claro
g. Cinza (texto branco)
As mesmas propriedades CSS utilizadas para formatar tabelas também podem ser
utilizadas em formulários.
<link href="estilo.css" hel="stylesheet">
<main class="container">
<form method="post" action="processa.php">
<div class="linha">
<label>Assunto</label>
<input type="text" name="assunto" size="50" placeholder="Informe o assunto">
</div>
<div class="linha">
<label>Mensagem</label>
<textarea name="mensagem" placeholder="Entre com a
mensagem" rows="5" cols="50"></textarea>
</div>
<div class="linha">
<input type="subtmit" name="submit" value="Enviar" class="botao-enviar">
</div>
</form>
</main>
Dica
input{
textarea{
.container{
.botao-enviar{
.linha{
input{
Veja que, nesse caso, apresentamos uma propriedade especial do CSS, calc( ), que é
responsável por fazer um cálculo que determinará o tamanho ocupado pelo elemento.
Trata-se de algo necessário, pois queremos que o input ocupe toda a linha, mas sem
ultrapassar os limites de largura estabelecidos. Nesse caso, ele ultrapassará os limites
em 20px (10px à direita e 10px à esquerda), pois atribuímos, logo abaixo, uma margem
interna de 10px (padding: 10px). Veja que os limites de largura não foram estabelecidos
nesse elemento e sim na classe container:
.container{
A mesma estratégia é aplicada para a tag <textarea>, que permite a inserção de blocos
de texto de múltiplas linhas. Além disso, inserimos cada elemento do formulário em
uma div e aplicamos a classe linha, que insere margens no topo (10px) e no rodapé
(20px), entre cada um dos elementos adicionados:</div>
.linha{
Aplicamos, ainda, um estilo de cor no botão de submissão, por meio da classe “botao-
enviar”.
.botao-enviar{
Nesse caso, aplicamos um tom de verde claro (código de cor hexadecimal #02B81A)
como cor de fundo e um tom de verde um pouco mais escuro (código de cor
hexadecimal #016B0F) como cor da borda, e isso foi feito para criarmos um efeito de
contraste. Alteramos, ainda, a cor de fundo para branco e adicionamos uma margem
interna de 20px para ampliar verticalmente o tamanho do botão. Por fim, para que o
botão seguisse o mesmo estilo aplicado aos outros elementos, determinamos que ele
ocupasse 100% do espaço destinado na página. Como usamos a classe container para
delimitar sua ocupação, ele deverá ocupar 100% do elemento container, ou seja, 960px.
Você deve ter percebido que a modificação de estilos usando-se CSS envolve uma série
de propriedades. Caso queira reduzir o tempo gasto no desenvolvimento, você pode
utilizar as classes disponibilizadas pelo Bootstrap para formatação de formulários.
Observe o HTML a seguir:
<main class="container">
<form method="post" action="processa.php">
<div class="mt-4">
<label>Assunto</label>
<input type="text" name="assunto" class="form-
control" size="50" placeholder="Entre com a mensagem">
</div>
<div class="mt-4">
<label>Mensagem</label>
<textarea name="mensagem" class="form-control" placeholder="Entre com a
mensagem" rows="5" cols="50"></textarea>
</div>
<div class="mt-4">
</div>
</form>
</main>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/
bootstrap.min.css">
Agora, você vai entender quais estilos e classes apresentadas aplicaram nos elementos
CSS: container, mt-4, form-control e btn.
Container
O Bootstrap também tem sua própria classe container. A vantagem dessa classe para o
código que você criou manualmente é que o container do Bootstrap é responsivo, i.e.,
logo, o bloco vai se ajustar de acordo com o dispositivo utilizado. Para ativar o design
responsivo, você precisa incluir a seguinte meta tag de escala dentro do <head>:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Observe como a página construída sem e com Bootstrap será vista em um smartphone
(Figura 2.59):
mt-4
A classe mt-4 foi utilizada no lugar da classe linha. O padrão de classes de
espaçamento Bootstrap é formado por um caractere representando o tipo de
espaçamento (m para margin e p para padding), a posição (t para top, b para bottom, l
para left e r para right) e um valor numérico, que pode ser substituído por números de 0
a 5 (quanto maior o número, maior o espaçamento da margem).
Reflita
Observe que o Bootstrap utiliza um padrão lógico para nomear suas classes. Por
exemplo: a classe mt-4 aplica uma propriedade margin-top; se desejássemos utilizar
uma classe para alterar o espaçamento da margem esquerda (margin-left), poderíamos
utilizar a classe ml-4.
Com base nisso, reflita sobre possíveis variações de classes Bootstrap para margem e
preenchimento e indique a classe do Bootstrap que aumenta ao máximo o
preenchimento da margem interna inferior.
form-control
btn
A classe btn é responsável por aplicar estilos de formatação em botões. No exemplo, ela
recebe o auxílio de duas outras classes: btn-success (aplica o estilo em verde) e btn-
block (define a largura do botão em 100%). Há oito variações de cores, além do botão
tipo link (Figura 2.60):
<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-success">Success</button>
<button class="btn btn-danger">Danger</button>
<button class="btn btn-warning">Warning</button>
<button class="btn btn-info">Info</button>
<button class="btn btn-light">Light</button>
<button class="btn btn-dark">Dark</button>
<button class="btn btn-link">Link</button>
Anteriormente, definimos nossa classe container com uma largura fixa de 960px, logo,
nosso container não era responsivo, uma vez que, independentemente da tela utilizada,
nosso container teria sempre 960px. O container Bootstrap determina o tamanho da
largura com base na resolução da tela usada para visualizá-lo. Por exemplo: se a tela
possuir mais do que 1200 px de largura, o Bootstrap determinará que seu container
tenha 1140px, e se for maior do que 992px, então, o máximo será de 960px. Se for
maior que 768, o tamanho máximo será de 720px; se for maior que 576px, terá 540px; e
se for menor do que isso, o container ocupará 100% do espaço disponível (Quadro
2.10). A ideia do container Bootstrap é impedir que elementos saiam do espaço
disponível em tela.
Telas
Tela extra pequenas
Disposi Tela média Tela média Tela grande
pequena (smartphone
tivos (Tabletes) (Laptops) (Desktops)
(smartphone) de alta
resolução)
Tamanh
o
máximo Nenhum
540 px 720 px 960 px 1140px
antes (auto)
do
colapso
# de
12
colunas
Outro ponto importante das classes do grid system Bootstrap são as linhas, colunas e
pontos de colapso. Bootstrap trata do sistema de grades como se fosse uma tabela com
exatamente 12 colunas. Entretanto, você não precisa usar as 12 colunas, podendo aplicar
tamanhos personalizados (desde que sejam múltiplos de 12). Observe a Figura 2.61 a
seguir.
<header class="container">
<div class="row">
Cabeçalho
</div>
</div>
</header>
<main class="container">
<div class="row">
</div>
</div>
</div>
</main>
<footer class="container">
<div class="row">
</div>
</div>
</footer>
Veja que o padrão de cores apresentado para os botões vale para componentes de pano
de fundo (bg-*: sendo bg-primary azul, bg-info verde-água, bg-warning amarelo e bg-
danger vermelho). Note, também, que usamos a classe p-5, que é equivalente a pt-5, pr-
5, pb-5 e pl-5 usadas ao mesmo tempo. Além disso, aplicamos text-center, que
centraliza o texto do rodapé.
Podemos, ainda, adicionar um ponto de colapso. Caso a resolução da tela seja pequena,
é desejável que a coluna principal e o menu lateral não sejam exibidos lado a lado e sim
um abaixo do outro, para isso, basta alterar as classes usadas:
Conteúdo principal
</div>
Menu lateral
</div>
Nesse caso, aplicamos duas classes distintas para cada um: col-12 e col-lg-8 para o
conteúdo principal e col-12 e col-lg-4 para o menu lateral. Se a tela tiver uma resolução
grande, serão aplicadas col-8 e col-4, e se a tela tiver uma resolução pequena, o sistema
deverá adotar a classe col-12, i.e., ocupando todo o espaço disponível.
Sub-propriedade Definição
animation-iteration-
Configura o número de vezes que uma animação deve se repetir.
count
animation-timing-
Configura a sincronização da animação.
function
div{
animation-duration: 1s;
animation-name: surgir da direita;
@keyframes surgir_da_direita{
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
No Código 2.38 foi configurada uma animação com duração de 1 segundo denominada
surgir_da_direita. Como o próprio nome define, a animação permite que divs surjam na
tela pelo lado direito e deslizem até o lado esquerdo. O estilo inicial é definido dentro
do bloco iniciado com from (observe que a margem esquerda inicial é 100%, ou seja,
está fora da vista) e o estilo final é definido no bloco to (aqui, a margem esquerda é de
0%). Além disso, foi aplicada uma mudança de tamanho de 300 para 100%, o que gera
um efeito redutivo interessante (Figura 2.64).
(A) Tempo 0s
(B) Tempo 0,5s
(D) Tempo 1s
Fonte: elaborada pelo autor.
Saiba mais
Bootstrap Icons
Ícones são essenciais para construção de sites com interface amigável. Recentemente,
Boostrap lançou sua própria biblioteca de ícones para auxiliar desenvolvedores.
<svg class="bi bi-chevron-right" width="32" height="32" viewBox="0 0 20
20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><patch fill-
rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0
01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"/></svg>
É claro que a inserção de ícones com códigos assim pode ser um pouco complexa. Você
pode acessar a página do Bootstrap icons, escolher o ícone desejado e inseri-lo usando o
código informado na página.
A maneira mais simples é: fazer o download dos arquivos SVG e, depois, inseri-los
como imagens:
<img src="[NOME-ICONE].svg" width="[largura]" height="[altura]">
<img width="50px" height="50px" src="icons/book.svg">
Uma lista com vários nomes de ícones pode ser encontrada no link disponível em:
https://icons.getbootstrap.com/.
Pesquise mais
REFERÊNCIAS
SILVEIRA, D. Brasil tem mais de 207 milhões de habitantes, segundo IBGE. 2017.
Disponível em: https://glo.bo/3bjRUyd. Acesso em: 25 fev. 2021.
FOCO NO MERCADO DE TRABALHO
TABELAS EM CSS
Diego César Batista Mariano
O QUE É DATATABLES?
Fonte: Shutterstock.
Tecnologias usadas:
Bootstrap 4.5.
DataTables.
Imagens coletadas no Pixabay.
Estrutura em que o código foi organizado, conforme a Figura 2.66.
A maior parte dos códigos de estilo utilizou o Bootstrap e poucas alterações foram
realizadas na folha de estilo principal. Observe o Código 2.39 a seguir:
/*
Arquivo: estilo.css
*/
nav{
min-height: 80px;
td img{
width: 25px;
height: 25px;
}
/* ID */
#quem-somos{
min-height: 600px;
background-image: url('../img/computer-768608_1280.jpg');
background-color: #000;
/* Classes */
.sobreposicao{
min-height: 600px;
background-color: rgba(0, 0, 0, 0.7);
background-image: url('../img/computer-768608_1280.jpg');
O CSS procurará a imagem com base na sua localização atual. Lembre-se de que o
arquivo está disponível em dados/css/estilo.css, logo, para encontrar a imagem de
fundo, ele deverá partir dessa posição. A imagem se encontra em dados/img/ computer-
768608_1280.jpg, entretanto, a pasta “dados” foi substituída por “..”. O símbolo “..”
indica o diretório anterior, então, a imagem se encontra dentro da pasta “img”, que está
um diretório atrás.
Página inicial
Todas as páginas foram incluídas dentro de “index.html” e podem ser acessadas por
links internos #nome-do-id. Para um melhor entendimento do código, dividimos ele em
seis partes:
<!DOCTYPE html>
<html>
<head>
<title>Internet ilimitada</title>
<link href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"
rel="stylesheet"><!-- DataTables -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"><!--
Bootstrap -->
</head>
<body>
<header>
<span class="navbar-toggler-icon"></span>
</button>
</li>
<li class="nav-item">
</li>
Planos de internet
</a>
va class="dropdown-item" href="#planos">Delta</a>
</div>
</li>
<li class="nav-item">
</li>
</ul>
</form>
</div>
</nav>
</header>
<main>
</div>
<hr class="my-4">
<p class="text-muted">Conheça nossos planos combo com modem wifi grátis, telefone
fixo, pacote de dados, TV digital e o melhor serviço de atendimento da região. Planos
combo à partir de R$ 50 sem taxa de instalação.</p>
<div>
</div>
</div>
Fonte: elaborado pelo autor.
Essa primeira parte do código produzirá a página ilustrada na Figura 2.67 a seguir.
Uma das vantagens de se utilizar o menu do Bootstrap é que ele se adapta ao dispositivo
utilizado (design responsivo). A Figura 2.68 ilustra o resultado da página no
smartphone.
Perceba que, nesse exemplo, a imagem foi enviada para a parte superior e o texto para a
parte inferior (isso se deve às classes Bootstrap utilizadas). A esse processo de
adaptação dá-se o nome de design responsivo.
background-color: rgba('0, 0, 0, 0.7');
rgba: indica a quantidade de vermelho (r), verde (g) e azul (b). O último valor (a),
conhecido como alpha, indica o índice de transparência, que vai de 0 a 1 (no exemplo,
0.7 indica 70% de transparência).
<section id="quem-somos">
<hr class="bg-info">
</div>
</section>
Fonte: elaborado pelo autor.
Painel de planos
Construímos uma seção para exibir uma lista de planos disponíveis. Para essa seção,
optamos por utilizar a classe cards do Bootstrap.
<h1 class="p-5">Planos</h1>
<div class="row">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="card">
<div class="card-body">
</div>
<div>
</div>
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
</div>
APENAS R$199
</div>
</div>
</section>
Fonte: elaborado pelo autor.
Aqui, dividimos uma linha em quatro colunas (col-md-3). Em cada card, exibimos os
preços, o título do plano e um botão “assine já”; além disso, inserimos o quinto plano
em um card logo abaixo, e fizemos isso para dar destaque a ele.
Tabela comparativa
<thead>
<tr>
<th>#</th><th>Plano</th><th>Internet</th><th>Modem wifi</th><th>Telefone
fixo</th><th>Pacote de dados</th><th>TV</th><th>Preço (R$)</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>Alfa</td>
<td>10 Mb</td>
<td><img src="dados/img/x-circle.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td>50</td>
</tr>
<tr>
<th>2</th>
<td>Beta</td>
<td>20 Mb</td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td><img src="dados/img/x-circle.png"></td>
<td>90</td>
</tr>
<tr>
<th>3</th>
<td>Gama</td>
<td>50 Mb</td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td>5 GB</td>
<td><img src="dados/img/x-circle.png"></td>
<td>120</td>
</tr>
<tr>
<th>4</th>
<td>Delta</td>
<td>100 Mb</td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td>10 GB</td>
<td>100 canais</td>
<td>150</td>
</tr>
<tr>
<th>5</th>
<td>Ômega</td>
<td>400 M</td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td><img src="dados/img/check-circle-fill.png"></td>
<td>100 GB</td>
<td>150 canais</td>
<td>199</td>
</tr>
</tbody>
</table>
</div>
</section>
Fonte: elaborado pelo autor.
A seção fale conosco foi desenvolvida com base nos scripts construídos anteriormente.
Observe o código 2.44 a seguir.
<div class="mt-4">
<label>Nome</label>
</div>
<div class="mt-4">
<label>E-mail</label>
</div>
<div class="mt-4">
<label>Assunto</label>
</div>
<div class="mt-4">
<label>Mensagem</label>
</div>
<div class="mt-4">
</div>
</form>
</section>
</main>
Fonte: elaborado pelo autor. Figura 2.72 | Página da seção Fale conosco
Fonte: elaborada pelo autor.
Rodapé
Por fim, adicionamos o rodapé na página. Aqui, adicionamos apenas uma mensagem
indicando a fonte das imagens utilizadas, que foram coletadas do Pixabay
gratuitamente, e embora a atribuição de fonte não seja obrigatória pelos termos do
Pixabay, é uma boa prática informar a fonte de onde as imagens foram obtidas. Além
disso, adicionamos, também, alguns scripts: jQuery, Bootstrap Bundle e DataTables.
Esses scripts são requisitados pelos frameworks utilizados.
Além disso, incluímos um script que altera os padrões de exibição da tabela. Esse script
remove a paginação, a barra de informações e de buscas. Observe o Código 2.45 com a
criação do rodapé. Veja que incluímos uma imagem com o link do Pixabay.
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js"></
script>
<script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready( function(){
$('#compare_planos').DataTable({
"paging": false,
"searching": false,
"info": false
});
} );
</script>
</footer>
</body>
</html>
Fonte: elaborado pelo autor.
Não pode faltar
A LINGUAGEM JAVASCRIPT
Diego César Batista Mariano
Essa linguagem do tipo front-end é usada para realizar alterações em páginas web; ela é
executada diretamente no navegador, proporcionando mudanças interativas na página
em tempo real.
Fonte: Shutterstock.
convite ao estudo
Prezado aluno, nesta unidade, “Desenvolvimento web com JavaScript”, você vai
conhecer e compreender a linguagem de programação JavaScript usada em aplicações
client-side, além de seus recursos para desenvolvimento web. Para construir boas
aplicações web, não é necessário ter um conhecimento profundo em sintaxe e
metodologias do JavaScript. Entretanto, conhecer os fundamentos básicos dessa
linguagem é importante para que você esteja apto a compreender scripts desenvolvidos
por outros usuários (como as bibliotecas) e adaptá-los para suas aplicações.
Na Seção 3.3, “Bibliotecas e frameworks JavaScript”, você vai ver uma introdução a
bibliotecas JavaScript, como Node.js, Create.JS, jQuery, React, D3.js, Glimmer.js,
Impact.js, Bootstrap e AngularJS, bem como entender a fundo como desenvolver
códigos usando jQuery, além de alguns exemplos usando Bootstrap JavaScript.
Bons estudos!
JavaScript possui uma imensa e ativa comunidade de desenvolvedores, por isso, espera-
se achar uma grande quantidade de documentação na internet. A melhor maneira de
aprender JavaScript na prática é trabalhando com exemplos reais. JavaScript tem se
tornado cada vez mais popular, estando presente na grande maioria dos documentos
web. Nesta seção, você aprenderá os fundamentos dessa linguagem, como
características, sintaxe e possíveis usos.
Agora, para nos aproximarmos da prática, imagine que o setor de marketing e data
science da empresa de planos de internet em que você trabalha chegou à conclusão de
que, às quartas-feiras, a taxa de vendas de planos tem uma queda significativa. Por isso,
decidiram implementar uma promoção: assine na quarta-feira e receba 30 dias grátis.
Você deve, então, implementar uma função que exiba na seção de planos de internet a
mensagem:
d = new Date();
d.getDay();
document.write( )
CONCEITO-CHAVE
O HTML é uma linguagem estática, isto é, uma vez gerada a página, ela será exibida da
forma como foi criada. Entretanto, a manutenção de sites estáticos é complexa: imagine
um site de receitas culinárias em que um cozinheiro precisa construir uma página
HTML para adicionar cada uma de suas receitas: é inviável! Por isso, tornou-se
necessária a construção de páginas dinâmicas. Além disso, sites modernos requerem
funcionalidades interativas, como um menu complementar, um botão que carrega uma
janela extra ou um painel que troca uma imagem de tempos em tempos. Com CSS,
vimos que podemos realizar algumas modificações envolvendo estilos, entretanto,
podemos aplicar modificações avançadas usando linguagens de programação, que
podem ser back-end ou front-end; além disso, para entendermos a diferença entre eles,
precisamos voltar ao conceito do paradigma cliente-servidor.
Paradigma cliente-servidor
Assim, o paradigma cliente-servidor explica como uma página da internet pode ser
visualizada:
O cliente faz uma requisição à internet por meio de um navegador (no caso,
fornece um endereço do site).
Roteadores, servidores DNS e outros dispositivos e serviços indicam a
localização do servidor que armazena o site requisitado.
O servidor envia para o cliente os códigos necessários para renderização da
página.
Assim, pode-se afirmar que as linguagens de programação podem ser aplicadas em dois
pontos distintos: no cliente ou no servidor. Linguagens que executam no servidor são
denominadas server-side, também conhecidas como linguagens back-end. Linguagens
que executam no cliente são denominadas client-side, também conhecidas como front-
end. Cada uma das linguagens executadas em cliente ou servidor tem seu propósito.
Linguagens executadas no servidor têm uma maior segurança, uma vez que os códigos
não ficarão visíveis para os usuários em geral, que receberão apenas os códigos
HTML/CSS. Já as linguagens executadas no cliente utilizam recursos do próprio
dispositivo do cliente, ou seja, não é necessário requisitar que o servidor processe
mudanças no documento web (o que melhora a performance).
JavaScript é a linguagem front-end usada para realizar alterações em páginas web; ela
é executada diretamente no navegador, proporcionando mudanças interativas na página
em tempo real. Essa linguagem é considerada a mais popular para o mercado de
trabalho segundo uma pesquisa recente do site Stack Overflow (2019).
Fundamentos do JavaScript
Exemplificando
A Figura 3.3 mostra o acesso ao console dessa página, no qual foi digitado o comando:
document.body.style.backgroundColor = 'red';
Figura 3.3 | Abrindo o console
Nesse exemplo, foi utilizado um comando JavaScript para alterar a cor de fundo. Vamos
entender o código parte por parte:
document.body.style.backgroundColor = 'red';
Aqui, foi indicado ao JavaScript que se deve acessar elementos presentes dentro do
documento web.
document.body.style.backgroundColor = 'red';
document.body.style.backgroundColor = 'red';
document.body.style.backgroundColor = 'red';
document.body.style.backgroundColor = 'red';
Por fim, foi indicado que essa propriedade deverá receber o valor red (vermelho). O
valor poderia tanto ser inserido entre aspas (“) quanto entre apóstrofos (‘), como nesse
caso. Veja que a linha é encerrada com ponto e vírgula; isso não é obrigatório, mas sim
uma boa prática do JavaScript.
Nesse exemplo, foi utilizado o console para fazer alterações no estilo com JavaScript.
Entretanto, o console é apenas uma maneira interativa de desenvolvedores web
analisarem e testarem seus códigos (no Brasil, chamamos isso de depurar o código ou,
informalmente, de debugar o código), não sendo a forma de se utilizar códigos
JavaScript em um site. Para isso, é necessário incorporar o código diretamente no
HTML.
Chrome Firefox
<script>
<script>
Os comandos em JavaScript devem ser encerrados por ponto e vírgula (apesar de que o
uso de ponto e vírgula no final de uma linha não é considerado obrigatório para que um
script funcione). Além disso, assim como na linguagem CSS, comentários em
JavaScript também são inseridos entre os símbolos de /* e */. Todavia, JavaScript
também permite a inserção de comentários de linha única por meio dos símbolos
// inseridos no início de uma linha. Observe o exemplo a seguir:
<script>
/*
Comentário
de
múltiplas
linhas
*/
</script>
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="script.js"></script>
</head>
<body>
</body>
</html>
script.js
/* Comandos JavaScript; */
estilo.css
/* Arquivo de estilos */
Veja a forma como os dois arquivos são declarados em index.html. Enquanto a folha de
estilo é referenciada pela tag simples <link> e a propriedade rel, o arquivo fonte do
script é inserido com a tag composta <script> e a propriedade src. Note que, no arquivo
script.js, não é necessário declarar a tag <script>.
Funções
alert("Olá mundo");
Observe que, até o momento, você está apenas aprendendo a realizar as chamadas de
funções; na sequência, você aprenderá a criar suas próprias funções.
Caro aluno, você já aprendeu a utilizar a função alert() para exibir uma mensagem,
agora, observe que alert recebeu um conjunto de letras (ou caracteres) declaradas entre
aspas. Assim como outras linguagens de programação, JavaScript atribui tipos para os
dados recebidos. Por exemplo: conjuntos de caracteres são dados do tipo string e, em
geral, são declarados entre “aspas” ou ‘apóstrofos’. Além disso, há diversos outros tipos
de dados:
var variavel =
Objetos Em JavaScript, objetos são “qualquer coisa”.
document.querySelector('p');
/* script.js */
alert(mensagem);
No código apresentado a seguir, foi criada uma variável global denominada mensagem,
que receberá, como valor, a string Olá mundo. Veja, agora, a declaração de diversos
tipos de variáveis:
/* script.js */
numero = 1;
verdadeiro = true;
/* Exibindo as variáveis */
alert(mensagem);
alert(numero);
alert(minha_lista);
alert(verdadeiro);
mensagem = numero;
alert(mensagem);
Fonte: elaborado pelo autor.
Observe que foram evitados acentos em nomes de variáveis. Ainda que muitos
navegadores já ofereçam suporte ao uso de acentos em nomes de variáveis, alguns
desenvolvedores evitam utilizar os caracteres especiais para evitar possíveis falhas no
código (veja que espaços em nomes de variáveis não são aceitáveis e, em geral, são
substituídos pelo caractere “_”).
Observe, ainda, que é possível atribuir uma variável à outra. Na linha 15, foi atribuída a
variável numero à variável mensagem, logo, mensagem passará a receber o valor
de numero. Isso só foi possível porque foram utilizadas as variáveis globais. Além
dessas, existem outras formas de se declarar variáveis.
Assimile
Variáveis são case sensitive, isto é, letras maiúsculas e minúsculas fazem a diferença no
nome da variável. Por exemplo, uma variável chamada “mensagem” é diferente de uma
variável chamada “Mensagem”.
Em JavaScript, variáveis podem, ainda, ser declaradas por meio das palavras reservadas
var, const ou let (ou nada, como no exemplo anterior), seguido de um nome, o sinal de
atribuição e um valor (opcionais), e encerrado por ponto e vírgula.
/* script.js */
/* Declarando variáveis */
Observe que as quatro variáveis declaradas são do tipo string. Entretanto, a diferença
entre elas dependerá do “escopo” adotado e das características desejadas. É importante
não chamar uma variável antes de sua declaração. Caso isso ocorra, o código será
imediatamente interrompido e um erro no console será exibido.
/* script.js */
alert(mensagem_1)
alert(mensagem_2)
alert(mensagem_3)
alert(mensagem_4)
/* Declarando variáveis */
Na execução desse código, nada foi exibido, uma vez que a mensagem exibida na linha
3 só foi declarada na linha 9, ou seja, ela ainda não existia no momento da chamada (a
execução do código é linear). Ao verificar o console da propriedade “Inspecionar”, você
verá o seguinte erro, conforme nos é mostrado na Figura 3.6:
Isso indica que a variável mensagem_1 não foi definida antes da execução, logo, há um
erro na linha 3 do arquivo script.js (vemos isso na figura em script.js:3).
Agora, vamos verificar o que acontece com os outros tipos de variáveis. Você pode
comentar, separadamente, as linhas 3, 4 e 5 para verificar o que ocorre na execução da
próxima linha. Veja que, agora, temos um erro diferente (Figura 3.7):
alert(mensagem_2)
alert(mensagem_3)
alert(mensagem_4)
//alert(mensagem_1)
//alert(mensagem_2)
alert(mensagem_3)
alert(mensagem_4)
Pode-se observar que o console retorna um erro, indicando que não é possível acessar a
variável antes de sua inicialização. Ao comentar separadamente, é possível verificar que
a execução do código é interrompida a cada variável executada antes de sua declaração.
/* script.js */
//alert(mensagem_1)
//alert(mensagem_2)
//alert(mensagem_3)
alert(mensagem_4)
/* Declarando variáveis */
alert(mensagem_4)
Fonte: elaborado pelo autor.
Veja o que ocorre ao imprimir essa variável em dois pontos distintos do código (Figura
3.9):
Figura 3.9 | Imprimindo variáveis declaradas com var antes (A) e depois da declaração (B)
Essa é uma das principais diferenças entre var e let (recomenda-se criar variáveis
usando let). Enquanto var permite que variáveis sejam usadas antes de sua declaração,
let restringe a inicialização da variável antes de sua declaração. Variáveis let são
restringidas ainda pelo escopo, que pode ser entendido como o contexto de execução, ou
seja, uma parte do código. A palavra reservada const, por sua vez, cria variáveis
“constantes”, ou seja, que não podem ser modificadas.
/* script.js */
/* Declarando variáveis */
mensagem_3 = mensagem_4
Fonte: elaborado pelo autor. Figura 3.10 | Constantes
Fonte: captura de tela elaborada pelo autor.
Aqui, a variável mensagem_3, por ser do tipo const, não pode ser reatribuída a outro
valor.
Estruturas de controle
comandos;
Operadores matemáticos
/* script.js */
/* Operações matemáticas */
let a = 5;
let b = 2;
alert(a+b); // 7
alert(a-b); // 3
alert(a*b); // 10
alert(a/b); // 2.5
alert(a%b); // 1
alert(a**b); // 25
// Operador de atribuição
Dos exemplos apresentados, destaca-se o operador módulo (%), que retorna o resto de
uma divisão cujo resultado deve ser um número inteiro (no exemplo, 5 dividido por 2 é
igual a 2 com resto 1, e o módulo corresponde ao resto dessa divisão).
Observe que foi destacado o operador “=”, mas ele não é considerado um operador
matemático e sim um operador de atribuição. Veja na linha 15 um exemplo de uso do
operador de atribuição (não dizemos que a variável soma é IGUAL às variáveis a + b e
sim que soma RECEBE as variáveis a + b). Para avaliarmos uma igualdade, temos de
utilizar os operadores relacionais.
Exemplificando
Concatenando strings
console.log(texto_final);
Fonte: elaborado pelo autor.
Console:
Operadores relacionais
/* Operações matemáticas */
let a = 5;
let b = 2;
Nesse caso, a linha 4 está avaliando se o valor contido em a é maior do que o valor
contido em b. Como a operação exibida no exemplo é verdadeira, a caixa de mensagem
exibirá true.
Veja alguns outros exemplos de operadores relacionais:
Operador Descrição
== Igual.
!= Diferente.
Operadores lógicos
Por fim, você deve conhecer os operadores lógicos, que nos permitem avaliar múltiplas
condições ou negações. Os operadores lógicos podem ser and (e), or (ou) ou not
(negação).
Operador Descrição
&& AND
|| OR
! NOT
/* Operações matemáticas */
let a = 5;
let b = 2;
// a (5) é maior que b (2) E b (2) é maior que 0?
// a (5) é maior que b (2) E (inverta o resultado de: b (2) é maior que 0)?
( ( condição 1) e ( condição 2 ) )
Console
/* script.js */
/* Operações matemáticas */
let a = 5;
let b = 2;
console.log(a-b); // 3
console.log(a*b); // 10
console.log(a/b); // 2.5
console.log(a%b); // 1
console.log(a**b); // 25
console.log(soma);
Fonte: elaborado pelo autor. Figura 3.11 | Operações matemáticas
Estruturas condicionais
let numero = 7;
if(numero % 2 == 0) {
console.log(numero+" é par");
} else if (numero % 2 == 1) {
console.log(numero+" é ímpar");
} else {
console.log("Número inválido");
}
Fonte: elaborado pelo autor.
Entretanto, se nosso resultado só tem duas opções, par ou ímpar, para que serve a última
condição? Imagine que seu site está recebendo dados inseridos por usuários; como os
usuários são livres para digitar o que quiserem, eles podem tanto digitar um número
válido como qualquer coisa que não seja um número.
Código 3.13 | Modo de verificar se um número é par ou ímpar com estruturas condicionais if e
else
/* script.js */
if(numero % 2 == 0) {
console.log(numero+" é par");
} else if (numero % 2 == 1) {
console.log(numero+" é ímpar");
} else {
console.log("Número inválido");
}
Fonte: elaborado pelo autor.
Outra estrutura condicional é o comando switch, que deve ser utilizado quando há uma
série de condições que se deseja avaliar. Observe o Código 3.14, em que foi modificado
o Código 3.13 e utilizado o comando switch:
Código 3.14 | Modo de verificar se um número é par ou ímpar com estruturas switch
let numero = 7;
switch(resto){
}
Fonte: elaborado pelo autor.
Estruturas repetitivas
console.log(i);
i = i+1;
}
Fonte: elaborado pelo autor.
Reflita
A incrementação de variáveis dada, por exemplo, pelo código i=i+1 permite que uma
variável receba o seu valor atual somado ao valor 1. Poderíamos aplicar isso com outros
operadores matemáticos e outros valores, como:
i = i–1 (subtração)
i = i**2 (exponenciação – elevado ao quadrado)
i = i/3 (divisão por três)
i = i*4 (multiplicação por quatro)
Com base nisso, você consegue imaginar o que aconteceria se não incluísse a linha i =
i+1?
Você pode ter o mesmo resultado utilizando o comando for. Esse comando executa um
laço de repetição por uma condição predeterminada. Veja, a seguir, um código que
obtém o mesmo resultado:
console.log(i);
}
Fonte: elaborado pelo autor.
O comando for recebe:
O nome da variável e o valor inicial.
A condição de parada.
A condição de incrementação.
Podemos, ainda, usar o comando for para navegar por arrays (coleções indexadas). A
seguir, apresentaremos o comando for usado para navegar pelos índices da
variável lista:
// array
for(i in lista){
// posição na lista
console.log(i);
// valor atual
console.log(lista[i]);
}
Fonte: elaborado pelo autor.
Para isso, você deverá informar o nome do array (no exemplo, lista) seguido da posição
em que se encontra o valor que se deseja imprimir. O código apresentado utiliza a
palavra reservada in para verificar quais os valores presentes no array. Observe o
resultado que será exibido no console (Figura 3.12):
Atenção
// objetos
let objeto = {
"A": "Abacate",
"B": "Bola",
"C": "Cachorro"
console.log(objeto);
console.log(objeto["A"]);
Fonte: elaborado pelo autor.
Caro aluno, você já aprendeu duas funções Javascript: alert() e console.log. Agora, você
pode construir suas próprias funções da seguinte forma:
// declaração da função
// comandos
return "alguma coisa";
Uma função pode executar uma determinada ação com base nos argumentos enviados e,
ainda, retornar informações para o fluxo principal do programa. Veja que, ao declarar
uma função, o bloco no qual ela se encontra é ignorado na execução do código. Esse
bloco só será executado quando a função for chamada.
Para executar a função criada, você deve chamá-la pelo nome seguido dos argumentos
que serão usados no processamento. Observe como deve ser realizada a chamada da
função criada anteriormente:
//chamada da função
nome_da_função(1, 2, 3, 4);
No exemplo a seguir, você construirá uma função que recebe dois parâmetros, a e b, e
retorna a soma dos dois valores.
// Funções
return a+b;
// Chamando a função
console.log(valor_soma); // 5
Fonte: elaborado pelo autor.
Saiba mais
Pesquise mais
Site:
Comunidade JavaScript (JAVASCRIP.COM, [s.d.]).
o
Artigos:
o MARIANO, D. Fundamentos do JavaScript. Diegomariano, 15 ago.
2020a.
o MARIANO, D. Introdução ao JavaScript. Diegomariano, 15 ago.
2020b.
Vídeos:
o FUNDAMENTOS do JavaScript. [S.l., s.n.], 2017. 1 vídeo (3:24 min).
Publicado pelo canal Diego Mariano.
o INTRODUÇÃO ao JavaScript. [S.l., s.n.], 2017. 1 vídeo (4:02 min).
Publicado pelo canal Diego Mariano.
o O QUE o JavaScript é capaz de fazer? – Curso JavaScript #01. [S.l., s.n.],
2019. 1 vídeo (28:49 min). Publicado pelo canal Curso em Vídeo.
REFERÊNCIAS
FUNDAMENTOS do JavaScript. [S.l., s.n.], 2017. 1 vídeo (3:24 min). Publicado pelo
canal Diego Mariano. Disponível em: https://cutt.ly/WzTb9EM. Acesso em: 26 fev.
2021.
INTRODUÇÃO ao JavaScript. [S.l., s.n.], 2017. 1 vídeo (4:02 min). Publicado pelo
canal Diego Mariano. Disponível em: https://cutt.ly/vzTnufl. Acesso em: 26 fev. 2021.
O QUE o JavaScript é capaz de fazer? – Curso JavaScript #01. [S.l., s.n.], 2019. 1 vídeo
(28:49 min). Publicado pelo canal Curso em Vídeo. Disponível em:
https://cutt.ly/VzTn6Wl. Acesso em: 26 fev. 2021.
A LINGUAGEM JAVASCRIPT
Diego César Batista Mariano
Fonte: Shutterstock.
Anteriormente, você foi desafiado a implementar uma função que exiba na seção de
planos de internet de um site a seguinte mensagem, apenas às quartas-feiras:
Agora observe o código utilizado para realizar isso (as linhas comentadas explicam cada
trecho do código):
<h1 class="p-5">Planos</h1>
<script>
// cria uma variável numero_dia que utiliza a função getDay( ) para pegar o nome do
dia da semana
// mensagem que será exibida na tela (foi usado Bootstrap para formatar o estilo da
mensagem)
if(dia == "Quarta-Feira"){
document.write(mensagem);
</script>
Fonte: elaborado pelo autor.
Não pode faltar
ELEMENTOS DE APLICAÇÕES EM
JAVASCRIPT
Diego César Batista Mariano
Fonte: Shutterstock.
Olá, aluno!
Use o OpenLayers para exibir o mapa. Você pode instalá-lo usando o comando npm:
npm install ol
Você também pode executá-lo sem instalação inserindo o trecho mostrado no Código
3.21:
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/
v6.5.0/build/ol.js"></script>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.5.0/
css/ol.css">
Fonte: elaborado pelo autor.
Outra opção é fazer o download manual dos arquivos para execução local, disponíveis
no material suplementar: v6.5.0-dist.zip.
Não se esqueça de incluir os seguintes arquivos:
ol.css.
ol.js.
ol.css.map.
ol.js.map.
Bons estudos!
CONCEITO-CHAVE
Documentos web são compostos por tags que se conectam a outras tags em uma grande
rede. Uma forma de visualizar a estrutura dessas páginas é com base no Modelo de
Objetos de Documento (do inglês Document Object Model ou apenas DOM). O DOM
representa a estrutura de documentos HTML, SVG ou XML como uma árvore (MDN
WEB DOCS, [s.d.]). A Figura 3.16 mostra a estrutura da Árvore DOM.
Uma das principais vantagens do DOM é a sua capacidade de ser manipulado por meio
de linguagens de script, como JavaScript.
Pesquise mais
Você poderá ter acesso a mais informações sobre o que é o DOM no artigo indicado a
seguir:
index.html
<!DOCTYPE html>
<html>
<head>
<title>DOM</title>
<meta charset="utf-8">
<script src="script.js"></script>
</head>
<body>
<p>Parágrafo 1</p>
<p>Parágrafo 2</p>
<p>Parágrafo 3</p>
</body>
</html>
Fonte: elaborado pelo autor. Código 3.23 | script.js – Coletando todas as tags <p>
script.js
window.onload = function(){
console.log(paragrafos);
console.log(paragrafos[0]);
// exibe o tipo do nó
console.log(paragrafos[0].nodeName);
}
Fonte: elaborado pelo autor.
const paragrafos = document.querySelectorAll("p");
console.log(paragrafos);
console.log(paragrafos[0]);
Assimile
Você pode verificar que, ao abrir o arquivo HTML, as tags serão carregadas linha a
linha (note que declaramos o script na linha 8 do Código 3.22). Logo, o script só
poderia analisar o conteúdo que aparece antes dele. Como não há parágrafos antes da
declaração do script, os códigos JavaScript não conseguiriam coletar informação
alguma. Uma solução para isso é incluir a chamada do script no final da página.
Entretanto, JavaScript fornece soluções mais robustas por meio de eventos de
carregamento, como o evento onload. Esse comando executa o bloco de código apenas
ao final do carregamento da página, ou seja, garante que todas as tags necessárias já
tenham sido carregadas.
Método Descrição
Observe a seguinte página HTML sem qualquer conteúdo aplicado ao body e teste esse
exemplo utilizando a ferramenta Trinket:
Veja a Figura 3.18. Ela mostra o preenchimento dessa página usando apenas
propriedades de manipulação do DOM no arquivo JavaScript.
script.js
index.html
<!DOCTYPE html>
<html>
<head>
<title>DOM</title>
<meta charset="utf-8">
<script src="script.js"></script>
</head>
<body>
<main>
<div id="B"></div>
</main>
</body>
</html>
estilo.css
*{
margin:0;
padding:0;
body{
font-size: 50px;
text-align: center;
#A{
height: 100%;
width: 50%;
background-color: red;
left:0;
position: absolute;
#B{
height: 100%;
width: 50%;
background-color: blue;
left:50%;
position: absolute;
}
Fonte: elaborado pelo autor.
Observe que temos um bloco vermelho ao lado de um bloco azul. Apenas no bloco
vermelho foi inserido o texto: “Olá mundo!”.
Reflita
Na Figura 3.19, você pôde observar que as duas divs ocupam todo o espaço disponível
na página. As propriedades CSS utilizadas para definição de tamanho e posicionamento
são de grande importância, principalmente na construção de páginas com design
responsivo.
Você consegue identificar as propriedades CSS usadas para deixar as divs ocupando
toda a largura e altura da página? Qual propriedade foi utilizada para posicionar a div
azul ao lado da vermelha?
Agora, você pode verificar as propriedades JavaScript para mover o conteúdo do bloco
vermelho para o bloco azul. Para isso, precisamos da função que navega pelo DOM,
além de coletar o elemento com base no seu ID. Esse método é
document.getElementById().
script.js
window.onload = function(){
// apaga o conteúdo de A
document.getElementById("A").innerHTML = '';
}
Fonte: elaborado pelo autor.
Caro aluno, neste momento veremos o passo a passo do que foi realizado, mais uma vez
usando o seguinte comando:
window.onload = function(){}
Isso para que os códigos presentes na função sejam executados apenas após o
carregamento da página, uma vez que optamos em declarar o script no cabeçalho.
document.getElementById("B").textContent =
document.getElementById("A").innerHTML;
Usamos o método getElementById( ) para coletar o elemento com ID “B”. Observe que
o atributo textContent informa o que se deseja aplicar ao conteúdo do texto. Assim, o
operador de atribuição foi utilizando-o para informar que será aplicado ao texto o
conteúdo do elemento de ID “A”. Nesse caso, utilizamos o atributo innerHTML. Assim,
foi informado qual era o conteúdo do HTML do elemento daquele ID. Então, o
conteúdo de A é copiado para B.
// apaga o conteúdo de A
document.getElementById("A").innerHTML = '';
Por fim, foi aplicado ao HTML interno do elemento de ID “A” o valor " (vazio). Ou
seja, o texto existente é substituído por um valor em branco.
Exemplificando
<div id="A"><p>Olá mundo!</p></div>
<div id="B"></div>
Observe que o texto está envolvido por uma tag <p></p>. Será que a tag seria
transferida?
Observe o Quadro 3.7 a seguir, em que temos uma lista de comandos JavaScript para
modificação do DOM.
Alterando o estilo
Você também pode utilizar os comandos JavaScript para alterar os estilos CSS. Para
isso, deve-se coletar o objeto pelo ID e, a seguir, aplicar a propriedade desejada com a
seguinte sintaxe:
element.style.property
Vamos alterar o exemplo anterior, para que seja possível alterar a cor de fundo da div A:
document.getElementById("A".style.backgroundColor = 'green';
Você aprendeu que a seleção de elementos pode ser realizada por ID. Outra forma de
realizar esse procedimento é utilizando a seleção por classes ou pelas tags, caso seja
necessário alterar vários elementos.
A seguir, vamos criar uma classe no arquivo estilo.css:
.texto-branco{
color:white;
Essa classe apenas muda a cor do texto para branco. Você pode adicioná-la
manualmente no arquivo HTML, mas vamos fazer de uma forma diferente: utilizando
JS.
window.onload = function(){
document.getElementById("B").innerHTML =
document.getElementById("A").innerHTML;
// apaga o conteúdo de A
//document.getElementById("A").innerHTML = '';
elemento[i].classList.add("texto-branco");
}
Fonte: elaborado pelo autor.
Como será utilizado o conteúdo do elemento A para este exemplo, você pode comentar
a linha que o apaga:
//document.getElementById("A").innerHTML = '';
A seguir, pode-se utilizar uma variável para selecionar nosso elemento desejado:
let elemento = document.getElementsByTagName("div");
elemento[i].classList.add("texto-branco");
}
Você pode aplicar a classe texto-branco a cada uma das divs. Para isso usamos o
atributo classList e o método add.
elemento[i].classList.add("texto-branco");
Importa destacar que não podemos aplicar essa classe a todo o objeto elemento, mas a
posições específicas [i]. Por isso, foi necessário utilizar um laço de repetição para
coletar os valores possíveis da variável i. Note que o laço fará duas iterações. Na
primeira, i vale 0, logo o comando executado seria:
elemento[0].classList.add("texto-branco");
elemento[1].classList.add("texto-branco");
elemento[0].classList.remove("texto-branco");
Você pode ainda selecionar elementos usando o nome das classes com o método
getElementsByClassName().
let elemento2 = document.getElementsByClassName("texto-branco");
Observe que, ao fazer isso, a nova propriedade CSS sobrepõe as regras apresentadas
anteriormente (mesmo que os elementos ainda apresentem a classe texto-branco; neste
caso, o texto se tornará amarelo), conforme a Figura 3.22.
Isso ocorre devido ao “efeito cascata”: regras aplicadas com o atributo style têm
prioridade em relação a regras de estilo obtidas de um arquivo externo.
Eventos
Evento Descrição
<button onclick="clique()">Clique aqui</button>
Observe que o atributo onclick recebe entre aspas a função clique(). Isso indica que
quando o evento onclick for disparado (ou seja, quando o botão for clicado), a página
deverá executar a função clique(). Agora, vamos criar essa função no arquivo
JavaScript:
function clique(){
alert("Olá mundo!");
}
Essa função apenas exibe a mensagem “Olá mundo!”. Observe que não foi necessário
utilizar o comando window.onload, uma vez que o evento só será disparado quando o
usuário clicar no botão. A Figura 3.23 apresenta o resultado da aplicação.
Elementos de formulário
<form>
</form>
Fonte: elaborado pelo autor. Figura 3.24 | Resultado do Código 3.27: formulário com nome e
telefone
Vamos aplicar uma propriedade que seja exclusiva para cada campo. Para isso, vamos
criar uma função que apesenta parâmetros e recebe argumentos enviados na chamada.
Também vamos explorar o evento onmouseover (quando o cursor está sobre o
elemento). No arquivo JS, crie a seguinte função:
function formata_input(id){
}
Fonte: elaborado pelo autor.
Essa função recebe um ID passado em sua chamada, depois seleciona o elemento, a
seguir aplica a propriedade box-shadow (uma sombra azul de 30px de desfoque e 0 de
movimentação nos eixos x e y) e altera o atributo placeholder.
var elemento = document.getElementById(id);
Vamos então configurar o HTML para realizar a chamada da função quando o evento
ocorrer:
<form>
<input
type="text"
id="nome"
onmouseover="formata_input('nome')"
placeholder="Nome"
>
<input
type="text"
id="telefone"
onmouseover="formata_input('telefone')"
placeholder="Telefone"
>
</form>
Fonte: elaborado pelo autor.
onmouseover="formata_input('nome')"
Observe o que ocorre ao posicionar o mouse sobre o campo input (Figura 3.25):
Para isso, você pode criar uma função que volte as configurações ao normal:
function voltar_normal(id){
elemento.placeholder = id;
<form>
<input
type="text" id="nome"
onmouseout="voltar_normal('nome')"
onmouseover="formata_input('nome')"
placeholder="Nome"
>
<input
type="text" id="telefone"
onmouseout="voltar_normal('telefone')" onmouseover="formata_input('telefone')"
placeholder="Telefone"
>
</form>
Fonte: elaborado pelo autor.
Agora, considere que você deseja aplicar um estilo em ambos os campos input ao
mesmo tempo. Para isso, você vai aprender a realizar a chamada de uma função dentro
de outra função. A seguir, será apresentado um exemplo em que, ao passar o mouse
sobre o campo, é adicionada uma margem interna de 5px a todos os campos input.
Então você pode criar duas funções, formata_input_geral() e remove_estilo_geral(),
uma para adicionar a margem interna e a outra para removê-la, respectivamente.
script.js
function formata_input_geral(){
elemento[i].style.padding = "5px";
function remove_estilo_geral(){
elemento[i].style.padding = "0";
}
Fonte: elaborado pelo autor.
Pode-se realizar as chamadas dessas funções dentro das funções que criamos
anteriormente. Observe o Código 3.32 contendo duas funções e fazendo a chamada das
funções
formata_input_geral() e remove_estilo_geral() criadas no Código 3.31.
function formata_input(id){
formata_input_geral();
// [...]
}
function voltar_normal(id){
remove_estilo_geral();
// [...]
}
Fonte: elaborado pelo autor.
JSON
Arquivos JSON são compostos por objetos que apresentam um conjunto de chaves e
valores separadas por vírgula. Valores podem receber strings (escritas com aspas),
numerais (escritos sem aspas), arrays, estruturas lógicas, objetos nulos (null) ou até
mesmo outros objetos.
Sintaxe do JSON:
Objeto{
“chave”: “valor”,
[...]
Por exemplo:
JSON também permite o uso de arrays como entrada. Arrays, também conhecidos como
vetores ou listas, são declarados entre colchetes. Observe o array a seguir:
"funcionários":[
{"nome":"José","sobrenome":"da Silva","Idade":23},
{"nome":"Ana","sobrenome":"Gonzales","Idade":33},
{"nome":"Pedro","sobrenome":"Parker","Idade":18},
Caro aluno, veja que para o JS a chave não precisa de aspas, mas ao salvar em arquivo,
essas aspas são necessárias. Para ilustrar o exemplo, faremos sua declaração diretamente
no código JS como uma string. Observe o Código 3.33 e o resultado dele ilustrado na
Figura 3.27:
script.js
"funcionários":[\
]}');
console.log(obj)
Fonte: elaborado pelo autor. Figura 3.27 | Objetos
Aqui, o objeto funcionários possui um array com três outros objetos constituídos por
três pares de chave-valor: nome, sobrenome e idade.
Vamos, então, navegar por esse objeto. Podemos obter o nome e a idade do primeiro
funcionário usando o código (Figura 3.28):
console.log(obj.funcionários[0].nome)
console.log(obj.funcionários[0].idade)
Pesquise mais
JSON. [S.l., s.n.], 11 out. 2017.1 vídeo (5 min. 34 seg.). Publicado pelo canal Diego
Mariano.
AJAX
Por exemplo, há alguns anos muitos sites apresentavam um botão “salvar” para gravar
dados de formulários. Você pode verificar que, ao clicar nesse botão, é feito o envio dos
dados para o servidor, e a página inteira é recarregada. O problema é que, ao recarregar
a página, diversas informações desnecessárias eram transferidas, como a estrutura do
cabeçalho, menus, divs, imagens e estilos (vamos desconsiderar, por enquanto, que
navegadores têm estruturas de cache que podem salvar parte desses componentes).
Todas essas informações não alterarão ao clicar o botão salvar. No máximo, o servidor
retornará as mesmas informações que você enviou, além de uma mensagem como
“dados gravados com sucesso”.
AJAX permite que apenas parte dos dados sejam enviados para o servidor, sem a
necessidade de recarregar toda a página. Com isso, o tempo para envio dos dados será
menor, além da redução do fluxo de dados na rede.
AJAX utiliza JavaScript para fazer requisições assíncronas ao servidor remoto por meio
da API XMLHttpRequest. É bastante usado com PHP, mas pode ser usado com outras
linguagens back-end, como Python e Java.
Canvas
Para a criação de Canvas deve-se especificar três parâmetros: o ID, a largura (width) e a
altura (height) do elemento a ser desenhado, conforme pode ser visto no exemplo a
seguir:
<!DOCTYPE html>
<html>
<body>
</canvas>
<script type="text/javascript">
var c=document.getElementById("testecanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="blue";
ctx.fillRect(0,0,200,400);
</script>
</body>
</html>
Fonte: elaborado pelo autor.
O trecho em JavaScript utiliza o ID para encontrar o elemento Canvas que foi definido
na página: var c=document.getElementById("testecanvas");.
Esse posicionamento pode ser obtido de várias formas, com o seu endereço de IP usado
para conectar-se à internet, com a triangulação das antenas de telecomunicação ou,
ainda, com os dados específicos dos dispositivos GPS (Sistema de Posicionamento
Global, ou, em inglês, Global Positioning System). De fato, nos dias de hoje tornou-se
trivial a utilização de métodos de obtenção de localização do dispositivo de acesso, e tal
posicionamento pode ser explorado por scripts construídos com JavaScript.
var lat;
var lon;
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(
function(posicao){
console.log(posicao);
lat = posicao.coords.latitude;
lon = posicao.coords.longitude;
console.log(lat, lon);
);
}
Fonte: elaborado pelo autor.
Observe que na linha 4 foi necessário verificar se a variável existe. Isso porque muitos
navegadores ainda não oferecem suporte à API de geolocalização. Ao abrir essa página
no navegador, se houver suporte será exibida uma caixa de diálogo questionando se
você autoriza a divulgação de sua geolocalização. Esse procedimento garante que sua
localização seja utilizada apenas quando previamente autorizado (Figura 3.29).
Nesse objeto podemos verificar várias informações, como a acurácia, que indica o quão
precisa é a posição apresentada (no exemplo, a acurácia é de 10.182 metros), além da
latitude e longitude. Vários campos não puderam ser definidos devido a restrições do
navegador.
Você pode copiar as posições de latitude e longitude e usar uma ferramenta de mapas
para visualizar, como o Google Maps, conforme ilustrado na Figura 3.31:
Nesse exemplo foram utilizadas apenas duas casas decimais (para facilitar a
visualização).
O Google Maps permite ainda o uso de uma API para inclusão de mapas em sites
usando JavaScript. Entretanto, essa API requer uma chave.
OpenLayers
É uma biblioteca JavaScript open source com recursos de alto desempenho para
mapeamento. Veja a seguir os 3 modos de executá-la.
Modo 01
npm install ol
Modo 02
Modo 03
JavaScript: ol.js - Contém os scripts necessários para carregamento dos mapas
interativos.
Observação: aprenda mais sobre essa biblioteca acessando o site oficial do OpenLayers.
Como está sendo utilizada uma biblioteca JS, não é necessário “decorar” todos os
códigos, uma vez que alguns comandos são bastante específicos para essa biblioteca.
Você pode adaptar códigos disponíveis na documentação para seus problemas
específicos. O importante é compreender os fundamentos e alguns comandos utilizados.
index.js
<!DOCTYPE html>
<html>
<head>
<title>Geolocalização</title>
<meta charset="utf-8">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.4.3/
css/ol.css" type="text/css">
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/
v6.4.3/build/ol.js"></script>
</head>
<body>
<h2>Mapa</h2>
<div id="map" class="map"></div>
<script src="script.js"></script>
</body>
</html>
Fonte: elaborado pelo autor.
estilo.css
.map {
height: 400px;
width: 100%;
}
Fonte: elaborado pelo autor.
No Código 3.37, o estilo apenas definiu a altura da div que receberá o mapa (no
exemplo, 400px) e a largura total (100%).
script.js
var lat;
var lon;
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(
function(posicao){
console.log(posicao);
lat = posicao.coords.latitude;
lon = posicao.coords.longitude;
console.log(lat, lon);
geraMapa();
);
function geraMapa(){
target: 'map',
layers: [
new ol.layer.Tile({
})
],
zoom: 10
})
});
}
Fonte: elaborado pelo autor.
No script foi criada uma nova função denominada geraMapa(). A análise dela é
realizada a seguir:
Nessa linha foi declarada uma variável denominada map que recebe um novo objeto
ol.Map. No trecho a seguir, temos algumas propriedades desse objeto, como o alvo
(target) e as camadas (layers), que receberão um novo objeto do tipo ol.layer.Tile:
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
zoom: 10
})
});
Nesse caso, foram inseridos os nomes das variáveis que criamos anteriormente para
receber a localização atual. A Figura 3.32 ilustra o resultado do mapa.
script.js
function controlarVideo() {
if (video.paused) {
video.play();
btn.innerHTML = "Pausar";
} else {
video.pause();
btn.innerHTML = "Continuar";
}
Fonte: elaborado pelo autor.
Agora você pode construir a página HTML. Aqui será utilizado um vídeo genérico no
formato MP4 denominado “a.mp4”. O botão deverá ativar a função controlarVideo( ) ao
ser clicado (evento onclick). Observe o código resultante a seguir:
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="script.js"></script>
</head>
<body>
</video>
<div class="conteudo">
</div>
</body>
</html>
Fonte: elaborado pelo autor.
Por fim, você pode aplicar os estilos usados nessa página (Código 3.41):
estilo.css
*{
box-sizing: border-box;
body {
margin: 0;
#meuVideo {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
}
.conteudo {
position: fixed;
top: 0;
color: #f1f1f1;
width: 100%;
padding: 30px;
#controle {
width: 200px;
font-size: 16px;
padding: 10px;
border: none;
background: #000;
color: #fff;
cursor: pointer;
#controle:hover{
background: #ddd;
color: black;
}
Fonte: elaborado pelo autor.
Nesta seção, você pôde se aprofundar na linguagem JavaScript. Você estudou como
navegar pelo DOM e quais são os eventos disponíveis. Ainda aprendeu alguns
fundamentos do uso de bibliotecas, que são utilizadas, por exemplo, para
geolocalização. Agora você pode aplicar os seus conhecimentos criando aplicações que
utilizem as bibliotecas apresentadas. Vamos lá?
REFERÊNCIAS
JSON. [S.l., s.n.], 11 out. 2017.1 vídeo (5 min. 34 seg.). Publicado pelo canal Diego
Mariano. Disponível em: https://bit.ly/38yHKb1. Acesso em: 27 fev. 2021.
MDN WEB DOCS. Introduction to the DOM. MDN Web Docs Mozilla,
[s.d.].Disponível em: https://mzl.la/30ytWZU. Acesso em: 6 nov. 2020.
PILGRIM, M. Dive into HTML 5. [S.l.]: O’Reilly Media, 2010. Disponível em:
https://bit.ly/38wSC9v. Acesso em: 27 fev. 2021.
FOCO NO MERCADO DE TRABALHO
ELEMENTOS DE APLICAÇÕES EM
JAVASCRIPT
Diego César Batista Mariano
Para executar essa tarefa, recorra aos conhecimentos que você obteve até esse momento
sobre a linguagem JavaScript.
Fonte: Shutterstock.
Para ampliar sua visão acerca das possibilidades de aplicação dos conhecimentos
obtidos até o momento, vamos propor uma resolução para a situação-problema
apresentada no início desta seção. Sua incumbência foi incluir uma localização
transparente em um website para o caso de algum cliente da empresa quiser visitá-la.
Você deverá construir um mapa interativo para exibir essa localização. Além disso,
deverá adicionar o mapa interativo à página criada anteriormente.
<section class="container">
<style type="text/css">
.map {
height: 400px;
width: 100%;
</style>
<h2>Onde estamos?</h2>
<script>
function geraMapa(){
target: 'map',
layers: [
new ol.layer.Tile({
})
],
zoom: 10
})
});
geraMapa();
</script>
</section>
Fonte: elaborado pelo autor.
BIBLIOTECAS E FRAMEWORKS
JAVASCRIPT
Diego César Batista Mariano
Fonte: Shutterstock.
Mas pense em como calcular isso com JavaScript. Uma maneira de descobrir qual o
maior na lista é analisar um a um usando um laço de repetição e verificar, a cada
rodada, qual o maior número atual. Para isso, é necessária uma variável auxiliar para
armazenar o maior valor. Agora, observe o trecho de código a seguir:
var maior = 0;
for(i in lista){
maior = lista[i];
console.log(maior);
Fonte: elaborado pelo autor.
Achar o maior número de uma lista é uma tarefa muito simples, mesmo assim foram
utilizadas oito linhas. O JavaScript contém uma função para isso na biblioteca nativa:
Por isso, bibliotecas e frameworks são tão importantes. Eles fornecem soluções que
aceleram o desenvolvimento do código, permitindo que os programadores foquem o que
realmente importa: construir aplicações mais robustas.
Diferentes bibliotecas e frameworks podem ter diversos objetivos. Por exemplo, jQuery
é uma biblioteca construída para simplificar a forma como programamos em JavaScript.
Já o D3.js é uma biblioteca construída especialmente para construção de gráficos e
outros tipos de visualização de dados. Assim, não há empecilho em usar as duas
bibliotecas em um mesmo projeto de site.
Para isso, foi solicitado que você utilize a estrutura de um modal Bootstrap (um
componente que usa animações CSS e JavaScript, além do efeito lightbox para melhorar
a interface de uma caixa de diálogo). Entretanto, você deverá construir um código que
utilize um único modal, que deverá receber interativamente o plano escolhido com base
na opção escolhida pelo usuário.
Para isso, será preciso implementar essa caixa de diálogo interativa, seguindo as
seguintes regras:
Opcional: inclua os estados brasileiros em um campo do tipo select. Você pode obter
uma lista (select) dos estados brasileiros em GitHub (c2021).
Observe qual é a versão do Bootstrap utilizada, pois classes podem receber novos
nomes. Você pode usar jQuery combinado às classes do Bootstrap para alterar os
atributos referentes aos campos selecionados. Por exemplo, o atributo disabled impede
que um campo seja clicado (ele é bloqueado).
Diante disso, nesta seção, abordaremos alguns exemplos de bibliotecas JavaScript, além
de apresentar exemplos práticos usando jQuery, a mais popular biblioteca/framework
JavaScript. Vamos lá?
CONCEITO-CHAVE
Nos últimos anos, uma ampla gama de frameworks JavaScript tem sido disponibilizada
na internet. Isso traz vantagens, pois dá ao desenvolvedor muitas opções na hora de
desenvolver a sua aplicação, porém pode tornar difícil a escolha do framework e a
decisão de qual biblioteca utilizar.
Biblioteca Descrição
Perceba que cada framework apresenta uma principal motivação. De fato, o que elas
têm em comum é o fato de utilizarem uma sintaxe parecida ao JavaScript (usando os
padrões do ECMAScript). Entretanto, detalhes de como implementar códigos usando
cada um desses frameworks devem ser explorados na documentação descrita nos seus
respectivos sites. Como dissemos, seria impossível explorar cada um desses
frameworks; portanto, escolhemos a biblioteca jQuery para ilustrar a seção. Entretanto,
recomendamos a você, aluno, que pesquise a fundo as novas bibliotecas/frameworks
JavaScript, em especial aquelas com foco em arquitetura single-page, que podem ser a
próxima tendência no desenvolvimento web.
Pesquise mais
jQuery
Início rápido
Para começar a desenvolver seus primeiros códigos em jQuery, inclua a seguinte linha
de código:
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
Instalação opcional
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="conteudo"></div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
</script>
</body>
</html>
Fonte: elaborado pelo autor.
Perceba que o jQuery foi carregado na linha 13. Ele deve ser declarado antes dos
códigos usando a sintaxe jQuery, como o código presente na linha 15.
Observe como um código similar seria realizado usando JavaScript quando comparado
com a versão em jQuery:
/* JavaScript */
/* jQuery */
$('conteudo').text('Olá mundo');
Por isso, o lema do jQuery é “write less, do more”, que pode ser traduzido em “escreva
menos, faça mais”.
Um seletor precedido por # indica a busca por um ID. Se for precedido por um ponto,
será uma classe. Caso desejemos usar uma tag, basta colocar o seu nome:
1. $('body')
2. $('.minhaClasse')
3. $('#meuID')
Assimile
Seletores avançados
Até o momento abordamos apenas seletores simples, como nome da tag, ID e classe.
Entretanto, existem seletores que permitem buscas mais eficientes, como selecionar
elementos pai e filho, ou elementos que apresentam determinado atributo. Como
poderíamos selecionar um elemento que apresenta o atributo data-bs-
toggle="dropdown" e alterar a sua cor de fundo para vermelho?
Caso você utilize um comando jQuery antes do carregamento da biblioteca, você obterá
a seguinte mensagem:
Essa frase poderia ser traduzida como “erro de referência não detectado: $ não está
definido”. Isso ocorre porque o navegador não consegue reconhecer comandos iniciados
com $ nativamente. Apenas quando a biblioteca jQuery é completamente iniciada, esse
comando passará a ser reconhecido. Importa destacar que é recomendado que o script
jQuery seja declarado dentro da tag <head>.
Além disso, antes de executar qualquer script com jQuery é importante verificar se o
documento está “pronto”, isto é, se todo o conteúdo foi corretamente carregado. Foi
realizado algo similar usando JavaScript puro, quando usamos a função que verificava
se a página já havia sido carregada.
$( document ).ready(function() {
console.log( "Pronto!" );
});
Mas pode-se utilizar a forma reduzida:
$(function() {
console.log( "Pronto!" );
});
Navegar pelo DOM e alterar propriedades CSS usando JavaScript puro pode requerer
que você digite uma grande quantidade de código. A biblioteca jQuery fornece soluções
para facilitar isso. Você pode facilmente alterar estilos e atributos de elementos HTML
usando os métodos do jQuery (Quadro 3.11).
Classe Descrição
.innerHeight() Obtém a altura interna atual (incluindo preenchimento, mas não borda).
.innerWidth() Obtém a largura interna atual (incluindo preenchimento, mas não borda).
Obtém a posição horizontal atual da barra de rolagem. Pode ser usada ainda
.scrollLeft() para definir a posição horizontal da barra de rolagem para cada elemento
correspondido.
.scrollTop() Obtém a posição vertical atual da barra de rolagem. Pode ser usada ainda para
definir a posição vertical da barra de rolagem para cada elemento
correspondido.
Suponhamos que você deseja usar o jQuery para alterar a cor de fundo de uma página.
$(function(){
$('body').css('backgroundColor','black');
});
Observe que o método .css( ) requer dois parâmetros: a propriedade a ser alterada e o
valor que a propriedade receberá. Nesse exemplo, a propriedade alterada foi
background-color (note que aqui você pode usar tanto backgroundColor
quanto background-color). O valor aplicado a essa propriedade foi black (preto).
<div id='caixa'></div>
<script>
$(function(){
$('#caixa').css('background-color','green');
$('#caixa').height('400px');
$('#caixa').width('400px');
$('body').css('background-color','black');
});
</script>
Fonte: elaborado pelo autor.
O código apresentado cria uma divisão div quadrada chamada caixa, que receberá a cor
de fundo verde, uma altura de 400px e uma largura de 400px, além disso, a cor de fundo
será alterada para preto (Figura 3.37).
Figura 3.37 | Utilização do CSS para alterar cores e tamanhos de elementos
Eventos
jQuery também fornece uma série de métodos para facilitar o uso de eventos JavaScript.
Eventos englobam comportamentos relacionados à interação entre usuário e sistema. Na
prática podem ser desde um clique do mouse em um determinado botão até quando uma
determinada tecla é pressionada. O método ready( ), por exemplo, determina que uma
função será executada quando o DOM for completamente carregado.
Eventos de cursor
Muitos desses métodos funcionam de maneira similar, porém com pequenas diferenças
relacionadas a seu uso. Para verificar, consulte MDN Web Docs ([s.d.]).
Eventos do teclado
Esse tipo de evento é acionado quando o teclado é utilizado. No JavaScript temos como
exemplo o evento onkeypress (quando uma tecla é pressionada). jQuery também fornece
maneiras de manipular eventos (FERREIRA, 2020). Há três principais métodos:
Eventos de formulários
Uma lista com todos os eventos pode ser consultada em jQuery (c2021d).
Exemplificando
Vamos ver na prática como os eventos podem ser utilizados em combinação com as
propriedades de alteração do CSS. O código a seguir constrói uma página HTML como
um simples botão e um quadrado vermelho logo a seguir. Vamos utilizar jQuery para
que identifique um evento de clique no botão e altere a cor do quadrado para azul:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<title>jQuery</title>
<style>#caixa{ height:100px; width:100px; background-color:red; margin-top:
10px; }</style>
</head>
<body>
<div id='caixa'></div>
<script>
$(function(){
$('#botao').click(function(){
$('#caixa').css('background-color','blue');
});
});
</script>
</body>
</html>
Fonte: elaborado pelo autor.
Agora observe na prática o que ocorre ao clicar no botão “Clique aqui” (Figura 3.38):
Perceba que a forma como os parênteses e chaves são adicionados às vezes pode gerar
dúvidas. Para tentar melhorar isso, no código a seguir vamos colorir da mesma cor cada
elemento relacionado:
$(
function(){
$( [ SELETOR ] ) . EVENTO (
function(){
);
);
Fonte: elaborado pelo autor.
Por exemplo, note que a função declarada na linha 2 é fechada na linha 8. Enquanto
isso, a função aberta na linha 4 é fechada na linha 6. Observe que o encerramento de
parênteses deve ser procedido de ponto e vírgula, mas o fechamento de chaves não.
Veja, ainda, que a quebra de linhas dentro de parênteses não interfere na execução do
código.
$('#caixa').hover(function(){
$('#caixa').css('background-color','green');
});
Neste caso, podemos utilizar a função hover. Assim, ao remover o cursor do mouse da
caixa, a caixa volta a ser verde. Podemos também adicionar um novo evento que deve
colorir a cor da caixa de roxo, caso o cursor do mouse tenha sido colocado sobre ela e
depois removido. Veja:
$('#caixa').mouseout(function(){
$('#caixa').css('background-color','purple);
});
Bootstrap JavaScript
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/
bootstrap.min.css" rel="stylesheet" integrity="sha384-
giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1
" crossorigin="anonymous">
<title>Bootstrap JS!</title>
</head>
<body>
<h1>Olá mundo!</h1>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js
"
integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65K
gf80OJFdroafW" crossorigin="anonymous"></script>
</body>
</html>
Fonte: elaborado pelo autor.
A partir desse modelo, você pode elaborar alguns exemplos de uso para o Bootstrap
JavaScript. Aprenda, a seguir, com o exemplo dos menus suspensos.
Menu suspenso
Muitas vezes, ao construir um menu de um site, você tem uma quantidade maior de
links do que o espaço disponível. Uma solução é adicionar um menu suspenso, o qual,
quando o usuário clicar no botão, o navegador exibirá abaixo ou acima uma lista com
outros links. Observe o exemplo de menu suspenso da Figura 3.39 a seguir:
<div class="dropdown">
</button>
</ul>
</div>
Fonte: elaborado pelo autor.
O Bootstrap utiliza classes para indicar ao navegador quais ações serão realizadas.
Nesse caso, o botão criado deve ser precedido de uma div, que deve apresentar a classe
dropdown. Essa classe indica que se trata de um menu suspenso. Observe também que o
botão (tag button) tem as classes btn e btn-secondary (responsáveis por aplicar o estilo
do botão e a cor cinza), além da classe dropdown-toggle, que insere a seta que aponta
para baixo no final do botão. Para que o menu suspenso funcione, o atributo data-bs-
toggle="dropdown" é necessário. Já o atributo aria-expanded recebe false quando o
menu está oculto e true quando o menu é clicado.
Os links que queremos inserir no menu suspenso devem ser adicionados dentro de um
elemento <ul> que deve receber a classe dropdown-menu. Cada link deve ser
adicionado dentro de um elemento do tipo <li>, e pode ser um <button> ou um <a>,
desde que receba a classe dropdown-item.
Modal
Modals são caixas de diálogos usadas para exibir informações. Sua funcionalidade pode
ser comparada às caixas de alertas exibidas ao executar o comando alert() do JavaScript.
Entretanto, elas apresentam um design mais atrativo, em especial devido às animações
de entrada e saída e ao efeito lightbox, quando o fundo é levemente escurecido dando
destaque à caixa de diálogo (Figura 3.41).
</button>
<div class="modal-content">
<div class="modal-header">
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
Fonte: elaborado pelo autor.
1. data-bs-toggle="moda"
2. data-bs-target="#modal-exemplo"
Além disso, o elemento que receberá o modal pode ser composto por três partes
principais:
Esses elementos deverão ser parte de uma div que deve receber a classe modal-dialog e
de outra div que deve receber a classe modal-content.
Reflita
Você pode consultar o site do Bootstrap e pensar nas possíveis alterações desse código
(BOOTSTRAP, [s.d.]).
Carrossel de imagens
Nesse exemplo, você pode clicar nas setas para alterar a imagem atual ou aguardar um
tempo até ela ser trocada automaticamente (isso dependerá de o navegador oferecer
suporte). É possível ver que a div container, colorida de preto para melhor visualizar os
marcadores, tem uma largura maior do que a imagem. Essa escolha foi realizada para
incluir o título definido para a imagem e a descrição.
Single-page applications
Como já pudemos observar, uma aplicação web pode apresentar muitas páginas. Além
disso, as folhas de estilo surgiram para melhorar a performance, separando conteúdo e
estilo em arquivos separados. Assim, vários arquivos relacionados a conteúdo podem
utilizar um mesmo estilo (Figura 3.43).
Assim, quando o usuário do seu site navegar, por exemplo, da página 1 para a página 2,
o sistema não precisa carregar novamente o estilo, reduzindo a necessidade de transferir
os códigos de estilo do servidor para o cliente.
Exemplificando
Observe nas estruturas HTML que, ao navegar da página 1 para a página 2, o estilo
utilizado é o mesmo e, além do estilo, as tags utilizadas também são as mesmas.
Considere como exemplo o Quadro 3.12.
Quadro 3.12 | Compare os dois códigos: a única mudança ocorre na div “conteudo”
Página 1 Página 2
Nesse caso, apenas uma requisição da página completa foi feita ao servidor, logo temos
uma única página carregada. Assim, ao navegar por esse site, você não tem uma
mudança real de página, mas uma simples troca de parte do conteúdo. Em
desenvolvimento web, isso é denominado de single-page applications.
Reflita
Nos últimos anos, frameworks JavaScript têm mudado a maneira pela qual uma
aplicação web é estruturada, focando estratégias que melhorem a performance de um
site. Um exemplo é o AngularJS, um framework JavaScript proposto pela Google para
construção de documentos web single-page. Observe a seguir um exemplo retirado do
site oficial (ANGULARJS, 2018) demonstrando como o AngularJS funciona.
<!DOCTYPE html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></
script>
</head>
<body>
<div>
<label>Name:</label>
<hr>
<h1>Hello {{seuNome}}!</h1>
</div>
</body>
</html>
Fonte: ANGULARJS (2018, [s.p.]).
Neste momento, não é necessário conhecer os detalhes desse código, pois o framework
AngularJS não será aprofundado agora. O objetivo é apenas demonstrar como o
framework age em conjunto com os códigos HTML: utilizando atributos para detectar
elementos do DOM ( como ng-model) e marcações para definir onde os dados serão
inseridos (como {{seuNome}}). AngularJS foi encerrado em 2016 (essa versão foi
considerada a 1.x) e substituído pelo framework Angular (2021), que utiliza a
linguagem TypeScript no lugar de JavaScript.
Por isso, o uso de estratégias híbridas é fundamental para construção de sites mais
robustos e capazes de se manterem on-line por mais tempo mesmo recebendo grandes
quantidades de acessos. Nesse caso, diversas tecnologias podem ser combinadas, como
frameworks que melhoram a performance ou que reduzam os custos de processamento
de servidores ou o tráfego na rede. Importa destacar que quando falamos em grande
quantidade de acessos, não estamos falando em receber entre 1 a 10 mil usuários
visitantes ao mesmo tempo, mas, sim, de manter on-line dezenas de milhares a milhões
de usuários simultaneamente. Para sites que não necessitam de suporte a tantos acessos
em paralelo – ou seja, a grande maioria dos sites na internet –, o modelo tradicional de
desenvolvimento, composto de HTML, CSS e JavaScript, atende às necessidades.
Páginas dinâmicas
Páginas estáticas:
o Conteúdo fixo
Páginas dinâmicas:
Para que o servidor web funcione é necessária uma linguagem de programação para
realizar os processamentos que construirão essa página dinâmica. Lembre-se de que
chamamos de front-end as linguagens que executam no cliente (como JavaScript).
Assim, as linguagens que executam no servidor são denominadas back-end.
Caro aluno, até aqui você conheceu vários frameworks Javascript e agora já pode
escolher o seu preferido e desenvolver sua aplicação Javascript. Mãos à obra!
Pesquise mais
Caro aluno, seguem algumas sugestões de materiais que podem complementar seu
aprendizado:
Sites:
o jQuery site official (OPENJS FOUDANTION, [s.d.]).
o Sheet cheat jQuery: (ÓSCAR OTERO, [s.d.]).
Videoaulas:
REFERÊNCIAS
CAROUSEL (Bootstrap). [S.l., s.n.], 2017. 1 vídeo (10 min. 23 seg.). Publicado pelo
canal Diego Mariano. Disponível em: https://bit.ly/3ez7iJ0. Acesso em: 28 fev. 2021.
MDN WEB DOCS. Elements. Events. MDN Web Docs Mozilla, [s.d.]. Disponível em:
https://mzl.la/3ey2sMc. Acesso em: 28 fev. 2021.
MODAL (Bootstrap). [S.l., s.n.], 11 out. 2017. 1 vídeo (8 min. 41 seg.). Publicado pelo
canal Diego Mariano. Disponível em: https://bit.ly/3bClvD8. Acesso em: 28 fev. 2021.
BIBLIOTECAS E FRAMEWORKS
JAVASCRIPT
Diego César Batista Mariano
Execute essa atividade com base nos seus conhecimentos sobre modal Bootstrap.
Fonte: Shutterstock.
<div class="modal-content">
<div class="modal-header">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form>
<div class="row">
<div class="col-12">
<label>Plano</label>
<select class="form-control" id="nomePlano" disabled>
</select>
</div>
</div>
<label>Nome</label>
</div>
<label>Telefone de contato</label>
</div>
</div>
<div class="form-group">
<label>Endereço</label>
</div>
<div class="form-row">
<label>Cidade</label>
<input type="text" class="form-control" id="cidade">
</div>
<label>Estado</label>
<option></option>
<option value="AC">Acre</option>
<option value="AL">Alagoas</option>
<option value="AP">Amapá</option>
<option value="AM">Amazonas</option>
<option value="BA">Bahia</option>
<option value="CE">Ceará</option>
<option value="GO">Goiás</option>
<option value="MA">Maranhão</option>
<option value="PA">Pará</option>
<option value="PB">Paraíba</option>
<option value="PR">Paraná</option>
<option value="PE">Pernambuco</option>
<option value="PI">Piauí</option>
<option value="RO">Rondônia</option>
<option value="RR">Roraima</option>
<option value="SE">Sergipe</option>
<option value="TO">Tocantins</option>
<option value="EX">Estrangeiro</option>
</select>
</div>
<label>CEP</label>
</div>
</div>
</div>
<div class="form-check">
<label class="form-check-label">
</label>
</div>
</div>
</form>
<div class="modal-footer">
</div>
</div>
</div>
Fonte: elaborado pelo autor.
Agora observe o Código 3.53. Ele contém os scripts construídos para manipular o
estado dos botões e campos de seleção, os quais são detalhados nos comentários dentro
do código:
<script>
// esta função é necessária para remover a seleção caso o usuário clique em vários
planos
function removeSelecao(){
$('#o-alfa').removeAttr('selected');
$('#o-beta').removeAttr('selected');
$('#o-gama').removeAttr('selected');
$('#o-delta').removeAttr('selected');
$('#o-omega').removeAttr('selected');
$(function(){
$('#termos').click(function(){
$('#assinarbtn').removeAttr('disabled');
$('#termos').attr('disabled','');
});
$('#alfa').click(function(){
removeSelecao();
$('#o-alfa').attr('selected','');
});
$('#beta').click(function(){
removeSelecao();
$('#o-beta').attr('selected','');
});
$('#gama').click(function(){
removeSelecao();
$('#o-gama').attr('selected','');
});
$('#delta').click(function(){
removeSelecao();
$('#o-delta').attr('selected','');
});
$('#omega').click(function(){
removeSelecao();
$('#o-omega').attr('selected','');
});
});
</script>
Fonte: elaborado pelo autor.
Não pode faltar
Introdução a PHP
Ely Fernando do Prado
Fonte: Shutterstock.
Convite ao estudo
Caro aluno, você já observou como a maioria dos sites hoje em dia muda o seu
conteúdo dinamicamente? A estrutura e layout permanecem os mesmos, mas o conteúdo
muda constantemente. Sites como o Facebook, por exemplo, atualizam o seu conteúdo
quase que em tempo real. Plataformas de e-commerce exibem produtos diferentes de
acordo com o histórico de navegação e preferências do usuário. É como se houvesse
páginas HTML sendo criadas o tempo todo, para que a cada acesso elas estivessem
sempre atualizadas para o usuário visualizar novas informações. Na verdade, a “magia”
por trás dessas páginas que são atualizadas constantemente é uma linguagem de
programação capaz de processar e criar páginas dinâmicas a cada acesso, as quais são
processadas do lado do servidor. Dentre as linguagens de programação para esse fim,
uma das mais utilizadas é o PHP, o qual se destaca pela sua facilidade de uso e uma
ampla comunidade de desenvolvedores ativos. Caro aluno, nesta unidade você
aprenderá como criar páginas dinâmicas utilizando a linguagem PHP. Na Seção 1 serão
apresentados os fundamentos de PHP, incluindo os conceitos de variáveis, funções e
estruturas da linguagem, além de apresentar a incorporação do código PHP aos arquivos
HTML. Na Seção 2 são apresentados conceitos mais aprofundados acerca da linguagem
PHP, bem como a manipulação de arquivos, a qual permite o upload, a criação, cópia e
leitura de arquivos no servidor. Por fim, a última seção é dedicada a uma utilização de
banco de dados dentro de aplicações web com PHP, além da utilização de sessões e
cookies para autenticação de usuários.
Páginas dinâmicas para internet são muito mais comuns do que você imagina. O fato de
ser dinâmica significa que o seu conteúdo é alterado e gerado dinamicamente de acordo
com os critérios definidos pelo programador. É assim que sites de e-commerce
conseguem apresentar produtos diferentes a cada acesso, também é assim que sites de
notícias mantêm seu conteúdo sempre atualizado e redes sociais oferecem ao usuário
texto e imagens direcionadas a ele. Para isso, é necessário utilizar uma linguagem de
servidor, como o PHP. Nesta seção será apresentada a linguagem de programação PHP,
desde seus conceitos fundamentais até a sua interação com as páginas web e
formulários. Será abordada a utilização de variáveis, operadores, constantes e funções,
além das expressões e fluxos de controle do PHP. Esses conhecimentos são de suma
importância para desenvolvedores de aplicações web, visto que hoje em dia não há
como pensar no desenvolvimento de um site sem que haja algum conteúdo dinâmico. A
linguagem PHP conta com muitos desenvolvedores no mundo todo, e diversas empresas
estão à procura de profissionais capacitados nessa linguagem para manter e desenvolver
desde pequenos sites até mesmo grandes plataformas para internet. Se há alguma dúvida
quanto à capacidade e robustez da linguagem PHP, basta observar que a maior rede
social do mundo, o Facebook, foi desenvolvida utilizando a linguagem PHP como sua
base principal, sofrendo alterações na sua infraestrutura, porém mantendo sua relação
direta com essa poderosa linguagem de programação. Devido sua popularidade e
facilidade de uso, o PHP se tornou a linguagem de programação com maior número de
servidores de hospedagem ativos ao redor do mundo, e é muito fácil encontrar um
servidor PHP gratuito para hospedar suas aplicações. Dessa forma, vamos aprender com
exemplos práticos como programar páginas web dinâmicas utilizando PHP.
O site deverá conter uma aplicação PHP que calcula e exibe qual é o valor gasto na
viagem caso abasteça com etanol e o valor gasto caso abasteça com gasolina.
Considerando que o etanol é um combustível que é consumido mais rápido, mas que
normalmente costuma ser mais barato. Considere que o veículo em questão faz 9 km
com 1 litro de etanol e 11 km com 1 litro de gasolina. Portanto para, por exemplo, saber
a quantidade de etanol gasto em uma viagem de 20 km, deve-se efetuar o seguinte
cálculo: etanol = 20/11. E para saber a quantidade de gasolina gasta em uma viagem de
mesma distância deve-se efetuar o seguinte cálculo: 20/9. Após calcular a quantidade
gasta de cada combustível, multiplique essa quantidade pelo preço do litro do
combustível digitado pelo usuário no formulário. Com isso, mostre ao usuário qual dos
tipos de combustível tem melhor custo-benefício.
conceito-chave
Caro aluno, PHP (um acrônimo recursivo para PHP, Hypertext Preprocessor) é uma
linguagem de script muito utilizada para o desenvolvimento web. Ela é uma linguagem
open source, ou seja, de código aberto, a qual pode ser utilizada de maneira gratuita até
mesmo para a criação de plataformas comerciais.
A primeira versão do PHP foi criada em 1994 por Rasmus Lerdof, o qual liberou o
código fonte para o público em 1995 permitindo uma significativa adoção pela
comunidade de desenvolvedores. Em 1996 foi lançada a versão 2.0 do PHP, incluindo
suporte ao acesso à banco de dados. Em 1998, ainda nos primórdios da internet, já havia
mais de 60 mil sites utilizando a linguagem PHP, e no final deste mesmo ano foi
lançada a versão 3.0 da linguagem totalmente reescrita e aprimorada. No ano de 2000
foi lançada a versão 4.0 do PHP, ganhando ainda mais apoio da comunidade e
aumentando o número de servidores espalhados pelo mundo. A versão 5.0 foi
disponibilizada no ano de 2004, alcançando a marca de centenas de milhões de
servidores hospedando páginas PHP. A versão 5.x do PHP foi tão popular que se
manteve ativa até o ano de 2019, recebendo diversas atualizações. Sua principal
novidade foi ao suporte aprimorado ao paradigma de Programação Orientada a Objetos.
Por se tratar de um software de código aberto, a comunidade de desenvolvedores foi
incrementando a linguagem ao longo do tempo, e todas as features (recursos)
planejados para o PHP 6.0 acabaram sendo implementados nas ramificações da versão
5.x, chegando ao ponto que não faria mais sentido lançar uma versão 6.0. Portanto, em
2015, a linguagem PHP teve um salto, passando para a versão 7.0 que é mantida até os
dias atuais com suas ramificações 7.x.
O que chama a atenção no PHP é o fato de ser processado do lado do servidor, ou seja,
o cliente (usuário final que deve acessar a página utilizando o navegador) não consegue
enxergar o código PHP, pois este já foi processado no servidor de hospedagem,
diferentemente da linguagem JavaScript, que é interpretada no navegador o usuário.
O código PHP fica dentro da página HTML, podendo em um mesmo arquivo intercalar
entre os código HTML, CSS e JavaScript e o código PHP. Para que isso ocorra é
importante demarcar quando o código PHP inicia e quando ele finaliza. Essa marcação é
dada por meio das TAGs “<php" para abertura do código php e "?>" para fechamento,
conforme este exemplo:
Neste caso foi utilizado o comando “echo”, que é responsável por imprimir um texto
diretamente na página html. A forma apresentada é a padrão e mais utilizada de se
incorporar código PHP dentro do HTML, porém existem outras formas, sendo que
algumas delas dependem da sua configuração e ativação no servidor para que
funcionem. As outras formas de se incorporar código PHP ao HTML são as seguintes:
<!DOCTYPE HTML>
<html>
<head>
<title>Exemplo</title>
</head>
<body>
<h1>
</h1>
<?php
?>
<?php
?>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
<title>Exemplo</title>
</head>
<body>
<h1>
</h1>
<p>Olá, mundo!</p>
</body>
</html>
Exemplificando
Assim, podemos observar que o código PHP foi processado do lado do servidor,
transferindo para o cliente apenas o resultado desse processamento. Para executar
páginas PHP você precisa de um servidor. Existem milhares de servidores na internet
compatíveis com PHP, alguns deles são 000webhost (2021) e Hostinger (2021), entre
outros. Também existem plataformas em nuvem que oferecem serviço de hospedagem
de aplicações PHP, como Amazon (2021), Google Cloud (2021) e Microsoft Azure
(2021). Existe ainda a possibilidade de instalar um servidor PHP no seu próprio
computador e ter a facilidade de testar suas páginas sem precisar de internet. Se você
utiliza Windows pode instalar o WampServer ([s. d.]), um pacote que inclui o Apache,
MariaDB e PHP para Windows. Outra opção de pacote de instalação gratuita e
facilitada de servidor local PHP é o BitNami WAMPStack (2021). São tantas opções
que é natural, no início, haver dúvidas a respeito de qual servidor usar.
Para aprender uma linguagem de programação é importante que você entenda sua
sintaxe. É importante também adicionar comentários nos seus códigos para facilitar a
compreensão futura. Para adicionar comentário de uma linha com PHP você pode
utilizar os símbolos // ou # no início da linha, ou pode fazer comentários em bloco
adicionando o símbolo /* para abrir o comentário e */ para finalizar o comentário.
<?php
$idade = 64;
echo $nome;
echo "<br/>";
//imprime o conteúdo da variável $idade
echo $idade;
?>
PHP é uma linguagem case sensitive, ou seja, faz diferenciação entre letras maiúsculas e
minúsculas. Portanto, uma variável com o nome $telefone é diferente da variável
$Telefone. Para trabalhar com os nomes de variáveis, você precisa ainda respeitar as
seguintes regras:
Uma característica interessante do PHP é o fato de que se pode utilizar tanto aspas
simples como aspas duplas para demarcar textos. Porém, quando se usa aspas duplas,
caso exista alguma variável dentro do texto, é impresso o valor desta variável. Já
quando se usa aspas simples, é impresso exatamente o valor literal dentro das aspas,
incluindo o nome da variável. É possível ainda concatenar um texto, imprimindo uma
sequência de caracteres concatenada a uma variável por meio do símbolo de ponto final.
Ao contrário de variáveis, que podem variar o seu valor, existem as constantes, que não
podem ter seu valor alterado. As constantes são declaradas pelo comando define, úteis
para guardar valores fixos, com o valor de PI. No Código 4.4 a seguir é apresentado um
exemplo de utilização de variáveis e constantes:
<?php
//declara variável
//declara a constante PI
define("PI", 3.141592654);
echo PI;
?>
<?php
echo "<br/>";
echo "<br/>";
echo "<br/>";
?>
Fonte: elaborado pelo autor.
Adição: +
Subtração: -
Multiplicação: *
Divisão: /
Módulo (resto da divisão): %
Como exemplo, considere que uma loja dá 10% de desconto para vendas à vista, e que
se deseja calcular o valor total de uma compra, o valor de desconto e o valor de troco.
No código PHP apresentado no Código 4.6 a seguir, esse cálculo é realizado com base
nos dados do valor unitário, a quantidade e o valor pago por um produto qualquer.
<?php
//declara as variáveis
$valorUnitario = 10.50;
$quantidade = 3;
$valorPago = 100;
?>
Fonte: elaborado pelo autor.
Assimile
Trabalhar com linguagens de programação para internet não é algo tão simples quando
se trata de operações mais complexas. Nós exemplificamos uma situação em que o
usuário deseja saber o preço final do produto, valor do desconto e valor do troco.
Porém, no exemplo que foi dado, nós colocamos os valores fixos nas variáveis. Para
permitir que o usuário digite os dados de entrada é necessário que você crie duas
páginas, uma para o formulário e outra para resposta. O formulário é a principal forma
para permitir a entrada de dados pelo usuário, e é formada pela TAG HTML “<form>”
seguido por dois atributos:
action: determina o nome do arquivo php que receberá os dados digitados pelo
usuário.
method: determina o método de envio e pode ser “post” ou “get”. O método
‘get’ expõe os dados digitados pelo usuário na barra de endereços do navegador.
O método ‘post’, por sua vez, envia os dados no corpo da requisição HTTP, não
exibindo os dados enviados na barra de endereços.
Para permitir que o usuário entre com dados é necessário criar dentro do formulário
elementos do tipo “input”. Esses elementos apresentam o atributo “name”, que faz a
identificação do campo para envio dos dados e o atributo “type”, que define o tipo de
entrada, podendo ser do tipo “text” para entrada de texto, “radio” para escolha de um
valor ou “checkbox“ para selecionar um valor, e “submit”, que faz um botão capaz de
enviar os dados digitados para o servidor, redirecionando para página definida no
elemento “action”. Observe o código HTML apresentado no Código 4.7, que contém
um formulário em que o usuário pode digitar o valor unitário de um produto, a
quantidade e o valor pago:
<html>
<body>
Formulário:
Valor Unitário:
<br/>Quantidade:
</form>
</body>
</html>
<?php
//página de resposta
?>
Note que o método do formulário é do tipo “post”. Este tipo de método encapsula os
dados que são enviados para a outra página, não os mostrando no endereço da página de
resposta, e os seus valores são enviados para o PHP por meio do array
$_POST[“nome_do_input”]. Dessa forma, o valor total é obtido pela multiplicação dos
atributos $_POST[“valorUnitario”] e $_POST[“quantidade”].
Igual: ==
Diferente: != ou <>
Menor que: <
Maior que: >
Menor ou igual que: <=
Maior ou igual que: >=
Pode-se ainda utilizar os operadores lógicos para combinar condições, como o operador
E (&& ou and) que é verdadeira apenas se as duas condições forem verdadeiras, e o
operador OU (|| ou or), que retorna verdadeiro caso uma das condições forem
verdadeiras. No Código 4.9 a seguir pode-se observar a utilização da estrutura
condicional e seus operadores. No exemplo foram declaradas as variáveis nota = 7 e
faltas =30.
<?php
$nota = 7;
$faltas = 30;
echo "aprovado";
} else {
//como a variável $faltas possui um valor maior que 20, ele irá
echo "reprovado";
?>
<?php
//mostra a tabuada de 7
$num = 7;
//estrutura de repetição
$r = $i * $num;
?>
<?php
$num = 1;
//estrutura de repetição
//que executa enquanto a
while($num < 50 ) {
$num = $num + 2;
?>
Reflita
PHP é uma linguagem que teve grande evolução ao longo dos anos, com a adição de
várias funcionalidades e recursos. Neste material foram apresentadas as seguintes
estruturas do código PHP: if, while e for. Mas existem outras estruturas que podem ser
utilizadas para determinar condições ou repetições?
Atenção
Até o momento, todos os códigos foram executados em uma única página pela
plataforma Paiza.io. Porém, há casos em que desejamos executar uma aplicação web
mais complexa, formada por várias páginas. Para isso, pode-se utilizar a plataforma
PaizaCloud (c2014), a qual fornece um ambiente mais completo e robusto. Conta com
uma licença gratuita e o seu servidor pode ser utilizado por um tempo limitado a 4
horas.
Entrada de dados
Reflita
A entrada de dados por parte do usuário se dá por elementos HTML do tipo INPUT.
Utilizamos o tipo dos inputs como TEXT. Será que existem outros tipos que inputs que
podem ser utilizados com html?
Observe na Figura 4.4 que foram criados dois arquivos, um para formulário e outro para
o processamento e exibição dos dados. Formulários que utilizam o método “get” enviam
seus dados para o array do PHP $_GET[“nome_do_input”], enquanto formulários que
utilizam o método “post” enviam seus dados para o array
Text$_POST[“nome_do_input”]. Nesse exemplo é importante relembrar que o
formulário html é composto pela TAG , <form action=”segunda.php”
method=”get"> em que o parâmetro “action” determina a página que deverá receber e
processar os dados digitados pelo usuário, enquanto o parâmetro “method” determina a
forma como esses dados serão enviados, podendo ser “get” ou “post”. No Código 4.8 é
mostrado um exemplo utilizando a tag <input>, , ao inserir os parâmetros type=”text”,
indica que será adicionado um elemento de caixa de texto para entrada de dados, e o
parâmetro type=”submit” indica que será adicionado um botão capaz de executar a ação
do formulário, submetendo os dados digitados pelo usuário para a página indicada no
parâmetro “action” do formulário, conforme pode ser observado no Código 4.12 a
seguir:
<html>
<body>
Nome:
<br/>Idade:
</form>
</body>
</html>
<html>
<body>
<?php
</body>
</html>
<body>
<h1>Nutricionista Online</h1>
Altura:
<br/>Peso:
</form>
</body>
</html>
<?php
/* declara uma variável chamada $imc, a qual receber o peso dividido pela altura *
altura digitados pelo usuário no formulário anterior */
/*faz uma estrutura condicional em que determina o estado do imc de acordo com as
regras apresentadas no enunciado*/
if ($imc<18.5) {
?>
Saiba mais
As instruções de programação PHP são inseridas dentro dos arquivos HTML, podendo
conter, além de código HTML puro e simples, um conjunto de instruções CSS e de
JavaScript. Essa mistura de linguagens pode parecer confusa para quem não está
ambientado, portanto justifica-se treinar um pouco essa mescla de tecnologias e deixar
bem claro o que cada uma faz. No exemplo a seguir, em um mesmo arquivo são
utilizados trechos de código HTML, CSS, JavaScript e PHP:
<html>
<head>
<title>
Exemplo
</title>
<style>
body {
background-color: lightblue;
h1 {
color: darkgreen;
text-align: center;
</style>
</head>
<body>
<h1>Exemplo de HTML</h1>
<?php
?>
<script>
alert("Código Javascript");
</script>
</body>
</html>
Pesquise mais
Referências
AWS. Comece a criar com a AWS ainda hoje. Amazon, 2021. Disponível em:
https://aws.amazon.com/. Acesso em: 28 fev. 2021.
BABIN, L. Ajax com PHP: do iniciante ao profissional: crie poderosos aplicativos web
interativos utilizando a força de Ajax e PHP. Rio de Janeiro: Alta Books, 2007. 208 p.
ISBN 9788576081463.
MILANI, A. Construindo aplicações web com PHP e MySQL. São Paulo: Novatec,
2010. 336 p. ISBN 9788575222195.
ZERVAAS, Q.; LIMA, E. C.; KINOSHITA, L. Aplicações práticas de web 2.0 com
PHP. Rio de Janeiro: Alta Books, 2009. 521 p. ISBN 9788576083269.
FOCO NO MERCADO DE TRABALHO
INTRODUÇÃO A PHP
Ely Fernando do Prado
Para a codificação de uma aplicação em páginas web é importante identificar quais são
as entradas (dados que o usuário deverá inserir), quais são as saídas (resultados
esperados) e quais são os valores internos que serão utilizados para produzir as saídas
com base nas entradas.
Fonte: Shutterstock.
Para ampliar sua visão acerca das possibilidades de aplicação dos conhecimentos
obtidos até este momento, vamos retomar a situação-problema apresentada no início
desta seção. Uma empresa deseja desenvolver um sistema web para facilitar a decisão
em relação ao tipo de combustível cujo uso é mais compensatório: etanol ou gasolina.
Sempre que forem apresentados problemas dessa natureza é importante identificar quais
são as entradas (dados que o usuário deverá inserir), quais são as saídas (resultados
esperados) e quais são os valores internos que serão utilizados para produzir as saídas
com base nas entradas. Nesse caso podemos identificar os seguintes elementos:
Depois de identificar esses elementos fica mais fácil codificar o seu site. Observe o
código do formulário para entrada de dados:
<html>
<body>
<h1>Combustível</h1>
Distância:
<br/>Preço etanol:
<br/>Preço gasolina:
</form>
</body>
</html>
Para processar os dados deve-se primeiramente ler os dados enviados pelo formulário
com o vetor $_POST. Em seguida, deve-se efetuar os cálculos para saber a quantidade
de combustível gasto e depois a multiplicação pelo valor de cada combustível, conforme
mostrado a seguir:
<?php
$distancia = $_POST["distancia"];
$precoEtanol = $_POST["precoEtanol"];
$precoGasolina = $_POST["precoGasolina"];
if ($gastoEtanol<$gastoGasolina) {
} else {
?>
Como esse exercício necessita de dois arquivos de código PHP trabalhando em conjunto
(um para o formulário e outro para processar a resposta), deve-se executá-lo em um
servidor configurado no computador ou, então, na plataforma on-line PaizaCloud
(c2014), conforme mostrado na Figura 4.6.
As funções são importantes para deixar o código mais limpo e organizado, além de
facilitar na manutenção futura do código e sua reutilização.
Fonte: Shutterstock.
Você já deve ter percebido o quanto a linguagem PHP é rica e oferece recursos para
desenvolvimento de aplicações web complexas. Mas algo que ainda não foi explorado é
a quantidade de funções que o PHP oferece, as quais são extremamente úteis para
oferecer ao desenvolvedor atalhos para diversas funcionalidades. Em vez de o
programador ter que codificar do zero tudo o que ele precisa, ele pode utilizar funções
prontas que facilitam o desenvolvimento e deixam o código mais limpo. Formatar as
casas decimais de um número, substituir uma parte de um texto e verificar se uma data é
válida são exemplos de funções oferecidas pela linguagem PHP, as quais serão
apresentadas juntamente com muitas outras nesta seção. Contudo, muitas vezes é
necessário criar nossas próprias funções, e isso também será apresentado e
exemplificado de forma que você será capaz de deixar seu código muito mais
organizado. Por fim, outro recurso importante tratado nesta seção é a manipulação de
arquivos, a qual permite que você possa armazenar e ler dados do servidor. Considere,
por exemplo, um site de notícias em que há uma área administrativa para os repórteres
postarem conteúdo. Nesse caso, as notícias podem ser armazenadas em arquivos para
que os visitantes do site possam acessar dinamicamente. Outro exemplo são sites de
fórum, em que usuários podem criar tópicos e postar textos, necessitando que esses
textos sejam salvos e posteriormente exibidos de alguma maneira. A maioria dos sites
que acessamos hoje em dia costumam salvar ou ler dados, os quais podem ser realizados
por meio de arquivos.
conceito-chave
Funções
Uma função pode ser definida simplesmente como um bloco de código que pode ser
executado em diversas partes do seu sistema. Caso o algoritmo apresente partes
repetitivas no código, é interessante que se crie uma função, evitando, assim, a
duplicidade desse código. Essa técnica é a principal para se fazer a reutilização de
código, o que torna o seu sistema mais organizado, com código mais limpo e mais fácil
de se dar manutenção.
É possível criar suas próprias funções no PHP definindo o seu nome logo após a palavra
reservada function, além de definir os seus parâmetros e seu valor de retorno. Para o
nome de uma função, você deve seguir as mesmas regras das definições de nomes para
variáveis:
A declaração de uma função pode ser realizada conforme o Código 4.18 a seguir:
<?php
function nome_funcao() {
?>
$m = ($num1 + $num2) / 2;
//mostra a média
echo $m;
echo "<br/>";
media(7,10);
media(3,5);
media(9,7);
?>
As funções ainda podem apresentar um valor de retorno, o qual poderá ser utilizado no
código principal do seu sistema. O retorno de uma função é definido pela palavra
reservada return, que ao ser executada encerra o bloco de código da função e leva o
resultado de retorno para o fluxo principal do seu código. No Código 4.20, observe que
a função calcular_media tem como retorno o resultado do cálculo da média entre dois
números e que logo em seguida esse resultado é passada para a função
mostrar_resultado, a qual exibe o resultado, mas não apresenta retorno algum.
Primeiramente observe o código que cria a função calcular_media, a qual recebe os
valores por parâmetro das variáveis $num1 e $num2:
$m = ($num1 + $num2) / 2;
return $m;
}>
function mostrar_resultado($media) {
if ($media>=6) {
echo "aprovado";
} else {
echo "reprovado";
}>
Por fim, no mesmo arquivo em que foram declaradas as funções é feita a execução
delas. Veja que a variável $media recebe o resultado da função calcular_media, e que
essa função recebe os valores 7 e 10. Depois disso, é executada a função
mostrar_resultado, passando essa média como parâmetro. Observe o exemplo no
Código 4.22.
$media = calcular_media(7,10);
mostrar_resultado($media);
?>
Funções específicas
Além das estruturas básicas que toda linguagem de programação apresenta, existem
funções prontas e específicas que facilitam a vida dos desenvolvedores. Essas funções
costumam prover um conjunto de recursos que até poderiam ser programados
manualmente, mas que reduzem a quantidade de linhas de código porque já estão
prontas para o uso.
<?php
//declara variáveis
$dia = 31;
$mes = 02;
$ano = 2020;
} else {
?>
<?php
//declara variáveis
$data1 = date_create("2020-04-12");
$data2 = date_create("2020-12-25");
?>
<?php
?>
Fonte: elaborado pelo autor.
Outras funções são necessárias para manipular arquivos. A função fwrite tem a
funcionalidade de escrever em um arquivo que foi anteriormente aberto em algum dos
modos de leitura. Ela tem como parâmetro a ponteiro do arquivo aberto, o texto que se
deseja gravar e um parâmetro opcional para especificar o tamanho do conteúdo a ser
gravado. Já a função fclose é capaz de fechar um arquivo aberto, liberando o espaço que
ele estava ocupando na memória. No Código 4.26 a seguir é apresentado um exemplo
de abertura e escrita de conteúdo em um arquivo.
<?php
$arquivo = fopen('meuarquivo.txt','w');
if ($arquivo) {
//fecha o arquivo
fclose($arquivo);
}
?>
Caro aluno, agora que você já sabe gravar um arquivo, vai aprender como se realiza a
leitura de um arquivo. A função fgets é capaz de ler uma linha de um arquivo. Caso
você queira ler o arquivo inteiro, terá que utilizar uma estrutura de repetição lendo linha
a linha do arquivo até chegar ao seu fim. A função que verifica se chegou no fim do
arquivo é a feof e sua utilização pode ser visualizada no exemplo do Código 4.27 a
seguir.
<?php
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo) {
while(!feof($arquivo)) {
fclose($arquivo);
?>
Além de abrir arquivos para leitura e escrita, é possível manipular arquivos copiando,
movendo ou excluindo-os. As principais funções para manipulação de arquivos são as
seguintes:
<?php
?>
Upload de arquivos
<!-- O Nome do elemento input determina o nome enviado para o array $_FILES que
será recebido na página upload.php -->
Arquivo: <input name="userfile" type="file" />
</form>
Reflita
Nesses exemplos deve-se notar que o nome ‘userfile’ se refere ao nome do elemento
input da página anterior. O Código 4.30 apresenta um trecho de código que recebe e
salva o arquivo enviado pelo usuário:
<?php
$uploaddir = '/var/www/uploads/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
?>
Assimile
Uma função definida pelo desenvolvedor pode executar outra e, para isso, basta
escrever o nome da função que se deseja executar seguido por parênteses contendo os
seus argumentos. Mas o que acontece quando uma função executa a si própria? A esse
caso chamamos recursão, o qual permite que uma função execute a si, gerando um laço
de repetição que tende ao infinito. Para prevenir loops infinitos na utilização de
recursão, é importante definir o ponto de parada. No Código 4.31 a seguir é passado por
parâmetro o número 24, que é dividido por 2 e executada a mesma função, passando por
parâmetro o número 12; depois é executada novamente, passando por parâmetro o
número 6. A mesma função vai sendo executada várias vezes até chegar ao ponto de
parada, quando o número não é maior do que 2.
<?php
function recursao($num) {
$metade = $num / 2;
echo $metade;
echo "<br/>";
if ($metade>2) {
//executa a função
recursao($metade);
recursao(24);
//12, 6, 3 e 1.5
?>
Outra função importante no PHP é a Date, a qual recebe por parâmetro um formato que
se deseja exibir a data atual. Esse formato pode ser expresso utilizando uma combinação
de caracteres, destacando-se os seguintes:
<?php
// mostra a data atual no formato dia/mes/ano
echo date('d/m/Y');
echo date('Y');
?>
Exemplificando
Cálculos envolvendo datas são sempre bastante complexos, pois envolvem muitas
verificações. Considere, por exemplo, um caso em que se deseja verificar se um boleto
está atrasado e, com base nessa informação, deve-se calcular o valor a ser pago,
sabendo-se que são aplicados 2% de multa para boletos atrasados, além de 0,5% de
juros por dia de atraso. Dessa maneira teremos que criar variáveis suficientes para a
entrada de dados quando à data de vencimento e o valor do boleto. Como saída, o
código deverá exibir informações acerca da quantidade de dias de atraso, o valor da
multa, o valor de juros e o valor total a ser pago. Considerando essas informações, uma
solução para seria um algoritmo PHP conforme mostrado a seguir. Primeiramente deve-
se declarar as variáveis contendo a data de vencimento e valor. Como faremos cálculo
com data, a variável $vencimento recebe um valor utilizando a função date_create. Essa
função é capaz de declarar uma variável do tipo data, conforme Código 4.33 a seguir.
<?php
$vencimento = date_create("2020-10-01");
$valor = 500;
$hoje = date_create(date("Y-m-d"));
$diasatraso = $diferenca->days;
Por fim, basta fazer uma estrutura de decisão em que, caso a quantidade de dias de
atraso for maior que zero, deve-se calcular o valor da multa (2% do valor original), o
valor de juros (0,5% por cada dia de atraso) e o valor a pagar, que é a soma do valor
original com a multa e os juros. Se a quantidade de dias de atraso não for maior que
zero, significa que o boleto não está atrasado, portanto, basta exibir o valor original do
boleto, como mostra o Código 4.35 a seguir.
if ($diasatraso>0) {
//calcula 2% a multa
} else {
?>
Saiba mais
Armazenar dados em arquivos é uma prática muito útil quando queremos manter e
recuperar informações na nossa aplicação web. Porém, muitas vezes os dados que
desejamos armazenar são complexos e exigem um cuidado maior nas suas tratativas.
Nesses casos recomenda-se utilizar um formato de dados que possa ser recuperado
posteriormente. Um padrão muito utilizado é o JSON (JavaScript Object Notation –
Notação de Objetos JavaScript), um formato simples e leve de formatação de dados.
Para se trabalhar com JSON, a linguagem PHP disponibiliza duas funções muito
importantes:
<?php
$valores = array(1,2,3,4);
$json = json_encode($valores)
$arquivo = fopen('meuarquivo.txt','w');
if ($arquivo) {
fwrite($arquivo, $json);
//fecha o arquivo
fclose($arquivo);
$arquivo = fopen('meuarquivo.txt','r');
if ($arquivo) {
$conteudo = "";
while(!feof($arquivo)) {
$conteudo .= fgets($arquivo);
fclose($arquivo);
//transforma o conteúdo JSON em uma variável PHP
$vetor = json_decode($conteudo);
echo $vetor[2];
?>
Pesquise mais
Nesta seção foram apresentadas várias funções da linguagem PHP. Mas PHP não se
limita ao desenvolvimento de páginas simples. No texto indicado a seguir, o autor
apresenta a utilização da linguagem PHP para o desenvolvimento de jogos para internet:
Quiz
Nesta seção apresentamos a importância das funções para deixar nosso código mais
limpo e organizado. O uso das funções também é favorável para uma maior facilidade
na manutenção futura do código. Outro aspecto que merece destaque é o uso das
funções já existentes na ampla biblioteca de recursos de linguagem PHP. Na próxima
seção, você vai estudar a utilização de banco de dados em página PHP.
Referências
BABIN, L. Ajax com PHP: do iniciante ao profissional: crie poderosos aplicativos web
interativos utilizando a força de Ajax e PHP. Rio de Janeiro: Alta Books, 2007. 208 p.
ISBN 9788576081463.
MILANI, A. Construindo aplicações web com PHP e MySQL. São Paulo: Novatec,
2010. 336 p. ISBN 9788575222195.
THE PHP GROUP. História do PHP. PHP, 2020. Disponível em:
https://bit.ly/3eE27HX. Acesso em: 18 set. 2020.
ZERVAAS, Q.; LIMA, E. C.; KINOSHITA, L. Aplicações práticas de web 2.0 com
PHP. Rio de Janeiro: Alta Books, 2009. 521 p. ISBN 9788576083269.
FOCO NO MERCADO DE TRABALHO
FUNÇÕES E MANIPULAÇÃO DE
ARQUIVOS EM PHP
Ely Fernando do Prado
Fonte: Shutterstock.
Para ampliar sua visão acerca das possibilidades de aplicação dos conhecimentos
obtidos até o momento, vamos propor uma resolução para a situação-problema
apresentada no início da seção. Deve-se continuar a aplicação web em que o usuário
deverá digitar a distância a ser percorrida, o preço da gasolina e o preço do etanol. Logo
depois deverá ser calculado e exibido o valor gasto com cada um dos combustíveis,
considerando um consumo de 9 km/litro de etanol e 11 km/litro de gasolina, além de
mostrar ao usuário qual o combustível fica mais barato. Nesta seção foi solicitado que
adicionássemos o requisito de armazenar os dados digitados pelo usuário em um
arquivo, e depois que criássemos um relatório que exibisse esses dados. A parte de
código em que o usuário fará a entrada de dados (index.html) não terá nenhuma
alteração com a versão anterior, mantendo-se da seguinte forma:
<html>
<body>
<h1>Combustível</h1>
Distância:
</form>
</body>
</html>
<html>
<head><title>Resposta</title></head>
<body>
<?php
$distancia = $POST[“distancia”];
$precoEtanol = $POST[“precoEtanol”];
$precoGasolina = $POST[“precoGasolina”];
echo “<br/>”;
echo “<br/>”;
} else {
$data = date(‘d/m/Y’);
$arquivo = fopen(‘log.txt’,’a’);
if ($arquivo) {
fwrite($arquivo, $data);
fwrite($arquivo, “ “);
fwrite($arquivo, “ “);
//fecha o arquivo
fclose($arquivo);
?>
</body>
</html>
Por fim, deve-se criar uma página de relatório capaz de exibir os dados que foram
armazenados no arquivo log.txt, conforme exemplo a seguir:
<html>
<head>
<title>Relatório</title>
</head>
<body>
<?php
$arquivo = fopen('log.txt','r');
if ($arquivo) {
while(!feof($arquivo)) {
}
fclose($arquivo);
?>
</body>
</html>
O que é um SGBD?
Fonte: Shutterstock.
O que uma rede social, um e-commerce e um site de notícias têm em comum? Uma
grande quantidade de dados, que são exibidos rapidamente a cada vez que algum
usuário acessa o site. Nos casos em que temos um grande volume de dados, o simples
armazenamento de deles em arquivos não é satisfatório, pois ficaria muito lento,
desestruturado e inseguro. Pense, por exemplo, em um site de e-commerce: a cada
acesso devem ser disponibilizadas diversas informações a respeito dos produtos
disponíveis, incluindo a descrição, código de referência, preço, informações técnicas,
saldo de estoque disponível, volume para cálculo de frete, fotos e outras. Além disso, os
produtos devem ser classificados em categorias e o site deve permitir que o usuário faça
pesquisa filtrando os produtos que deseja. São muitas informações, e é fundamental que
elas estejam armazenadas e organizadas em um banco de dados. Nesta seção
estudaremos a utilização do banco de dados MySQL com a linguagem de programação
para web PHP.
Além disso, foi solicitado que você mantivesse salvos os dados inseridos pelos usuários,
de maneira que fosse possível gerar posteriormente um relatório contendo a data, o
valor da gasolina e o valor do etanol que os usuários digitaram. Esses dados estavam
sendo salvos em arquivo, porém essa não é a melhor estratégia. Portanto, visando ao
melhor desempenho do site, sua startup deverá desenvolver funcionalidades que
permitam que os dados inseridos pelo usuário sejam salvos e posteriormente exibidos
no relatório com base em manipulação e consultas no banco de dados MySQL.
Com a utilização de banco de dados, as suas aplicações web ficarão ainda mais robustas
e profissionais. Bons estudos!
conceito-chave
Caro aluno, as diversas mídias dizem que estamos atualmente na Era da Informação, e
que o bem mais precioso é a informação. Portanto, sempre que você desenvolver uma
aplicação web é importante armazenar e disponibilizar informações aos seus usuários,
incluindo dados sobre o produto que ele visitou no e-commerce, recorrência de acesso e
quais cliques o usuário deu dentro do site. Considere a quantidade de informações
armazenadas em um e-commerce: os dados cadastrais dos clientes, dados sobre os
produtos, preços, estoque, carrinhos de compra, pagamentos e outros. São tantas
informações que seria inviável desenvolver um sistema desse tipo sem um banco de
dados. Sempre que precisamos fazer persistência de dados, ou seja, armazenar e
recuperar dados, uma estratégia muito utilizada é utilizar um Sistema Gerenciador de
Banco de Dados (SGBD). Um SGBD é um software responsável pelo gerenciamento
dos dados, controlando os acessos, a consistência e a integridade desses dados. Alguns
exemplos de SGBDs são o MySQL, MariaDB, PostgreSQL, Oracle e Microsoft SQL
Server.
O MySQL é um SGBD relacional cuja primeira versão foi lançada em 1994. Em 2008
foi adquirido pela empresa Sun Microsystems e, em 2010 a gigante Oracle, que tem um
SGBD de mesmo nome, comprou a Sun Microsystems. Assim, atualmente o MySQL é
de propriedade da Oracle, que mantém a distribuição do MySQL com código aberto
(open source) sob a licença GPL (General Public License), permitindo o uso gratuito do
MySQL, disponde, também, de uma versão paga que pode ser incorporada a sistemas
comerciais.
Reflita
A licença do MySQL costuma ser um assunto que confunde muitas pessoas. Pesquise a
respeito das condições de uso do MySQL e reflita sobre elas. Veja, ainda, as condições
de uso do MariaBD e quais as diferenças desse SGBD com o MySQL.
Quando falamos de banco de dados relacional, dizemos que os dados são organizados
em uma estrutura que relaciona e organiza os dados por meio dos seguintes elementos:
tabelas (entidades), colunas (atributos) e registros (tuplas).
É possível ainda adicionar filtros para que sejam mostrados apenas os registros que
atendem a esse critério com a cláusula WHERE. Também é possível ordenar os dados
utilizando a cláusula ORDER BY, conforme mostrado neste código:
Para criar as tabelas do seu banco de dados você pode utilizar ferramentas auxiliares,
como o MySQL Workbank ou o PHPMyAdmin. É possível utilizar, por exemplo, a
PHPMyAdmin dentro do ambiente PaizaCloud e assim não há necessidade de instalar
algo mais no seu computador. Para isso, crie ambiente no PaizaCloud (PAIZA INC,
c2014), marcando as opções PHP, MySQL e phpMyAdmin, conforme mostrado na
Figura 4.7 a seguir:
Criando tabelas
Depois que criar o banco de dados deve-se elaborar as tabelas que receberão os dados a
serem armazenados. Na Figura 4.9 está sendo criada uma tabela chamada “pessoa”, com
os atributos de idpessoa, nome, cpf e telefone. O atributo “idpessoa” é uma chave
primária (identificador único de cada registro), portanto, foi selecionada a opção
PRIMARY KEY. Marcamos também a opção A.I., que significa “autoincremento”, ou
seja, esse campo terá o seu valor atribuído automaticamente por meio de uma sequência
numérica única.
Agora que temos um banco de dados e uma tabela criados, podemos fazer a conexão
utilizando a linguagem PHP, que disponibiliza algumas bibliotecas para conectar-se em
diversos SGBDs disponíveis no mercado. No caso das conexões com o MySQL,
usaremos a biblioteca MySQLi. Essa biblioteca disponibiliza diversas funções, com
destaque para as seguintes:
A linguagem PHP permite que executemos comandos SQL no banco de dados MySQL.
Mas como podemos utilizar todos esses comandos na prática? Considere o banco de
dados chamado “meubd”, que contém uma tabela chamada “pessoa” com os atributos
de “nome”, “telefone” e “cpf”. A seguir podemos ver um exemplo de código PHP capaz
de inserir um registro nessa tabela e logo em seguida consultar todos os dados contidos
na tabela. Cada linha do código está comentada com a função sua função.
<?php
$password = ""; //por padrão o Paiza.cloud não coloca senha no banco de dados
if (!$con) {
//caso a conexão falhe, ele encerra a página PHP imprimindo a mensagem de erro
$sql = "INSERT INTO pessoa (nome, telefone, cpf) VALUES ('Bill Gates', '(99)9999-
9999', '123.123.123-12')";
if (mysqli_query($con, $sql)) {
} else {
$res=mysqli_query($con,$sql);
//faz um laço de repetição que irá durar enquanto tiverem registros na consulta
while($row = mysqli_fetch_array($res)){
echo "<tr>";
echo "</tr>";
echo "</table>";
mysqli_close($con);
?>
Caro aluno, agora que você já pode realizar a manipulação e consultas de dados no
banco de dados, abordaremos a autenticação de usuário. Em uma rede social, por
exemplo, quando você clica para ver seus amigos é mostrada uma lista contendo apenas
os seus amigos, enquanto outro usuário que clica no mesmo link enxerga a lista dos
amigos dele. Ou seja, para cada usuário é exibida uma informação diferente. Isso
acontece também em sites de e-commerce, quando são sugeridos produtos direcionados
para o usuário que está acessando a página. A visualização ocorre dessa maneira porque
cada usuário fez o seu login de acesso e tem sua identificação definida em todas as
páginas que ele acessa na aplicação. Uma forma muito comum de se identificar o
usuário é por meio da sessão, que em PHP é identificada pelo vetor (array) chamado
$_SESSION. Nesse vetor podem ser armazenados dados exclusivos para aquele usuário,
de modo que ele tenha uma identificação única e diferente da dos demais usuários.
Quando o usuário fecha o navegador essa sessão é excluída automaticamente,
garantindo a segurança do acesso daquele usuário. Para se utilizar a sessão de usuário
em uma página PHP, é obrigatório que na primeira linha da página seja feita a
inicialização da sessão pela função session_start().
<html>
<head>
<title>Formulário de Autenticação</title>
</head>
<body>
<!-- formulário que irá enviar os dados para a página login.php -->
<br/>
<br/>
</form>
</body>
</html>
Quando o usuário clicar no botão “submit” ele será redirecionado para a página
“login.php”, a qual receberá os dados digitados pelo usuário no vetor $_POST. Note
que a primeira linha do arquivo “login.php” é justamente a abertura do código PHP com
a inicialização da sessão do usuário. Depois disso é realizada uma consulta no banco de
dados para saber se o e-mail existe no cadastro de usuários e se a senha está correta.
Caso o usuário e a senha sejam válidos, o nome do usuário é salvo no vetor de sessão e
é disponibilizado um link para o usuário navegar até a página de menu:
<?php
session_start();
?>
<html>
<head>
<title>Autenticação do Usuário</title>
</head>
<body>
<?php
if (!$con) {
$email = $_POST["email"];
$senha = $_POST["senha"];
$res=mysqli_query($con,$sql);
if($row = mysqli_fetch_array($res)){
if ($row["senha"]==$senha) {
echo $row["nome"];
echo "<br/>";
$_SESSION["nome"] = $row["nome"];
} else {
}
} else {
mysqli_close($con);
?>
</body>
</html>
Quando o usuário clicar no link para abrir a página de menu ou qualquer outra página
que ele acessar a partir de então, basta iniciar a sessão com a função session_start() e
buscar o nome do usuário que está logado por meio do vetor $_SESSION:
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<h1>
</h1>
</body>
</html>
O nome do usuário pode ser usado para muito mais do que simplesmente mostrar quem
está logado. Pode-se, por exemplo, utilizar o nome do usuário para filtrar os produtos
relacionados a ele em um site de e-commerce ou as notícias com os assuntos que o
usuário costuma ler, ou, ainda, uma lista de seus amigos em uma rede social. Essas
consultas podem ser facilmente realizadas pelo banco de dados.
Existem casos em que não há área no site para se fazer autenticação do usuário por meio
de login e senha, mas, mesmo assim, deseja-se manter alguma informação salva sobre
ele. A sessão de usuário então não é útil, pois quando o navegador é fechado os valores
da sessão se perdem. Quando há a necessidade de se armazenar alguma informação
especificamente daquele usuário é possível utilizar cookies, que basicamente são
pequenas informações salvas no navegador do usuário. Toda vez que o usuário voltar a
acessar o seu site, você poderá ler os cookies que foram salvar no navegador de quem
está acessando. É importante notar que nos cookies devem ser salvas realmente poucas
informações, pois geralmente há um limite de no máximo 4Kb apenas para guardar
informações desse tipo no navegador. Para salvar um dado no cookie do usuário utilize
a função do PHP setcookie, passando por parâmetro um nome identificador do valor e o
valor que se deseja salvar. Também é possível enviar a data de expiração para esse
valor, somando a uma função time() a quantidade de segundos que você quer deixar
esse dado disponível. É obrigatório que a chamada da função setcookie venha antes de
qualquer código html ou impressão de dados com php, semelhante ao que ocorre com a
função session_start, a qual colocamos logo no início do arquivo. Para recuperar algum
dado armazenado no cookie de usuário basta acessar o vetor $_COOKIE, conforme
mostrado no exemplo a seguir:
<?php
echo $_COOKIE["nome"];
?>
Assimile
Uma informação importante para saber se o seu site está tendo sucesso ou não é a taxa
de recorrência de seus usuários, ou seja, a quantidade de vezes que um usuário volta ao
seu site. Nos casos em que não há interface para o usuário fazer login, é possível
analisar essa taxa com um contador de acessos que utiliza cookies. Esse contador de
acesso é único por usuário, pois o seu valor é salvo no navegador do próprio usuário.
Assim, cada vez que um novo usuário acessa sua página, o contador inicia a contagem
novamente, e você saberá que é um novo usuário entrando na sua página. A seguir,
podemos observar um código que faz esse contador:
<?php
$quantidade = 0;
//faz um verificação, pois caso seja o primeiro acesso do usuário o valor do cookie é
nulo
if ($_COOKIE["contador"]!=null) {
$quantidade = $_COOKIE["contador"];
$quantidade++;
setcookie("contador", $quantidade);
echo $quantidade;
?>
Saiba mais
<html>
<head>
<title>Lista de Alunos</title>
</head>
<body>
<h1>Lista de Alunos</h1>
<?php
//endereço do servidor
$servername = "localhost";
$database = "meubd";
//usuário do MySQL
$username = "root";
//senha do MySQL
$password = "";
if (!$con) {
$res=mysqli_query($con,$sql);
//abre a tabela e define o cabeçalho
echo "<th>nome</th>";
echo "<th>média</th>";
while($row = mysqli_fetch_array($res)){
$media = ($row["nota1"]+$row["nota2"]) / 2;
if ($media >= 6) {
} else {
echo "</tr>";
echo "</table>";
mysqli_close($con);
?>
</body>
</html>
Pesquise mais
Para aprender mais acerca da utilização de banco de dados com PHP, recomendamos a
leitura das páginas 71 a 88 do material indicado a seguir.
Referências
BABIN, L. Ajax com PHP: do iniciante ao profissional: crie poderosos aplicativos web
interativos utilizando a força de Ajax e PHP. Rio de Janeiro: Alta Books, 2007. 208 p.
ISBN 9788576081463.
MILANI, A. Construindo aplicações web com PHP e MySQL. São Paulo: Novatec,
2010. 336 p. ISBN 9788575222195.
PAIZA CLOUD. Página inicial. Paiza Inc, c2014. Disponível em: https://paiza.cloud/.
Acesso em: 28 fev. 2021.
VISUAL STUDIO CODE. Página inicial. Seattle: Microsoft, 2021. Disponível em:
https://code.visualstudio.com/. Acesso em: 2 mar. 2021.
ZERVAAS, Q.; LIMA, E. C.; KINOSHITA, L. Aplicações práticas de web 2.0 com
PHP. Rio de Janeiro: Alta Books, 2009. 521 p. ISBN 9788576083269.
FOCO NO MERCADO DE TRABALHO
Alterações na codificação da aplicação para que os dados possam ser salvos no banco de
dados e o relatório exiba os dados que foram armazenados no banco de dados.
Fonte: Shutterstock.
<html>
<body>
<h1>Combustível</h1>
Distância:
</form>
</body>
</html>
A página “resposta.php” sofrerá alterações para que os dados possam ser salvos no
banco de dados, ficando de seguinte forma:
<html>
<head><title>Resposta</title></head>
<body>
<?php
$distancia = $POST["distancia"];
$precoEtanol = $POST["precoEtanol"];
$precoGasolina = $POST["precoGasolina"];
echo "<br/>";
echo "<br/>";
} else {
//pega a data atual no formato do banco de dados, primeiro o ano, depois o mês e depois
o dia
$data = date('Y-m-d');
$password = ""; //por padrão o Paiza.cloud não coloca senha no banco de dados
if (!$con) {
//caso a conexão falhe, ele encerra a página PHP imprimindo a mensagem de erro
}
//monta o comando SQL para inserção
if (mysqli_query($con, $sql)) {
} else {
mysqli_close($con);
?>
</body>
</html>
Por fim, deve-se alterar a página de relatório para ela que seja capaz de exibir os dados
que foram armazenados no banco de dados, conforme exemplo a seguir:
<html>
<head>
<title>Relatório</title>
</head>
<body>
<?php
$password = ""; //por padrão o Paiza.cloud não coloca senha no banco de dados
if (!$con) {
//caso a conexão falhe, ele encerra a página PHP imprimindo a mensagem de erro
$res=mysqli_query($con,$sql);
//faz um laço de repetição que irá durar enquanto tiverem registros na consulta
while($row = mysqli_fetch_array($res)){
echo "<tr>";
echo "</tr>";
echo "</table>";
//fecha a conexão com o banco de dados
mysqli_close($con);
?>
</body>
</html>
Saiba mais
Nesta seção aprendemos os comandos básicos dos comandos SQL, porém existem
diversos recursos a serem explorados, especialmente na sintaxe da instrução de consulta
de dados. Na atividade proposta com foco no mercado foi solicitado que você fizesse
um relatório listando todos os dados inseridos pelo usuário a respeito do preço da
gasolina e do etanol. Mas, e se em vez de listar todos os dados quiséssemos um resumo,
informando qual é a média de preço de cada um desses combustíveis, qual o preço mais
alto e qual o preço mais baixo? Para isso, podemos utilizar as funções agregadas que a
linguagem SQL nos disponibiliza. Essas funções são capazes de agrupar dados
mostrando o resultado da operação a qual ela foi designada, que pode ser dos seguintes
tipos:
<html>
<head>
<title>Relatório</title>
</head>
<body>
<?php
//declara as variáveis de configuração da conexão ao banco de dados
//endereço do servidor
$servername = "localhost";
$database = "meubd";
//usuário do MySQL
$username = "root";
//senha do MySQL
$password = "";
if (!$con) {
AVG(precoGasolina) as mediaGasolina,
MAX(precoEtanol) as maiorEtanol,
MAX(precoGasolina) as maiorGasolina,
MIN(precoEtanol) as menorEtanol,
MIN(precoGasolina) as menorGasolina
FROM combustivel";
$res=mysqli_query($con,$sql);
//não há necessidade de estrutura de repetição, pois a instrução SQL irá retornar apenas
um registro
$row = mysqli_fetch_array($res);
//imprime os resultados
echo "<br/>Média de preço do Etanol: " . number_format($row["mediaEtanol"], 2, ",",
".");
mysqli_close($con);
?>
</body>
</html>