Surgimento:
Criadores:
Fato:
Dúvidas:
1969
1974
1983
1974 - 1990
1988 - 1989
1992
1989 - 1993



1ª definição
2ª definição
Segundo Andrew Tanembaum (autor de vários livros de Computação):
A Web é um arcabouço arquitetural para acessar
conteúdo relacionado que está espalhado em milhões
de computadores pela Internet.
“Arcabouço arquitetural”
“Conteúdo relacionado”
racas-raras.html)estilo.css)ovelhita.js).png, .jpg, .gif)racas-raras.html<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Raças Raras de Ovelhas</title>
<link rel="stylesheet" href="estilos.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
</head>
<body>
<h1>Raças <strong>Raras</strong> de Ovelhas</h1>
<p>O interessante animal da espécie <em>Ovis aries</em> (vulga ovelha) é
tipicamente produzido (pela natureza) em raças distintas. Em cada uma
delas, os indivíduos ovelhísticos possuem características fisiológicas e
comportamentais diferentes.</p>
<p>A seguir, veja alguns exemplos dessas raças.</p>
<h2>Algod-ovelha</h2>
<img src="algod-ovelha.jpg" alt="" class="circular foto-ovelha">
<p>Em vez de lã, esta ovelha é uma exímia produtora de algodão e
muito apreciada pela indústria têxtil chinesa.</p>
<p>Pessoas pagam milhões para poder criar destas em suas casas.</p>
<h2>Pirá-tovelha</h2>
<img src="pira-tovelha.jpg" alt="" class="circular foto-ovelha">
<p>Ovelha marinha-saqueadora frequentemente vista nas ilhas caribenhas
(seu habitat) navegando embarcações de madeira.</p>
<p>Ao avistar uma destas, gire o leme completamente a estibordo, ice as
velas e fuja para terra firme.</p>
<h2>Ovelhopixel</h2>
<img src="ovelhopixel.png" alt="" class="circular foto-ovelha">
<p>Uma ovelha digital formada por um conjunto de quadradinhos coloridos.</p>
<p>Ela precisa se recarregar de tempos em tempos.</p>
<h2>Outras</h2>
<ul>
<li>Robôvelha</li>
<li>Ninjo-velha</li>
<li>Legovelha</li>
</ul>
<figure id="ovelha" class="sprite">
<img src="sheep-sprite.png" alt="" draggable="false">
</figure>
<script src="shake.js" charset="utf-8"></script>
<script src="ovelhinha.js" charset="utf-8"></script>
</body>
</html>
estilos.cssbody {
margin: 0 auto;
max-width: 600px;
border-left: 3px double silver;
border-right: 3px double silver;
}
h1 {
margin-top: 0;
font-family: "Comic Sans", cursive;
font-weight: normal;
color: purple;
}
h2 {
clear: both;
color: black;
font-family: "Comic Sans", cursive;
background-image: linear-gradient(to right, yellow 1%, rgba(255,255,255,.5) 1%, transparent);
padding: 0.15em 0.15em 0.15em 1em;
}
.circular {
border-radius: 50%;
shape-outside: circle(50%);
}
.foto-ovelha {
display: inline-block;
width: 125px;
border: 2px solid yellow;
box-shadow: 3px 3px 3px silver;
}
p {
text-align: justify;
line-height: 1.5em;
}
ul {
list-style-image: url(ovelhinha.gif);
}
.sprite {
width: 40px;
height: 40px;
overflow: hidden;
position: fixed;
bottom: 0;
right: 0;
margin: 0;
cursor: move;
}
.sprite.invertido {
transform: rotateY(.5turn);
}
.sprite > img {
position: absolute;
top: calc(-1*40px);
left: calc(-3*40px);
}
.sprite.parado > img {
top: calc(-1*40px);
left: calc(-3*40px);
animation: parado 1.5s steps(1) 1;
}
@keyframes parado {
100% { left: calc(-3*40px); }
}
ovelhita.jsconst ANIMACOES = ['parado', 'andando', 'correndo', 'rolando', 'virando',
'adormecendo', 'dormindo', 'despencando', 'despencado', 'pendurada'];
const ESTADOS = {
reflexiva: { loop: 'parado', proximo: ['dormindo', 'andando', 'reflexiva'] },
dormindo: { loop: 'dormindo', pre: 'adormecendo', pos: { anim: 'parado', duracao: 500 }, proximo: ['andando', 'reflexiva'] },
andando: { loop: 'andando', proximo: ['andando', 'reflexiva', 'virando', 'correndo'] },
correndo: { loop: 'correndo', proximo: ['andando', 'correndo'] },
virando: { loop: 'virando', proximo: ['reflexiva', 'andando'] },
rolando: { loop: 'rolando', proximo: ['reflexiva', 'dormindo'] },
pendurada: { loop: 'pendurada', proximo: ['despencando'] },
despencando: { loop: 'despencando', pos: { anim: 'despencado', duracao: 2000 }, proximo: ['reflexiva']}
};
const vibraTela = () => {
// chama a vibração da bateria, se houver
if ('vibrate' in navigator) {
navigator.vibrate(1000);
}
// faz os elementos dentro do tela tremerem
document.body.classList.add('vibrando');
document.body.addEventListener('animationend', function(e) {
e.target.removeEventListener(e.type, arguments.callee);
document.body.classList.remove('vibrando');
});
};
let ovelha = {
el: document.querySelector('#ovelha'),
// estado inicial
estado: ESTADOS.reflexiva,
tempoNoEstado: 0,
estadosAnteriores: [],
orientacao: 1,
// define qual animação será tocada
defineAnimacao: function(nomeAnimacao) {
ANIMACOES.forEach((anim) => this.el.classList.remove(anim));
this.el.classList.add(nomeAnimacao);
},
// define se a ovelha está olhando para esquerda ou direita
defineOrientacao: function(novaOrientacao) {
if (novaOrientacao <= 0) {
this.el.classList.add('invertido');
} else {
this.el.classList.remove('invertido');
}
this.orientacao = novaOrientacao;
},
largura: 40,
altura: 40,
// coordenadas definem a posição do centro da ovelha
x: 20,
y: 20,
// sistema de coordenadas começa na direita e embaixo
definePosicao: function(x, y) {
this.x = x;
this.el.style.right = `${x - this.largura/2}px`;
if (!!y) {
this.y = y
this.el.style.bottom = `${y - this.altura/2}px`;
}
},
// invocada quando quisermos trocar o estado
mudaEstado: function(novoEstado) {
switch (novoEstado) {
case ESTADOS.despencando:
this.velocidadeY = 0;
break;
}
this.estadosAnteriores.unshift(this.estado);
while (this.estadosAnteriores.length > 3) {
this.estadosAnteriores.pop();
}
this.estado = novoEstado;
this.tempoNoEstado = 0;
},
sorteiaProximoEstado: function() {
return ESTADOS[this.estado.proximo[Math.floor(Math.random() * this.estado.proximo.length)]];
},
bateuNaTela: function() {
return (this.x - this.largura/2 < 0 || this.x + this.largura/2 > window.innerWidth);
},
saiuDaTela: function() {
return (this.x + this.largura/2 < 0 || this.x - this.largura/2 > window.innerWidth);
},
revolucionaNaTela: function() {
let newX;
if (this.x - this.largura/2 < 0) {
newX = this.x + window.innerWidth + this.largura/2;
} else if (this.x + this.largura/2 > window.innerWidth) {
newX = -this.largura/2;
}
this.definePosicao(newX);
},
passouDoChao: function() {
return (this.y - this.altura/2 < 0);
},
tempoAntes: 0,
atualiza: function(tempo) {
let delta = tempo - this.tempoAntes;
this.tempoNoEstado += delta;
switch (this.estado) {
case ESTADOS.reflexiva:
if (this.tempoNoEstado > 1000) {
this.mudaEstado(this.sorteiaProximoEstado());
}
break;
case ESTADOS.dormindo:
if (this.tempoNoEstado > 4000) {
this.mudaEstado(this.sorteiaProximoEstado());
}
break;
case ESTADOS.andando:
this.definePosicao(this.x += this.orientacao * .025 * delta);
if (this.tempoNoEstado > 3000) {
this.mudaEstado(this.sorteiaProximoEstado());
}
if (this.saiuDaTela()) {
this.revolucionaNaTela();
}
if (this.bateuNaTela() && this.estadosAnteriores.indexOf(ESTADOS.virando) === -1) {
this.mudaEstado(ESTADOS.virando);
}
break;
case ESTADOS.correndo:
this.definePosicao(this.x += this.orientacao * .085 * delta);
if (this.tempoNoEstado > 2500) {
this.mudaEstado(this.sorteiaProximoEstado());
}
if (this.saiuDaTela()) {
// dá a volta na tela
this.revolucionaNaTela();
}
break;
case ESTADOS.virando:
// 500ms é o mesmo tempo definido na animação em CSS
if (this.tempoNoEstado > 500) {
this.defineOrientacao(this.orientacao * -1);
this.mudaEstado(this.sorteiaProximoEstado());
}
break;
case ESTADOS.rolando:
// rola até bater na tela
this.definePosicao(this.x += this.orientacao * .085 * delta);
if (this.bateuNaTela()) {
this.mudaEstado(this.sorteiaProximoEstado());
}
break;
case ESTADOS.despencando:
// vai caindo até atingir o chão
this.definePosicao(this.x, this.y += this.velocidadeY * .085 * delta);
this.velocidadeY -= 0.025;
if (this.passouDoChao()) {
this.definePosicao(this.x, this.altura/2);
vibraTela();
this.mudaEstado(this.sorteiaProximoEstado());
}
break;
}
if (!this.deveParar) {
requestAnimationFrame(this.atualiza.bind(this));
}
this.deveParar = false;
this.tempoAntes = tempo;
},
para: function() {
this.deveParar = true;
}
};
ovelha.inicializa();
Linguagem: - HTML: Hypertext Markup Language
O que faz: - Conteúdo e estrutura da página (e.g., o texto, imagens)
Linguagem: - CSS: Cascading Stylesheets
O que faz: - Apresentação (estilos) da página (e.g., core, tamanhos, detalhes)
Linguagem: - JavaScript
O que faz: - Comportamento dinâmico na página (e.g., a ovelhita)

<img src="imagens/pira-tovelha.jpg">
<link href="estilos.css" rel="stylesheet">
Físico, trabalhando no CERN, Tim Berners-Lee percebeu a necessidade
dos físicos de compartilhar informação e a falta de máquinas ou formatos
comuns
Quero que qualquer pessoa, em qualquer computador (arquitetura, sistema operacional, rede), em qualquer lugar, consiga visualizar documentos um do outro.
Mais que isso, os documentos podem referenciar um ao outro não necessariamente de forma hierárquica. E quero que eles possam conter imagens, tabelas, títulos e outras coisas legais.
É um formato de arquivo (.html) em texto simples (plain-text) em que
seleciona-se um texto e marca suas partes dando a ele estrutura
Texto puro:
Este é um texto sem ênfases.
Texto html:
Este é um texto com um trecho <em>enfatizado</em>.
html completopagina-singela.html:
<!DOCTYPE html>
<html>
<head>
<title>Uma página web!</title>
</head>
<body>
Olá pessoal, esta é uma página com apenas este singelo texto!
</body>
</html>
Versões
Alternativas
Agora que especifiquei um formato de arquivo robusto, preciso de um programa que seja capaz de renderizar seu conteúdo e permitir a navegação de um arquivo html para outro.
Até agora, consigo visualizar os arquivos .html no meu computador, usando um
navegador. Mas quero poder acessar arquivos de qualquer um que se disponha a
deixar o computador ligado, em qualquer parte do mundo.
Quero poder transmitir essas páginas web de um servidor para meu navegador.
Tenho o protocolo TCP/IP à minha disposição, mas preciso transmitir mais do que apenas o conteúdo dos arquivos. Por exemplo, como faço caso o arquivo solicitado não exista? Em que “língua” que o servidor web e o navegador vão conversar?
Conjunto de regras bem definidas descrevendo como entidades se comunicam.
GET /index.html HTTP/1.1
Host: www.twitter.com
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Content-Type: text/html; charset=UTF-8
Content-Length: 131
<!DOCTYPE html>
<html>
<head>
<title>Twitter</title>
</head>
<body>
Olá mundo, este é um tweet.
</body>
</html>