37
Fundamentos do Webdesign 20 Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira As configurações dos itens podem incluir margens internas e externas (padding e margin), flex-wrap, bordas, e as duas mais importantes são: tamanho mínimo de comprimento e alinhamento (min-width e align-self). O alinhamento pode ter as mesmas opções que usamos no menu: flex-start, flex-end, center ou stretch, que permite “esticar” o conteúdo. .item {padding:15px; background:rgba(0,0,100,0.2); margin:10px; align-self:stretch; flex-wrap:wrap; min-width:150px; border:1px solid white; border-radius:7px;} Com os itens ajustáveis, podemos criar uma classe de conteúdo para os produtos da Atividade 4, com os itens em divs separadas. Atividade 4: Crie um site de vendas com layout em tabela similar ao exemplo abaixo (index.htm). Crie logo e título com imagens ou pictogramas, menu lateral, imagens de produtos e textos com promoções. Crie uma página com mesmo layout, mesclando as células de produtos em uma só, criando uma descrição da empresa, com uma imagem da empresa. Use CSS para modificar os atributos dos elementos das tags de links do menu lateral e do horizontal (tag de link a, por exemplo). Crie id ou class para os produtos em promoção (mudar cor ou fundo). LOGO BANNER MENU LATERAL pedidos fale conosco promoções sobre Produto 1 Preço: Promoção: Produto 2 Preço: Promoção: ... ... ... ... ... ... ... ... ... ... ... ... Produto 12 Preço: Promoção: COPYRIGHT, ENDEREÇO,... Para criar sites com os elementos semelhantes aos que usamos na Atividade 4, podemos usar tags <div> para criar cada grupo de elementos. Uma propriedade que podemos usar é a float (left, right ou none), que permite que as tags possam se encaixar à esquerda ou à direita de uma tag anteriormente colocada na página. Outras propriedades que vamos utilizar são chamadas flex, que permitem encaixes variáveis, de acordo com o tamanho da tela que o visitante abrir o site que criarmos. Vamos criar nossas próximas páginas sem usar tabelas, usando tags <div>: é o que chamamos de layout tableless. 8.1. MAPEAMENTO DE IMAGENS O mapeamento de imagens é uma ferramenta de HTML que permite criar links ou informações sobre um determinado tema. Muitas vezes pode ser usada para criar os links de um menu, ou para criar sites com mapas temáticos. Ao criar o link de uma imagem, o visitante pode clicar em qualquer ponto da imagem para acessar o link. Com as tags de mapeamento, podemos dividir uma imagem em setores, com links diferentes. Considere o exemplo a seguir, onde uma imagem foi criada para o menu com os ícones HOME, DICAS, HOSPEDAGEM, GALERIA DE IMAGENS, MAPAS e CONTATO. Para criar o mapeamento da imagem do menu, 8. TABLELESS

a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

  • Upload
    dokhanh

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 20

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

As configurações dos itens podem incluir margens internas e externas (padding e margin), flex-wrap, bordas,

e as duas mais importantes são: tamanho mínimo de comprimento e alinhamento (min-width e align-self). O

alinhamento pode ter as mesmas opções que usamos no menu: flex-start, flex-end, center ou stretch, que permite

“esticar” o conteúdo. .item {padding:15px; background:rgba(0,0,100,0.2); margin:10px; align-self:stretch; flex-wrap:wrap;

min-width:150px; border:1px solid white; border-radius:7px;}

Com os itens ajustáveis, podemos criar uma classe de conteúdo para os produtos da Atividade 4, com os

itens em divs separadas.

Atividade 4: Crie um site de vendas com layout em tabela similar ao exemplo abaixo (index.htm). Crie logo e título

com imagens ou pictogramas, menu lateral, imagens de produtos e textos com promoções. Crie uma

página com mesmo layout, mesclando as células de produtos em uma só, criando uma descrição da

empresa, com uma imagem da empresa.

Use CSS para modificar os atributos dos elementos das tags de links do menu lateral e do horizontal (tag

de link a, por exemplo). Crie id ou class para os produtos em promoção (mudar cor ou fundo).

LOGO BANNER

MENU

LATERAL

pedidos fale conosco promoções sobre

Produto 1

Preço:

Promoção:

Produto 2

Preço:

Promoção:

... ... ...

... ... ... ... ...

... ... ... ...

Produto 12

Preço:

Promoção:

COPYRIGHT, ENDEREÇO,...

Para criar sites com os elementos semelhantes aos que usamos na Atividade 4, podemos usar tags <div>

para criar cada grupo de elementos. Uma propriedade que podemos usar é a float (left, right ou none), que permite

que as tags possam se encaixar à esquerda ou à direita de uma tag anteriormente colocada na página. Outras

propriedades que vamos utilizar são chamadas flex, que permitem encaixes variáveis, de acordo com o tamanho da

tela que o visitante abrir o site que criarmos.

Vamos criar nossas próximas páginas sem usar tabelas, usando tags <div>: é o que chamamos de layout

tableless.

8.1. MAPEAMENTO DE IMAGENS

O mapeamento de imagens é uma ferramenta de HTML que permite criar links ou informações sobre um

determinado tema. Muitas vezes pode ser usada para criar os links de um menu, ou para criar sites com mapas

temáticos. Ao criar o link de uma imagem, o visitante pode clicar em qualquer ponto da imagem para acessar o link.

Com as tags de mapeamento, podemos dividir uma imagem em setores, com links diferentes.

Considere o exemplo a seguir, onde uma imagem foi criada para o menu com os ícones HOME, DICAS,

HOSPEDAGEM, GALERIA DE IMAGENS, MAPAS e CONTATO. Para criar o mapeamento da imagem do menu,

8. TABLELESS

Page 2: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 21

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

precisamos calcular quais são os limites entre cada parte da imagem. Estes limites podem ser definidos usando

círculos (circle), retângulos (rect) ou polígonos (poly).

O tamanho da imagem é de 1350 x 282px. Em um editor de imagens é possível verificar as coordenadas do

centro e o tamanho do raio de um círculo que engloba o desenho do primeiro item do menu.

Podemos usar a estrutura simplificada a seguir para montar o layout, criando classes para o CSS.

<!DOCTYPE html> <html> <head>

<title>LAYOUT COM CSS</title> <meta name="author" content="AUTOR DA PÁGINA"> <meta charset="ISO-8859-1"> <style type="text/css">

body {background:rgba(100,200,220); width:80%; margin:auto; box-shadow:0px 0px 5px grey;} </style>

</head> <body>

<img src="imagens/menu_horizontal.png" width="1350" height="282" usemap="#Map"> <map name="Map" id="Map"> <area shape="circle" coords="104,104, 102" href="home.html" title="HOME" /> <area shape="rect" coords="230,3, 432,210" href="dicas.html" title="DICAS" />

<area shape="poly" coords="506,20, 456,108, 512,195, 613,191, 654,106, 612,27" href="hospedagem.html" title="HOSPEDAGEM" />

</map> </body> </html>

No caso desta imagem de menu, o mapeamento ideal é feito com shapes de círculos. Uma grande

desvantagem do mapeamento destas tags é o funcionamento com tamanhos fixos em pixels, tanto da imagem

quanto dos shapes.

Para tornar o uso do mapeamento responsivo, ou seja, que funcione para tamanhos variáveis de telas

(principalmente telas de smartphones e tablets), podemos criar classes e sub-classes em CSS com uso de percentuais

do tamanho da imagem. Estes elementos serão definidos com uso das tags de blocos chamadas div.

O primeiro bloco que vamos criar será o Mapa principal, com a div chamada Map para englobar as divs

filhas, que contém os itens do menu. Funciona como a criação de listas, que vimos nos primeiros sites.

Vamos criar as classes i1, i2,.... para cada item do menu, todos sem a propriedade de foco. Estas classes

servem para criarmos retângulos em forma de divs para criar links adaptáveis ao tamanho da tela.

<div class="Map"> <img src="imagens/menu_horizontal.png"> <div class="items">

<div title="HOME"><a href="home.html" class="i1"></a><p><b>HOME</b></p></div> <div title="DICAS"><a href="dicas.html" class="i2"></a><p><b>DICAS</b></p></div> <div title="HOSPEDAGEM"><a href="hospedagem.html" class="i3"></a>

<p><b>HOSPEDAGEM</b></p></div> </div> </div>

x

y

104

104

230

Page 3: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 22

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Na parte do CSS, vamos criar os códigos para esconder os elementos quando não estiverem em foco: basta

usar a propriedade visibility. Quando o visitante passar o cursor do mouse sobre o elemento do menu (hover),

visibility terá o atributo visible, e na visualização normal será hidden. O mesmo ocorre no texto, onde colocamos

display com atributo block para os itens de parágrafos dentre das tags de itens.

O mesmo ocorre em cada item com link a, dentro das tags items. Neste caso, colocamos um fundo com

opacidade 0.3 para destacar que os itens estão em foco.

.Map {width:100%; position:relative;} .Map img {display:block; width:100%;} .Map .items {width:100%; height:100%; position:absolute; left:0; top:0; visibility:hidden;} .Map:hover .items {visibility:visible;} .Map .items div:hover p {display:block;} .Map .items div:hover a {background:#fff; z-index:100; opacity:0.3; border:1px solid #000;}

Para mapear a imagem, podemos usar um editor de imagens com a régua para determinar os tamanhos dos

retângulos (width e height), e suas posições relativas (left e top). Usando a unidade do editor de imagens,

calculamos todas as medidas com percentuais, pois o site deverá ser responsivo.

A propriedade z-index pode ser usada para colocar a div em evidência quando estiver em foco. Valores

maiores de z-index deixam o conteúdo mais evidente. O valor de z-index negativo deixa a imagem atrás de outras.

Cada item do menu tem sua classe i1, i2,.... e pode ser mapeado na tela com as coordenadas relativas (left,

top, width e height).

Podemos usar a ferramenta de calculadora para facilitar as posições dos elementos da página. O

comprimento de cada item será de 100%/6, logo cada width pode ser calculado usando calc(100%/6). O

espaçamento entre o item i1 e i2 será de 100%/6; entre i2 e i3 será de 2*100%/6, e assim sucessivamente. .Map a {display:block; position:absolute; background:#000; z-index:100; opacity:0.05; border:1px solid

transparent; border-radius:10px;} .Map a.i1 {left:0%; top:0%; width:calc(100%/6); height:75%;} .Map a.i2 {left:calc(100%/6); top:0%; width:calc(100%/6); height:75%;} .Map a.i3 {left:calc(2*100%/6); top:0%; width:calc(100%/6); height:75%;} .Map a.i4 {left:calc(3*100%/6); top:0%; width:calc(100%/6); height:75%;} .Map a.i5 {left:calc(4*100%/6); top:0%; width:calc(100%/6); height:75%;} .Map a.i6 {left:calc(5*100%/6); top:0%; width:calc(100%/6); height:75%;}

Os itens de texto podem ser mapeados usando a propriedade a + p (link + parágrafo), que deve ter display

escondido (none) e só fica ativo quando o visitante focalizar o item (hover). .Map a + p {position:absolute; top:75%; width:calc(100%/6); color:#000; display:none;}

No caso de formatar nosso menu, todos os itens estão com a mesma coordenada superior (top) de 75%. As

coordenadas dos textos dos itens podem ser formatadas usando as distâncias à esquerda (left) de cada item, usando

as propriedades de a.i1 + p, a.i2 + p,... .Map a.i1 + p {left:0%;} .Map a.i2 + p {left:calc(100%/6);} .Map a.i3 + p {left:calc(2*100%/6);} .Map a.i4 + p {left:calc(3*100%/6);} .Map a.i5 + p {left:calc(4*100%/6);} .Map a.i6 + p {left:calc(5*100%/6);}

y (top)

x (left) width:16.6% ...

height: 75%

width: 16%

top:75%

Page 4: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 23

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Para mapear uma imagem, podemos anotar as medidas das coordenadas de um retângulo de seleção (top e

left), as medidas de largura e altura (width e height) e usar a ferramenta calc(medida/total*100%).

Exercício 9: Crie uma página com um menu lateral feito em um editor de imagens. Crie os links e retângulos de

seleção com mapeamento de imagens. Use a ferramenta calc para ajustar os links.

Atividade 5: Crie uma página com mapeamento de uma imagem. Em um editor de imagens, selecione 3 itens

(personagens, por exemplo) para inserir descrição de cada item. Use o mesmo tipo de estrutura do menu que

fizemos para criar as caixas de

descrições.

8.2. LAYOUT FLEX

Vamos criar um site com o seguinte layout:

caixa

LOGO menu compartilhar

banner

Lateral

rodapé

Como teremos muitos elementos para formatar com CSS, podemos colocar todas as suas propriedades em

um arquivo chamado estilo.css. No cabeçalho da nossa página index.htm vamos criar um link para o CSS:

<link href="estilo.css" rel="stylesheet" type="text/css">

Vamos utilizar as propriedades flex para ajustar os elementos da página. A div mãe dos elementos deve ter a

propriedade de display flex e o ajuste da proporção das divs filhas é feita através da propriedade flex.

conteúdo

<div class="rodape">

<div class="boxSite"> <div class="barra">

<div class="conteudo"> <div

class="lateral">

<div class="banner">

(left, top) height

width

Page 5: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 24

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Na tag da classe barra, teremos as divs filhas logo, menu e compartilhar, com a estrutura a seguir: <!DOCTYPE html> <html> <head>

<title>LAYOUT COM CSS</title> <meta name="author" content="AUTOR DA PÁGINA"> <meta charset="ISO-8859-1"> <link href="estilo.css" rel="stylesheet" type="text/css">

</head> <body> <div class="boxSite">

<div class="barra"> <div class="logo">

logo </div> <nav class="menu"> <ul> <li><a href="index.html">Home</a></li> <li><a href="pagina1.html">Página 1</a> <ul class="subitens"> <li><a href="#">Sub página 1</a></li> <li><a href="#">Sub página 2</a></li> <li><a href="#">Sub página 3</a></li> <li><a href="#">Sub página 4</a></li> </ul> </li> <li><a href="pagina2.html">Página 2</a></li> <li><a href="pagina3.html">Página 3</a></li> <li><a href="pagina4.html">Página 4</a></li> </ul> </nav> <div class="compartilhar"> <img src="imagens/facebook.png"> <img src="imagens/email.png"> <img src="imagens/twitter.png"> </div> </div> </div> </body> </html>

No arquivo estilo.css podemos colocar configurações parecidas com as que usamos no menu da Atividade 4.

Neste caso, vamos criar propriedades para os subitens deste menu. A propriedade transition faz o efeito hover

suavizado, com possibilidade de configurá-la em tempo e tipo de transição (ease: lenta no começo e fim; linear:

mesma velocidade; ease-in: lenta somente no começo; ease-out: lenta somente no fim). .menu {font-size:20px; flex:1;} .menu ul {list-style-type:none; margin:0; padding:0; display:flex; justify-content:center; flex-direction:row;} .menu li {float:left; margin:0; padding:0; border-right:1px grey solid; justify-content:space-around;} .menu li a {display:block; color:#666; padding:10px; text-decoration:none; transition:1s linear;} .menu li a:hover {color:blue; font-size:200px; text-shadow:1px 1px 6px black;} .menu li:last-child {border-right:none;}

A tag mãe chamada barra engloba as tags filhas logo, menu e compartilhar. Ela possui a propriedade de

display flex para facilitar a distribuição de proporções.

A propriedade flex distribui as proporções dos elementos de uma div mãe. Por exemplo, se colocarmos

flex:1 para todos os elementos filhos de uma div, as larguras serão distribuídas igualmente. No nosso exemplo, foi

colocado flex:3 para a div compartilhar, e flex: 1 para menu e logo. Portanto, a div compartilhar terá a proporção de

3/(3+1+1)=3/5=60%, e as outras divs ficarão com 1/(3+1+1)=1/5=20%.

.barra {background:#81BEF7; height:auto; min-height:120px; display:flex; align-items:center;} .logo {display:flex; flex:1; align-items:center; justify-content:center;} .compartilhar {display:flex; flex:3; align-items:center; justify-content:center;} .compartilhar img {width:10%; margin:15px; min-width:45px;}

Page 6: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 25

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Para criar os itens do menu como botões podemos usar as bordas arredondadas e um background para cada

item li da lista menu. Ao usar apenas uma medida, as quatro bordas ficam com mesmo raio. Ao usar porcentagem,

as bordas podem deixar as caixas com formato de elipse, que é o caso de usar border-radius: 50%.

border-radius:medidaTopoEsquerda medidaTopoDireita medidaBaseDireita medidaBaseEsquerda;

As imagens da barra compartilhar podem ser alinhadas com a propriedade justify-content (flex-start, flex-

end, center, space-around ou space-between).

O estado normal dos subitens (li ul) será display:none, os quais podem ter um tamanho mínimo definido

(para evitar que cada item apareça com um tamanho diferente), com z-index:1 para que eles apareçam em

evidência quando a função hover estiver ativa. Podemos usar também a propriedade de transição para que os

subitens apareçam de forma mais suave na tela.

.subitens {display:none; position:absolute; z-index:1; border:1px grey solid; background:#81BEF7;

opacity:0; transition:.3s linear;}

Os subitens podem ter uma borda inferior (bottom) para separar os textos. A propriedade flex-direction

pode ser usada para deixar os itens dispostos horizontal (row) ou verticalmente (column). .subitens li {border-bottom:1px solid grey; border-right:none;} .menu li:hover ul {display:flex; flex-direction:row; opacity:1;}

Para deixar o nosso site responsivo, isto é, automaticamente adaptado a telas menores, como tablets e

smartphones, devemos fazer alguns testes para verificar quais serão as divs que sofrerão ajustes de comprimento

para não afetar a visualização do seu site. Vamos começar modificando a div barra.

A técnica para mudanças de layout para telas menores é muito simples: basta diminuir o tamanho da tela do

navegador e verificar quais elementos necessitam mudar de comprimento. Para ajustar a um tablet (modo paisagem

com 1024px e retrato 768px), podemos deixar os itens da barra um abaixo do outro, ou seja, a propriedade flex-

direction será column. O alinhamento dos itens deve ser modificado para stretch (esticado).

Como o modo paisagem do site não muda muito em relação ao modo retrato de um tablet, vamos nos

preocupar somente com dispositivos com comprimentos de telas inferiores a 768px (valor que pode ser

arredondado para 800px). A propriedade CSS para modificações de telas é a @media screen.

@media screen and (max-width:800px) {

.barra {flex-direction:column; align-items:stretch;} }

Podemos aproveitar para deixar o menu com a configuração toggle (alternância), símbolo de

pictograma muito usado em telas menores para indicar onde tem uma estrutura de menu do site.

Além de usar este toggle, vamos usar um truque para não programar o menu com javascript. Um checkbox

será inserido, pois tem a função booleana (tipo “sim” ou “não”). Um label (rótulo) será usado como uma div mãe do

menu, inserindo o toggle no menu. A estrutura html fica assim:

<input type="checkbox" id="checkbox1"> <label for="checkbox1">

<nav class="menu"> ....

</nav> <span class="toggle">&#9776;</span> </label>

Já no CSS, precisamos esconder o toggle e o checkbox quando o comprimento da tela for maior do que

800px, ou seja:

#checkbox1, .toggle {display:none;}

Page 7: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 26

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Mas quando o comprimento da tela for menor do que 800px, podemos inserir as propriedades de

visibilidade do menu. Os subitens ficarão visíveis somente quando ocorrer o hover dos itens do menu. Estas

propriedades são bem simples, e alteram altura height do menu de 0 a 100%, de acordo com o checkbox1. Outra

propriedade importante é flex-direction, que deve ser column (vertical).

@media screen and (max-width:800px) { .barra {flex-direction:column; align-items:stretch;} .toggle {display:block; width:100%; text-align:center; font-size:30px; cursor:pointer;

color:#595959; background:#dbdbdb;} #checkbox1:checked + label .menu li {visibility:visible;} #checkbox1:checked + label .menu {height:100%;} .menu ul{display:flex; flex-direction:column;} ul .subitens {display:none;} .menu{width:100%; height:0;} .menu li {visibility:hidden; border-right:none;} .menu li:hover .subitens {position:relative;}

}

Antes de inserir os demais elementos da página, vamos modificar os backgrounds das barras (menu, logo e

compartilhar) com preenchimentos gradientes.

Para criar o efeito de gradiente linear, podemos usar ângulos ou escrever a direção do efeito:

background:linear-gradient(to right, red, yellow); (para a direita)

background:linear-gradient(to bottom right, red, yellow); (diagonal)

background:linear-gradient(-40deg, red, yellow); (com 40o)

background:linear-gradient(red, yellow, green); (sem indicar o sentido, fica de cima para baixo) background:linear-gradient(to right, red,orange,yellow,green,blue,indigo,violet);

Podemos usar o padrão rgb ou rgba (com a última coordenada indicando opacidade).

background:linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));

background:repeating-linear-gradient(red, yellow 10%, green 20%); (com repetição) background:linear-gradient(45deg, rgb(0,0,0) 0%, rgb(0,39,21) 40%, rgb(21,222,333) 100%);

Os atributos para criar efeitos de gradiente radial são parecidos com os lineares:

background:radial-gradient(red, yellow, green); (cria elipses de acordo com o tamanho da div) background:radial-gradient(red 5%, yellow 15%, green 60%);

background:radial-gradient(circle, red, yellow, green); (com circunferência)

background:repeating-radial-gradient(red, yellow 10%, green 15%); (com repetição)

Para definir o centro da circunferência, usamos o atributo farthest-side:

background:radial-gradient(farthest-side at 75% 75%, red, yellow, black);

Como nem todos os navegadores suportam o preenchimento gradiente, recomenda-se que sejam definidos

dois backgrounds para cada elemento: um com uma cor sólida (hexadecimal ou RGB) e logo a seguir o gradiente.

Podemos criar um efeito gradiente nos itens do menu, e ao passar o cursor do mouse sobre os botões o

efeito gradiente pode ser invertido. Retire as propriedades padding de menu li e coloque-as em menu li a para criar

a margem interna dos botões:

.menu li {background:linear-gradient(-40deg, red, white); ...} .menu li a:hover {background:linear-gradient(-40deg, white, red); ...}

Para criar animações com os elementos das divs do site, podemos usar a função @keyframes. Por exemplo,

vamos colocar a propriedade de animação AnimaLogo na classe logo para mudar o tamanho e a cor da fonte.

.logo {animation:AnimaLogo 5s linear infinite alternate; ...}

Page 8: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 27

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

@keyframes AnimaLogo { 0% {font-size:0; color:white;} 100% {font-size:45px; color:blue;} }

Seja qual for o elemento, as funções de animação serão similares, todas inseridas no arquivo CSS. Vamos

criar um efeito de animação no fundo de um elemento do site. Por exemplo, vamos fazer no fundo do site, ou seja,

com a tag body em CSS. O efeito será de mudança da posição do fundo que tem efeito gradiente.

Para funcionar, teremos que aumentar o tamanho do background do body, para mudarmos o fundo usando

a propriedade background-position para animação (AnimaFundo, com 10 segundos de duração, transição ease,

alternado e repetição infinita). O CSS do body fica da seguinte forma:

html, body {height:100%;} body {width:90%; margin:auto; background:linear-gradient(45deg, rgba(250,0,0,0.95), rgba(0,250,0,0.95),

rgba(0,0,250,0.95)); background-size:200% 200%; animation:AnimaFundo 10s ease infinite alternate;}

Vamos usar a animação para fazer o fundo do site “mexer” variando entre os cantos do site (body).

Usamos o atributo keyframes para inserir os efeitos da animação.

@keyframes AnimaFundo { 0% {background-position:0% 0%; color:white;} 25% {background-position:100% 0%;} 50% {background-position:0% 50%;} 75% {background-position:100% 0%;} 100% {background-position:0% 0%; color:blue;} }

Para animar uma imagem de fundo de uma div, podemos usar a propriedade background-position e fazê-la

mudar de 0% até 100% da posição horizontal x ou vertical y. Dada a imagem de nuvens abaixo (clouds.png) que tem

2247x190px, podemos colocar os efeitos de animação da seguinte forma:

.barra {animation:AnimaBarra 40s linear infinite; background:url(imagens/clouds.png); ...}

@keyframes AnimaBarra { 0% {background-position:0% 20%;} 50% {background-position:50% 20%;} 100% {background-position:100% 20%;} }

body

0% 0% 100% 0%

0% 100% 100% 100%

Page 9: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 28

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Para fazer a imagem ficar com efeito de vai e vem, podemos colocar a propriedade alternate no CSS da

classe menu. Para fazer a animação andar somente no sentido contrário, basta colocar a propriedade reverse ao

invés de alternate.

Agora vamos inserir uma imagem de fundo no banner e usar a propriedade display flex para criar uma logo

sobre o banner. O banner pode ter uma altura mínima definida.

Para que a imagem ocupe todo o espaço do banner, vamos usar a propriedade background-size de 100%

(cobre width) ou cover (cobre width e height), sem repetição.

.banner {display:flex; min-height:400px; background:url(imagens/fundo.png) no-repeat;

background-size:100%; align-items:center; justify-content:center;}

Para ajustar a posição da imagem do fundo do banner, podemos usar a propriedade background-position:

left, top. Por exemplo, para deixar a imagem deslocada 100px e 200px em relação à esquerda (x) e ao topo (y),

respectivamente, utilizamos background-position: 100px, 200px. Estas medidas podem ser usadas com percentuais.

Para inserir uma div de descrição do site, podemos colocá-la por cima do banner com a propriedade

position:relative, indicando quais são as distâncias do topo (y) e à esquerda (x).

O tamanho desta div pode ser definido usando a propriedade flex:0.5, que indica que a div tem o tamanho

da metade da div mãe (banner). Para colocar um fundo preto com opacidade, basta usar a cor RGBA. Para mudar a

cor de fundo desta div ao passar o cursor do mouse por cima, basta colocar a propriedade hover no CSS.

.descricao {flex:0.5; padding:10px; position:relative; top:250px; left:20%; background:rgba(0,0,0,0.4);}

.descricao:hover {background:rgba(0,0,0,0.7);}

A div mãe do site é a boxSite. Ela serve para agrupar todo o site, e pode ter uma borda para delimitar o

fundo e o conteúdo.

.boxSite {box-shadow:4px 4px 15px black;}

Agora vamos começar a estruturar o conteúdo da página. Para que o layout continue responsivo, vamos criar

uma classe mãe para as classes conteúdo e lateral: barra2.

Lateral

Podemos criar novas divs para inserir conteúdos em caixas dimensionáveis automaticamente. Ao usar a

propriedade flex:1 300px, todas as caixas estarão distribuídas com espaçamentos iguais em largura e altura, com

comprimento mínimo de 300px.

Para que as caixas não fiquem grudadas, colocamos margens internas (padding) e externas (margin). A

propriedade flex-direction:column é necessária para encaixar os elementos de cada caixa um abaixo do outro.

.barra2 {display:flex;} .conteudo {display:flex; flex:3; background:khaki; flex-wrap:wrap;} .box {border-radius:10px; flex:1 300px; flex-direction:column; color:#171e42; padding:10px; margin:10px;

background:linear-gradient(rgba(0,0,255,0.5), rgba(0,0,255,0.1)); } .lateral {flex:1; background:gold; align-items:center; justify-content:center;}

conteúdo

<div class="conteudo"> <div

class="lateral">

<div class="barra2">

Page 10: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 29

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Vamos usar a propriedade box-shadow para criar uma sombra em cada caixa. O padrão para box-shadow é

de uma sombra para fora do elemento, mas se você quiser uma sombra interna basta colocar a palavra inset na

propriedade box-shadow. O exemplo a seguir é de uma sombra vermelha com 3px à direita e 3px abaixo da caixa,

com raio de sombra 7px.

.box {box-shadow:3px 3px 7px red; ...}

O exemplo a seguir é de uma sombra externa verde e outra interna azul.

.box {box-shadow:4px 4px 10px grey, 6px 6px 10px blue inset; ...}

Para criar títulos que apareçam acima dos conteúdos das caixas podemos usar margens para separá-los dos

demais conteúdos.

.titulo {margin-bottom:10px; background:rgba(0,153,255,0.5); color:white; padding:5px;}

Insira imagens e videos nas caixas do nosso site. Insira uma tabela na lateral da página, com cores diferentes

nas linhas pares e ímpares. Coloque um título para a barra lateral e logo a seguir insira uma tabela. A propriedade

nth-child é usada para diferenciar os pares (even) dos ímpares (odd).

tr:nth-child(even) {background:linear-gradient(0deg, rgba(255,0,0,0.4),rgba(255,0,0,0));} tr:nth-child(odd) {background:linear-gradient(180deg, rgba(255,0,0,0.4),rgba(255,0,0,0));}

Podemos colocar um efeito hover para mudar as cores das linhas desta tabela.

tr:nth-child(even):hover {background:linear-gradient(180deg, rgba(0,0,255,0.4),rgba(0,0,255,0));} tr:nth-child(odd):hover {background:linear-gradient(0deg, rgba(0,0,255,0.4),rgba(0,0,255,0));}

Agora vamos formatar o rodapé. Pode ser usada uma cor ou imagem de fundo e as informações finais da

página. Usaremos display:flex e alinhamentos para centralizar o texto na div de rodapé.

.rodape {background:bisque; display:flex; justify-content:flex-start; padding:20px; color:black;}

Vamos criar mais efeitos de animação no site. Os elementos de páginas que podemos animar são width,

height, padding, margin, text-shadow, background, font-size e color. Para colocar títulos do site e mudar a cor da

fonte e a sombra do texto com um novo efeito de animação, basta criar o seguinte código em CSS:

@keyframes AnimaTitulo { 0% {text-shadow:2px 2px 2px #CCC; color:rgba(255,255,255,0);} 25% {text-shadow:2px -2px 2px #CCC; color:rgba(255,255,255,0.25);} 50% {text-shadow:-2px -2px 2px #CCC; color:rgba(255,255,255,0.5);} 75% {text-shadow:-2px 2px 2px #CCC; color:rgba(255,255,255,0.75);} 100% {text-shadow:2px 2px 2px #CCC; color:rgba(255,255,255,1);} }

Os efeitos de animação do CSS dos títulos ficam assim:

.titulo {animation:AnimaTitulo 7s ease infinite alternate; ...}

Outro efeito que fica interessante para o título principal de um banner de site é de mudar o tamanho da

fonte (font-size) junto com a mudança da cor (color) usando opacidade.

Quando formatamos o tipo de fonte do nosso site, corremos o risco de que o computador do visitante do

site não tenha a fonte instalada. Para contornar este problema, podemos utilizar fontes online para formatar nosso

site. O site mais usado para inserir fontes diferentes das usuais é o Google Fonts.

https://fonts.google.com

Page 11: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 30

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Ao escolher as fontes, colocamos a tag link criada com as fontes escolhidas dentro da tag <head> do site: <link href='https://fonts.googleapis.com/css?family=Open+Sans|Raleway|PT+Sans' rel='stylesheet'

type='text/css'>

Para indicar no CSS a fonte de todos os itens do site, basta usá-la da seguinte forma:

* {font-family:'Open Sans';}

Agora utilizaremos as principais transformações geométricas do CSS para criar um efeito simples de galeria

de imagens. As transformações mostradas a seguir podem ser usadas em diversos elementos do HTML (por

exemplo, div, p e img).

As principais transformações geométricas são: rotação (rotate), translação (translate), escala (scale) e

cisalhamento (skew).

Vamos testar estas transformações nas imagens inseridas na div box1. Vamos começar pelo cisalhamento de

uma imagem, transformação que será ativada quando o visitante passar o cursor do mouse por cima de cada

imagem. A primeira coordenada é o ângulo de deformação em relação ao eixo y (mantendo-se os lados paralelos ao

eixo x sem deformação) e a segunda coordenada é o ângulo de deformação em relação ao eixo x (mantendo-se os

lados paralelos ao eixo y sem deformação):

transform:skew(30deg,0deg);

transform:skew(-30deg,0deg);

transform:skew(0deg,20deg);

Para que a transformação tenha um efeito gradativo, podemos colocar a propriedade transition no CSS:

.box img:hover {transform:skew(45deg,0deg);}

Para que o efeito na volta da imagem para a galeria não seja brusco, podemos usar a propriedade transition

para as imagens originais do box1:

.box img {transition:transform 0.5s linear; ...}

Mude o ângulo de cisalhamento em x para 180o. Faça um teste com ângulo 0

o para x e 180

o para y.

Outra transformação geométrica que vamos usar é a mudança de escala (homotetia). Assim como o skew, o

scale pode ser usado para mudar a escala em x, y ou em ambos os eixos.

transform:scale(0.8);

transform:scale(0.8,1.4);

20o

30o

30o

Page 12: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 31

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Vamos usar o scale junto com o skew para criar um efeito de galeria de imagem com a CSS a seguir: .box img:hover {transform:scale(3.5) skew(180deg,0deg);}

Outra transformação importante é a rotação, feita com o centro de rotação no centro do elemento e o

ângulo relativo ao eixo x. O elemento rotacionado mantém todas as suas medidas, sem deformações e apenas muda

de posição em relação ao eixo x.

transform:rotate(20deg);

A translação é feita a partir do ponto que a figura se encontra até o ponto com deslocamentos dx e dy nos

eixos x e y. A notação é translate(dx,dy).

Podemos usar a translação para arrumar o efeito da nossa galeria com relação às imagens que ficam mais

próximas dos cantos da página. Neste caso, podemos colocar uma translação com percentual, o skew e scale.

.box img:hover {transform:scale(3.5) skew(180deg,0deg) translate(25%,0);}

Quando usarmos scale com valores (-1,1) teremos o efeito de espelhamento da imagem da figura em torno

do eixo y; com valores (1,-1) teremos o espelhamento da imagem em torno do eixo x. A imagem que colocamos na

descrição do site pode ser usada para testarmos estes efeitos de espelhamento junto com rotações com uma nova

animação no site.

.descricao img {animation:AnimaDescr 7s linear infinite alternate;}

Vamos rotacionar a imagem no começo da animação, além de usarmos opacidade gradativamente e

mudança de escalas. No final da animação, usaremos o efeito de espelhamento.

@keyframes AnimaDescr { 0% {opacity:0; transform:rotate(-30deg);} 25% {opacity:0.25; transform:scale(0.92);} 50% {opacity:0.5; transform:scale(0.95);} 75% {opacity:0.75; transform:scale(5);} 100% {opacity:1; transform:scale(-1,1);} }

Para finalizar animações do site, crie efeito no logo do site, com rotação e escala. Use efeito de escala em

elementos iframe, assim como fizemos com a galeria de imagens.

Para deixar o nosso site responsivo, devemos fazer alguns testes para verificar quais serão as divs que

sofrerão ajustes de comprimento para não afetar a visualização do seu site. Assim como fizemos na barra, a barra2

também deve ter a direção flex modificada para column e alinhamento stretch. Verifique se outros elementos do

site não precisam de modificações para telas menores.

@media screen and (max-width:800px) {

.barra, .barra2 {flex-direction:column; align-items:stretch;} }

Vale lembrar que com as configurações CSS feitas para telas menores, nosso menu que originalmente é

horizontal passa a ser um menu vertical. Logo, para fazer um site com menu vertical, podemos usar a mesma

estrutura, com direção flex column.

Nosso site ficará com um layout parecido com o apresentado a seguir. Dependendo do tamanho dos Box,

eles podem aparecer um abaixo do outro, por causa do display flex.

20o

Page 13: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 32

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

logo

menu

compartilhar

banner

Lateral

rodapé

Atividade 6: Utilize nosso site tableless formatado para inserir conteúdos com um tema, criando 3 páginas com

imagens, vídeos e animações. Edite as cores de animações e backgrounds para os sites usando CSS.

Exercício 10: Crie um site com layout tableless (div) similar ao exemplo a seguir (index.htm), com os seguintes

elementos:

- logo que flutue sobre o banner;

- use CSS para criar efeitos de gradiente e transparência em elementos do site;

- use animação para os elementos principais do site (menu, logo ou body);

- na barra lateral, crie uma galeria de imagens com efeitos de animação hover;

- insira vídeos com iframe, com efeitos de animação hover;

- use border-radius, text-shadow e box-shadow para formatar elementos do layout;

- insira conteúdos para 3 páginas com este layout, com o mesmo tema.

- em uma das páginas, crie um mapeamento do Centro Politécnico, com links de imagens e descrições de blocos e

principais pontos de referência. Utilize CSS e tags para criar caixas de informações sobre os locais escolhidos.

caixa

banner

compartilhar

menu

Galeria de Imagens

rodapé

conteúdo

<div class="rodape">

<div class="boxSite"> <div class="barra">

conteúdo

<div class="conteudo"> <div class="lateral">

<div class="menu">

<div class="logo">

<div class="box">

Page 14: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 33

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Uma forma para criar logotipos e gráficos em páginas da internet é o

uso do formato SVG (Scalable Vector Graphics), que possui melhor

resolução do que imagens em jpg, png ou bmp.

O formato SVG é basicamente um conjunto de descrições

matemáticas em um arquivo XML que define uma forma geométrica. Desta

forma, o desenho é um conjunto de vetores criados com instruções

numéricas.

Quando trabalhamos com imagens png, jpg ou bmp, as formas estão colocadas em uma grade de pixels, que

perde a resolução com mais facilidade. Muitos softwares permitem a criação de imagens em svg. A partir do código

fonte do arquivo SVG criado, podemos extrair somente as tags importantes para carregá-las em nossos sites.

As tags SVG mais simples são recomendadas, pois são carregadas mais rapidamente nos navegadores. A

seguir, veremos como as tags nativas SVG são estruturadas através de seus comandos.

Dois comandos muito utilizados são M e L:

M (move to) define a posição do início de um desenho.

L define uma linha a partir do ponto M até o ponto indicado.

Quando qualquer comando for usado com letra minúscula, a linha é desenhada com a coordenada relativa

ao ponto M. As letras maiúsculas definem as coordenadas absolutas.

As tags SVG necessitam de janelas de visualização, que são definidas logo no início da lista de comandos. Em

um site, podemos criar várias imagens SVG independentes.

Exemplo: Para desenhar a linha vermelha que começa em (70,100) e termina em (200,200) podemos usar path

(caminho) e definir o comando com letra L maiúscula para usar coordenadas absolutas.

<svg width="300" height="300">

<path d="M70,100 L200,200" stroke="red" stroke-width="3"/> </svg>

As propriedades stroke e stroke-width definem a cor e a

espessura da linha, respectivamente. Para usar coordenadas relativas,

usamos as diferenças das coordenadas absolutas dx e dy e a letra l

minúscula:

<svg width="300" height="300">

<path d="M70,100 l200,200" stroke="red" stroke-width="3"/> </svg>

Os comandos line e polygon podem ser usados para criar linhas e

polígonos. A vantagem de se usar o caminho path é que os elementos podem ser mesclados em partes retas e

curvas com a mesma tag. Ao importar algum desenho SVG é comum aparecerem estas tags junto com as tags path.

A tag line define o segmento que une um ponto (x1,y1) com o ponto (x2,y2). A tag polygon possui a

sequência dos vértices do polígono, como mostra o exemplo a seguir.

<svg width="300" height="300">

<line x1="70" y1="100" x2="200" y2="200" stroke="yellow" stroke-width="0.8"/> <polygon points="10,10 20,10 20,20 15,15 10,20" stroke="blue" stroke-width="0.2" fill="green"/>

</svg>

9. SCALABLE VECTOR GRAPHICS - SVG

x

y

(70,100)

(200,200) dx=130

dy=100

Page 15: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 34

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Ao colocar um desenho SVG dentro de uma tag mãe, ele pode herdar tamanhos e cores. Logo, podemos usar

percentuais para definir a janela de visualização de um SVG. Assim, nossos desenhos também ficam “responsivos”.

A criação dos desenhos pode ser feita via tags (inline) ou softwares como CorelDraw, Illustrator. Podemos

fazer as tags online também através de aplicativos como o DrawSVG. Depois de exportar o arquivo com as imagens,

selecionamos as tags principais e inserimos os desenhos em nossas páginas.

http://www.drawsvg.org/drawsvg.html

Vamos criar uma página com desenhos SVG dentro das tags logo e banner. Crie também uma tag de

conteúdo com caixas (box) para colocarmos as imagens SVG.

caixa

logo

banner

O comando H com um valor K define uma linha horizontal

desde o ponto M(xM,yM) até a coordenada (K,yM). Quando usado em

minúsculo com um valor k, a linha horizontal começa em M e vai até o

ponto (xM+k,yM). O comando V desenha linhas verticais, com o mesmo

raciocínio do comando H.

Exemplo: Para desenhar a linha vermelha que começa em (70,70) e

termina em (70,170) podemos usar path (caminho) e definir o

comando com letras H e V maiúsculas para usar coordenadas

absolutas:

<svg width="50%" height="50%">

<path d="M70,70 H170 V170 H70" stroke="red" stroke-width="3" fill="none"/> </svg>

Para usar coordenadas relativas, usamos as diferenças das coordenadas absolutas dx e dy e as letras h e v

minúsculas:

<path d="M70,70 h100 v100 h-100" stroke="red" stroke-width="3" fill="none"/>

O comando Z desenha uma linha que fecha uma poligonal.

A propriedade fill-opacity altera a transparência da figura e varia de 0 a 1.

A propriedade stroke-dasharray serve para criar linhas tracejadas, e pode ser usada como um vetor com os

valores das distâncias de linhas contínuas e tracejadas, como mostrados nos exemplos a seguir.

<path d="M100,10 h100" stroke="blue" stroke-width="1" stroke-dasharray="10 5 15 8"/>

<path d="M100,10 h100" stroke="red" stroke-width="1" stroke-dasharray="10 5"/>

Vamos desenhar um triângulo vermelho com linha cinza e coordenadas iniciais M100,100.

<path d="M100,100 l100,100 h-50z" stroke="gray" fill="red" fill-opacity="0.7"/>

(70,70)

x

y

(170,70)

dx=100

dy=100

(170,170)

)

<div class="barra">

<div class="boxSite">

<div class="logo"> <div class="banner">

Page 16: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 35

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Quando você tem o desenho todo feito com coordenadas relativas, ou seja, todos os comandos com letras

minúsculas, basta modificar a coordenada do ponto inicial M para você mover o desenho todo para outra posição da

tela. Usando-se DrawSVG ou CorelDraw podemos exportar desenhos com as coordenadas relativas.

Se as coordenadas de todos os vértices são conhecidas, podemos desenhar as figuras diretamente com as

tags simples mostradas.

Exercício 11: Desenhe as figuras dadas abaixo com as medidas e coordenadas indicadas em uma tag de conteúdo

do site. Utilize a propriedade stroke-dasharray para mudar os tracejados das figuras e coloque todas

as imagens dentro de uma mesma tag <svg>.

Use a tag <g id=”nome”> para criar grupos de cada desenho.

As propriedades de preenchimento gradiente podem ser usadas criando tags <defs> com id. No exemplo a

seguir, criamos as definições dos efeitos e a propriedade fill é usada com os efeitos.

<svg width="100" height="200"> <defs>

<linearGradient id="linear1" x1="0%" y1="0%" x2="100%" y2="100%"> <stop offset="0%" stop-color="cyan"/> <stop offset="35%" stop-color="red"/> <stop offset="70%" stop-color="pink"/> <stop offset="100%" stop-color="cyan"/> </linearGradient> <linearGradient id="linear2" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" stop-color="cyan"/> <stop offset="35%" stop-color="red"/> <stop offset="70%" stop-color="pink"/> <stop offset="100%" stop-color="cyan"/> </linearGradient> <radialGradient id="radial1" cx="75%" cy="25%" r="90%"> <stop offset="0%" stop-color="rgb(250,0,0)"/> <stop offset="50%" stop-color="rgb(150,100,0)"/> <stop offset="100%" stop-color="rgb(50,200,0)"/> </radialGradient>

</defs> <path d="M10,10 h50 v50 h-50z" stroke="none" fill="url(#linear1)"/> <path d="M10,60 h50 v50 h-50z" stroke="none" fill="url(#linear2)"/> <path d="M10,120 h50 v50 h-50z" stroke="none" fill="url(#radial1)"/>

</svg>

M(100,350)

30 30

20

80

x

y

M(100,200) 120

90

45

30

70 5

30

30 20

80

80

45

10

20

45 M(300,200) 160

50

50

5 10

M(200,350)

60

80

80

M(480,220)

24

100

24

56

14 14 28

14

M(500,150)

10

40

15

80 80

20

5

Page 17: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 36

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Exercício 12: Crie tags defs para criar efeitos gradientes nas figuras que você desenhou do Exercício 11.

Exercício 13: Desenhe as seguintes figuras com os comandos M, L, H, V e Z, com coordenadas relativas a um ponto

inicial M, em tags <svg> diferentes. Use os preenchimentos com tags defs para efeitos com gradiente.

No exemplo do desenho do trator, vamos usar a tag <g id=”elemento”> para criar um grupo para o

carregador e outro para o restante do desenho. Assim, poderemos animar este desenho posteriormente. Coloque-o

em uma tag de caixa, abaixo da tag do banner, como se fosse uma galeria de imagens do site. Use as propriedades

CSS da Atividade 6 para deixar as caixas “responsivas”. <svg width="300" height="150"> <g id="trator" stroke-linejoin="round">

<path d="M100,100 l15,20 h20 v5 h-35 q-5,0 -5,5 v10 q0,5 5,5 h100 q5,0 5,-5 v-10 q0,-5 -5,-5 h-32.3 v-5 h58 l8.5,-7 v-24.83 h-20 v-16 h5 v-6 h-20 v6 h5 v16 h-32 v-60 l-64,13 v7 h40 v34 h-20 v-10 h-8 v19 l-10,9 l-4,-6" stroke="black" fill="yellow"/> <g id="carregador">

<path d="M100,100 v-10 l-30.21,-9 l-16,25 h-20 l12,-12.63 v-48 h8 l19,14 v13 l33.5,12 v10" stroke="black" fill="yellow"/>

</g> </g> </svg>

Agora vamos criar filtros para criar mais efeitos nos nossos desenhos. O primeiro é o de desfocar

(esfuminho) que é chamado de filtro Gaussiano, que deve ser colocado dentro da tag <defs>. O exemplo a seguir

pode ser colocado em um dos desenhos do Exercício 13 ou no próprio trator.

<defs>

<filter id="filtro1" height="200%" width="200%"> <feGaussianBlur in="SourceGraphic" stdDeviation="1"></feGaussianBlur>

</filter> </defs>

M100,100

Page 18: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 37

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

O atributo in=”SourceGraphic” quer dizer que o filtro será aplicado ao desenho original. Indicaremos o filtro

dentro da respectiva div de path do desenho através do link do filter. Os números negativos em x e y indicam que o

efeito pode ultrapassar os limites do desenho, evitando falhas nos contornos.

<g id="trator" stroke-linejoin="round" filter="url(#filtro1)">

O atributo in=”SourceAlpha” aplica um filtro de sombra da figura, como uma máscara do desenho original.

Quando precisamos mesclar vários filtros, usamos a tag <feMerge> com as referências dos resultados dos filtros. O

exemplo a seguir mistura efeito de sombra com a imagem desfocada da figura.

<filter id="filtro2" x="-20" y="-20" height="50" width="50">

<feGaussianBlur in="SourceAlpha" stdDeviation="2" result="sombra"></feGaussianBlur> <feGaussianBlur in="SourceGraphic" stdDeviation="0.5" result="desfocado"></feGaussianBlur> <feMerge>

<feMergeNode in="sombra"/> <feMergeNode in="desfocado"/>

</feMerge> </filter>

Para deixar a sombra da figura deslocada usamos a propriedade <feOffset>. <filter id="filtro3" x="-20" y="-20" height="50" width="50">

<feGaussianBlur in="SourceAlpha" stdDeviation="2" result="desfocado"></feGaussianBlur> <feOffset in="desfocado" dx="5" dy="5" result="sombra"></feOffset> <feMerge>

<feMergeNode in="sombra"/> <feMergeNode in="desfocado"/> <feMergeNode in="SourceGraphic"/>

</feMerge> </filter>

Exercício 14: Utilize tags defs para criar filtros nas figuras que você desenhou do Exercício 13.

Agora vamos criar uma forma de redimensionar os nossos desenhos svg do exercício 13. Crie uma borda

para visualizarmos os limites de cada desenho usando a função de borda em CSS:

svg {box-shadow:0 0 1px blue;}

Ao criar ícones ou logos estáticos, o ideal é que a imagem fique centralizada, ocupando todo o espaço

disponível da tag svg. Calculando as coordenadas do desenho, podemos notar que o ponto M pode ser alterado,

assim como o comprimento e a largura da tag svg. O resultado fica o seguinte:

x

y

M100,100

width=300

height=150

Page 19: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 38

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Ao redimensionar a tela do navegador, a figura

sempre manterá os valores de altura e largura

definidos. Para evitar que o desenho fique muito

pequeno em telas grandes ou muito grande em telas

pequenas, podemos usar um percentual somente na

largura do svg (como fizemos nas tags de imagens nas

primeiras aulas) e usar a propriedade ViewBox das

svgs.

Voltamos ao primeiro exemplo, com o ponto M(100,100). Para criarmos uma ViewBox que tenha o mesmo

efeito de mudarmos as coordenadas do ponto M, criamos uma ViewBox com coordenadas iniciais (30,25), com

largura de 210 e altura 125. Desta forma, podemos colocar o tamanho da largura (width) com percentual em relação

aos elementos da página HTML, como fizemos com as tags de imagens e vídeos.

<svg width="50%" height="50%" viewbox="30 25 210 125">

Exercício 15: Arrume as janelas de visualização do banner e dos desenhos feitos no Exercício 13 usando a

propriedade ViewBox de cada svg.

Para desenharmos retângulos, círculos e elipses, usamos as tags <rect> e <circle>.

Para incluir texto, usamos a tag <text>.

<rect x="10" y="50" width="10" height="100" fill="orange" stroke="grey" stroke-width="1"/> <circle r="50" cx="50" cy="70" fill="rgb(100%, 90%, 0%)" stroke="black" stroke-width="1"/> <ellipse cx="100" cy="75" rx="60" ry="30" fill="orange" stroke="blue" stroke-width="1"/> <text x="50" y="120" font-weight="bold" fill="aqua" stroke="blue" stroke-width="2"

font-family="comic sans ms" font-size="15px">Seu texto aparece aqui</text>

Agora vamos começar a criar nosso banner com uma paisagem. Podemos criar os desenhos via tags ou.

desenhar em um software, exportar o arquivo como svg e estudar quais componentes do arquivo devem ser usados

no HTML. Lembre-se que muitas linhas de código geradas por softwares são desnecessárias e devem ser excluídas.

x

y

M100,100

(30,25)

height=125

width=210

ViewBox

x

y

M70,75

width=210

height=125

Page 20: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 39

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Alguns exemplos de banners que podemos observar são os seguintes:

9.1. Transformações com SVG

Ao criar um grupo com a tag <g> podemos usar uma transformação geométrica nos elementos que estão

nesta tag para modificá-los simultaneamente. As transformações são: rotação (rotate), translação (translate), escala

(scale) e cisalhamento (skewX e skewY), similares às que usamos com CSS nas galerias de imagens e vídeos.

Vamos testar estas transformações para criar um banner do nosso site index.htm. Podemos fazê-las em tags

de grupos <g>, ou diretamente em elementos de caminhos path, círculos ou retângulos. A notação para a rotação de

ângulo θ a partir do ponto (x,y) é a seguinte:

<g transform="rotate(θ,x,y)">

Quando as coordenadas x e y não são informadas, a rotação é feita a partir da origem das coordenadas (0,0),

e a tag fica desta forma:

Page 21: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 40

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

<g transform="rotate(θ)">

A translação é feita a partir do ponto que a figura se encontra até o ponto com deslocamentos dx e dy nos

eixos x e y. A notação é a seguinte:

<g transform="translate(x,y)">

A mudança de escala (redimensionamento) é feita a partir do ponto da figura mais próximo da origem (0,0).

Se for colocada apenas com um valor, é feita a mudança de escala igual para x e y. Para mudança diferente de

escala, basta colocar primeiro o valor de mudança de escala em x e depois em y. As notações são as seguintes:

<g transform="scale(d)"> ou <g transform="scale(dx,dy)">

Quando usarmos a mudança de escala com valores (-1,1) temos o efeito de espelhamento da imagem da

figura em torno do eixo y; com valores (1,-1) teremos o espelhamento da imagem em torno do eixo x:

<g transform="scale(-1,1)"> ou <g transform="scale(1,-1)">

A função de cisalhamento cria o efeito de inclinação de ângulo θ em x ou y. A notação é a seguinte:

<g transform="skewX(θ)"> ou <g transform="skewY(θ)">

Podemos criar também uma sequência de transformações para uma figura ou grupo. Basta colocar na tag a

sequência das transformações separadas por espaço, como fizemos em CSS. Por exemplo, uma translação de 20 em

x e 40 em y seguida por uma rotação de 45o em torno do ponto (70,80) ficaria assim:

<g transform="translate(20,40) rotate(45,70,80)">

Exercício 16: Utilize transformações para criar desenhos no nosso banner de um sol e das pás de um moinho.

Podemos usar a mesma ideia do desenho do sol para desenhar engrenagens ou ícones. Para deixar os cantos

arredondados em retângulos, usamos os atributos rx e ry.

70

20

M(20,100) h50

v-80

R10

R5

15 20 30

10

55

5

x

y

(50,50)

15

R25

Page 22: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 41

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

9.2. Arcos e curvas com SVG

Para desenharmos curvas de Bezier, usamos as propriedades C, Q, T ou S. Por exemplo:

<path d="M120,70 c-10,50 120,50 130,0" stroke="blue" stroke-width="2" fill="none"/>

<path d="M120,70 c-10,50 150,50 130,0" stroke="blue" stroke-width="2" fill="none"/>

M(120,70)

(-10,50) (150,50)

(130,0)

M(120,70)

(-10,50) (120,50)

(130,0)

x

y

(144,125)

(75,60)

r=30

r=20

x

y

(50,50)

R30

R35

M(40,20)

10

10

x

y

(50,50)

M(40,40)

40

Page 23: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 42

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

<path d="M120,70 q50,80 130,0" stroke="blue" stroke-width="2" fill="none"/>

A função Q pode ser usada para criar cantos arredondados nos desenhos. Por exemplo:

<path d="M120,70 h50 q10,0 10,10 v20 q0,10 -10,10 h-30" stroke="blue" stroke-width="2" fill="none"/>

Uma tendência no desenho de logomarcas em SVG é a simplificação dos elementos nativos. Um exemplo é a

mudança da logo do Google, que antes possuía muitos elementos com curvas Bezier e seus respectivos pontos de

controle.

Por isso, podemos evitar o uso de muitos elementos com curvas Bezier, tentando sempre usar arcos,

circunferências e linhas para nossos desenhos.

Como alguns cantos arredondados podem tornar-se trabalhosos para utilizar a curva de Bezier (por exemplo,

ângulos maiores do que 90o), o mais recomendável é criar arcos de circunferência ou elipse com o uso da ferramenta

a com os seguintes atributos:

a rx,ry θ tamanho,sentido x,y

onde:

rx e ry são os raios em relação aos eixos;

θ é o ângulo de rotação em relação ao eixo x;

tamanho é 0 quando você quer o arco menor, e 1 quando precisar do arco maior;

sentido é 0 quando for desenhado no sentido anti-horário e 1 quando for no sentido horário;

x e y são as coordenadas finais do arco.

(120,70)

30

50

10

10

10 10

M(120,70)

(50,80)

(130,0)

Page 24: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 43

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Voltando ao exemplo anterior, podemos fazer os cantos arredondados da figura acima com arcos:

<path d="M120,70 h50 a10,10 0 0,1 10,10 v20 a10,10 0 0,1 -10,10 h-30" stroke="blue" fill="none" stroke-

width="2"/>

Para desenharmos um arco-iris, podemos usar uma janela de visualização de 100x100, com um ponto inicial

do arco vermelho em (10,70). Se considerarmos o primeiro arco com raio de 50, podemos diminuir os próximos raios

de acordo com a espessura usada em todos os arcos. Neste exemplo, utilizamos a espessura 4.

<g id="arcoiris" stroke-width="4" opacity="0.8">

<path d="M10,70 a50,50 0 0,1 50,-50" fill="none" stroke="red"/> <path d="M14,70 a46,46 0 0,1 46,-46" fill="none" stroke="orange"/> <path d="M18,70 a42,42 0 0,1 42,-42" fill="none" stroke="yellow"/> <path d="M22,70 a38,38 0 0,1 38,-38" fill="none" stroke="green"/> <path d="M26,70 a34,34 0 0,1 34,-34" fill="none" stroke="aqua"/> <path d="M30,70 a30,30 0 0,1 30,-30" fill="none" stroke="blue"/> <path d="M34,70 a26,26 0 0,1 26,-26" fill="none" stroke="indigo"/>

</g>

Exercício 17: Utilize as ferramentas de linhas, arcos e/ou curvas Bezier Q e C para criar os desenhos a seguir.

10

10 10

10 10

10

35

130 10

10

20

45

55

20

20 30 10

10 10

15

8 8

15 40

10 10

79

10

(120,70)

30

50

10

10

10 10

Início

1,1

Fim x,y 1,0

0,0

0,1

(10,70)

(50,-50)

R50

R42 R46

(46,-46) (42,-42)

Page 25: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 44

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

R10

60

5

20

45

40

80 70

45

12

25 15

10

60

90

20

8

5

5 30

35

15

35

R40 R25

a110,110 0 0,1 200,-50

x

y

(100,-10)

M(30,150)

(0,40)

(40,40)

(30,-30)

(0,-40)

R30

R20

R20

R20

R40

x

y

(250,50)

(200,-50) M(100,150)

(100,100)

(-150,100) (-250,0)

(-150,-100)

R110

R60

R90

R170

R80

R50

R140

Page 26: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 45

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Os desenhos a seguir são adaptados do trabalho de Dorota Pankowska, que mostra 13 desenhos de animais

com 13 arcos de circunferências. Tais desenhos podem ser feitos com tags SVG similares às que usamos para

desenhar as nuvens.

Illustating animals with 13 circles, Dorota Pankowska (2016)

(-3.1, 2)

M(20,80) (0,20)

(14.2, -51.2)

(0, 34.5)

(-6.9, -27.9)

R33

R115

R38

R1.5

R31

R12

R21

R10

R21

R12

R38

(4.8, -17.3)

(-7, -17.7) (-18.6, 0)

(-7.4, 17.7)

(5.2, 17.2)

(-1, 42.7)

(33,17) (41,17)

Page 27: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 46

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

9.3. Animações com SVG

A animação com tags SVG é bem simples e exige apenas atenção para inserirmos corretamente os efeitos.

Uma informação importante é que os desenhos com muitas tags devem estar agrupados em tags <g> ou <set> para

serem animados. Podemos animar praticamente todos os atributos de um desenho de SVG.

As animações em SVG podem ser feitas usando CSS (que deixa a animação um pouco lenta) ou diretamente

nas tags SVG. A linguagem que a animação SVG usa é baseada na especificação SMIL (Synchronized Multimedia

Integration Language).

As tags são as seguintes:

<g>, <set>, <animate>, <animateColor>, <animateTransform>, <mpath> e <animateMotion>.

O objeto que será animado pode ser indicado com indicação xlink:href="#id" ou sendo o elemento principal

de um bloco onde você define a animação com uma das tags acima.

A forma mais simples de animação utiliza a variação do valor de um atributo de um elemento (<animate>),

com certa duração. Os valores intermediários não informados são determinados através de interpolação. Podem ser

definidos mais valores intermediários, para ter mais controle da animação (uso do keyTimes).

Exemplo: Vamos desenhar uma xícara e colocar efeitos de

animação no contorno da xícara e na fumaça. Crie

uma nova tag de conteúdo chamada Animações.

Note que a alça pode ser desenhada por trás da

xícara, usando a ferramenta de arco de elipse e desenhando-

as pela metade. Use os pontos M indicados para cada

elemento e crie uma tag de texto logo abaixo da xícara.

Para criar o efeito de animação de desenhar o

contorno da xícara, usaremos animação no atributo stroke-

dashoffset, que é a distância entre a origem do desenho

(ponto M) e o primeiro ponto onde pode ser definido um

tracejado na linha (dasharray).

Desta forma, se o desenho da xícara tem

aproximadamente 200px de perímetro total, devemos colocar

o atributo stroke-dasharray="200" na tag da xícara:

<path name="xicara" d="M63,70 a18,9 0 0,0 0,-18 v4 a11,5

0 0,1 0,11z M30,80 h20 a29,29 0 0,0 19,-29 h-58 a29,29 0 0,0 19,29" stroke="rgb(250,100,0)" fill="rgb(250,100,0)" stroke-width="0.3" stroke-dasharray="200">

Ao invés de fechar esta tag, substituímos a o fechamento da tag /> por > e colocamos a tag de animação logo

a seguir e depois fechamos a tag com </path> :

<animate attributeName="stroke-dashoffset" from="200" to="0" dur="7s" begin="0s" fill="freeze"/> </path>

Desta forma, o contorno da xícara será desenhado em 7 segundos, mantendo-se o preenchimento da figura

(fill="freeze") e começando logo que a página é atualizada (begin="0s"). Para que a animação comece quando o

visitante da página clicar na figura, podemos usar begin="click".

Anima atributos

do desenho

Muda a cor de atributos

durante certo tempo

Aplica transformações

geométricas nos desenhos

Insere desenhos

em caminhos path

M(63,70)

x

y

R29

rx=18, ry=9

M(30,80)

M(35,45)

20

rx=11, ry=5

19

R30 20

R30

20

5

29

58

Page 28: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 47

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Outra propriedade que poder ser usada é a opacidade, em conjunto com a linha stroke.

<animate attributeName="opacity" from="0" to="1" dur="7s" begin="0s" fill="freeze"/>

Faça o mesmo efeito de animação para a alça e a fumaça da xícara. Se você quiser que um efeito seja

executado logo após o outro, basta controlar os instantes de início de cada atributo <animate>. Por exemplo, a

xícara pode ter o primeiro efeito com begin="0s", a tag <animate> da alça terá begin="7s" e a fumaça terá

begin="14s".

Outra forma de fazer animação concatenada é criar um id para cada animação e colocar na animação a

propriedade .end da animação anterior para a seguinte. Por exemplo, sejam as ids "xicara" e "fumaca"; os atributos

de início das animações serão:

da xícara: begin="0s"

da fumaça: begin="fumaca.end"

Para deixar a animação sempre ativa, basta colocar dentro da tag <animate> o seguinte atributo: repeatCount="indefinite"

Para restringir a animação por um determinado período de tempo (por exemplo, 1 min.), usamos o atributo: repeatDur="1:00"

Para fazer o mesmo efeito de animação no texto, a tag <text> fica assim:

<text x="25" y="95" font-weight="bold" fill="red" stroke="blue" stroke-width="0.5" font-family="Calibri" font-size="16px" stroke-dasharray="50">Café

<animate attributeName="stroke-dashoffset" from="50" to="0" dur="4s" begin="0s" fill="freeze" repeatCount="2" />

</text>

Seguem abaixo outros exemplos de animações.

Em uma tag de um círculo:

<animate attributeName="cx" to="150" dur="3s" begin="click" fill="freeze" />

Em uma tag de um retângulo:

<animate attributeName="y" to="120" dur="3s" begin="3s" fill="remove" />

Em uma tag de um gradiente linear, dentro de <stop offset>:

<animate attributeName="stop-color" from="rgb(0,0,120)" to="rgb(190,0,0)" dur="3s" begin="0s" fill="freeze" />

Em uma tag de um path:

<animate attributeName="fill" from="rgb(0,0,250)" to="rgb(250,0,0)" dur="3s" begin="0s" fill="freeze" />

<animate attributeName="stroke" from="rgb(0,0,250)" to="rgb(250,0,0)" dur="3s" begin="0s" fill="freeze" />

Exercício 18: Utilize animação com stroke-dasharray e stroke-dashoffset para os desenhos das nuvens do exercício

17 e do sol do exercício 16.

Agora vamos criar banners com paisagem (landscape). A seguir, temos alguns exemplos interessantes para

criação de banners do site http://www.freepik.com

Page 29: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 48

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Exercício 19: Crie um caminho <path> com os contornos dos edifícios e depois crie outros <path> para nuvens e sol.

Coloque o efeito de animação para desenhar os contornos dos prédios e dos elementos de nuvens e

sol. Coloque filtros nos desenhos. Insira os desenhos svg do sol e da nuvem no banner que criamos da

página index.htm.

16

20

4

3

5

2

10

1

10

1 5

31

4

3

2

17

M(15,45)

x

y

R5

3

M(5,95)

M(55,35)

5

R4

R6

8

12

25

10

2 1 5

3 3

10

5

5

10 5

4 2

10

5

5

4 3

3

10

2 4 3

15

5 3

2

3

25

5

35

R2 R4

5

23

8

17

2

14

2

104

20

5

5

7 7

9

R5

R5

R7

R5

7 7

12 11 6

M(55,23) 5

5

12

Page 30: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 49

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Um atributo interessante para animações é o keyTimes, que serve para atribuir os valores dos momentos da

animação durante sua exibição. Vamos criar um exemplo na página que criamos o Exercício anterior. Crie um círculo

de cor verde e outro de cor vermelha, ambos com mesma coordenada x=30, raio igual a 20 e coordenadas y de 30 e

75 em um viewBox de 150 x 100.

Dentro das tags dos círculos, vamos criar uma animação no atributo cx dos círculos, com duração de 3s. O

keyTimes serve para colocar os valores intermediários com dois atributos: keyTimes, como uma linha do tempo em

percentual (variando de 0 a 1) e values, com os valores respectivos de cada valor do keyTimes.

<circle r="20" cx="30" cy="30" fill="red"> <animate attributeName="cx" from="30" to="100" dur="3s" begin="0s" fill="freeze"

values="30;32;40;100" keyTimes="0;0.25;0.5;1" /> </circle> <circle r="20" cx="30" cy="75" fill="green">

<animate attributeName="cx" from="30" to="100" dur="3s" begin="0s" fill="freeze" values="30;40;47;100" keyTimes="0;0.25;0.5;1" />

</circle>

Agora vamos criar um efeito de uma bola quicando. Desenhe um círculo (r=20, cx=30, cy=30) em um

viewBox de 100x300 e vamos usar keyTimes para animar o atributo cy:

<circle r="20" cx="30" cy="30" fill="blue">

<animate attributeName="cy" from="30" to="250" dur="3s" begin="0s" fill="freeze" values="30;250;120;250;170;250;210;250" keyTimes="0;0.15;0.3;0.45;0.6;0.75;0.9;1" />

</circle>

No exercício 19 podemos usar keyTimes para controlar os valores intermediários de stroke-dashoffset

criando um efeito que desenhe o perfil e depois desfaça o desenho. Basta colocar no instante 0 o valor máximo do

efeito (por exemplo, 1000), no instante 0.5 colocamos o valor mínimo (0) e no instante 1 colocamos novamente o

valor máximo do efeito:

<animate attributeName="stroke-dasharray" values="1000;0;1000" keyTimes="0;0.5;1" ... >

Agora vamos criar um efeito de animação com uma

transformação geométrica <animateTransform> junto

com transformações que já vimos <animate>.

Podemos criar o efeito de rotação do misturador de um

chuveiro, e uma animação de deslocamento dos

tracejados que representam a água. Crie uma tag de

conteúdo da pagina2.htm.

O desenho da água pode ser feito usando retângulos de

com comprimento próximo de 0, para usarmos a

animação da altura (height) do retângulo. Quando o

misturador girar, a altura dos retângulos pode ser

alterada, gerando o efeito de que a água está caindo.

Este efeito da água será criado no grupo chamado “água”

com as propriedades a seguir. Serão 10 retângulos criados

neste grupo com o efeito começando somente depois que

o efeito de misturador terminar (anima1.end).

<g name="agua" stroke="cyan" stroke-width="0.5" stroke-dasharray="1"> <rect x="32" y="28" width="0.001" height="0.001">

<animate attributeName="height" from="0.001" to="40" dur="2s" begin="anima1.end" fill="freeze" /> </rect>

x

y

2

7

M(10,60)

M(10,10)

R2

11

3

R8 30 R3

5

M(9,54)

3 m(22,16)

M(32,28)

0 0.25 0.5 1

30 32 40 100

Page 31: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 50

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

<rect x="35" y="28" width="0.001" height="0.001"> <animate attributeName="height" from="0.001" to="40" dur="2s" begin="anima1.end" fill="freeze" />

</rect> ... <animate attributeName="stroke-dashoffset" from="40" to="0" dur="5s" begin="anima1.end+2s"

repeatCount="indefinite" fill="freeze" /> </g>

O efeito de rotação do misturador será gerado no grupo “misturador”. Para criar o desenho do misturador

usamos o efeito de rotação do primeiro retângulo M(11,54) com 90o, -90

o e -180

o e cantos arredondados com 1px de

raio. Note que temos que criar uma id para que o efeito da água funcione logo após girar o misturador.

<g name="misturador">

<rect x="9" y="54" width="2" height="5" rx="1" ry="1" stroke="black" stroke-width="0.1" fill="orange" />

<rect transform="rotate(90,10,60)" x="9" y="54" width="2" height="5" rx="1" ry="1" stroke="black" stroke-width="0.1" fill="orange" />

<rect transform="rotate(-90,10,60)" x="9" y="54" width="2" height="5" rx="1" ry="1" stroke="black" stroke-width="0.1" fill="orange" />

<rect transform="rotate(-180,10,60)" x="9" y="54" width="2" height="5" rx="1" ry="1" stroke="black" stroke-width="0.1" fill="orange" />

<circle cx="10" cy="60" r="2" fill="orange" stroke="black" stroke-width="0.1" /> <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 10 60"

to="60 10 60" dur="2s" id="anima1" begin="1s" fill="freeze"/> </g>

Para animações de transformações geométricas precisamos colocar o tipo (type="rotate"), a origem da

tranformação (from="0 10 60") e a posição final (to="60 10 60"), ou seja, trata-se de uma rotação de 0o

até 60o em

torno do ponto (10, 60), que é o centro do misturador. Caso não sejam informadas as coordenadas do centro de

rotação, ela será feita em torno da origem do sistema de coordenadas.

Um elemento do nosso banner que pode ter o efeito de rotação é o moinho. Para criar este efeito, basta

deixar a tag de animação dentro da tag das pás do moinho, criando efeito de rotação de 0 a 360o em torno do centro

das pás do moinho.

Outra transformação que podemos usar é a translação. Vamos usá-la para animar o trator que desenhamos

no Exercício 13. Criamos os grupos trator e carregador quando desenhamos na página index.htm. Podemos criar

uma rotação do carregador em torno do ponto base (100,100) e uma translação para o trator. Assim, os dois efeitos

funcionarão dentro das tags de grupos que já criamos:

<g id="trator">

<path name="trator" d="M100,100 ... /> <g id="carregador">

<path name="carregador" d="M100,100 ... /> <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 100 100"

to="15 100 100" begin="0s" dur="6s" repeatCount="indefinite"/> </g> <animateTransform attributeType="xml" attributeName="transform" type="translate" from="0 0"

to="-30 0" begin="0s" dur="6s" repeatCount="indefinite"/> </g>

Para dar um efeito de vai e vem, basta ajustar os valores para o atributo keyTimes. Na rotação, você pode

colocar que no instante 0 o ângulo será de 0o, na metade da animação 0.5 o ângulo será de 15

o e no final será 0

o:

values="0 100 100; 15 100 100; 0 100 100" keyTimes="0; 0.5; 1"

Para a translação, no instante 0, o deslocamento será 0, na metade da animação 0.5, o deslocamento será de

-30 e no final volta a ser 0:

values="0 0; -30 0; 0 0" keyTimes="0; 0.5; 1"

Page 32: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 51

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Outro efeito de transformação que fica interessante nos ícones é o de escala (scale). Vamos criar o efeito de

mudança de escala para um ícone, com efeito de rotação, de acordo com as imagens a seguir. Insira o código de um

ícone na pagina2.htm para criarmos o efeito de animação.

Para que os dois efeitos funcionem, precisamos inserir o atributo additive="sum", ou seja, um efeito será

“somado” ao outro. O código do HTML ficará muito similar aos efeitos que já criamos. Basta inserir o código de

animação dentro da tag do grupo que criamos do ícone. Podemos colocar também efeitos de tracejados dashoffset

com efeitos de preenchimento fill para o ícone.

<g id="lapis" stroke-width="1" stroke="black">

<path d="M10,10 v5 h56 v-5z" fill="white"/> <path d="m10,15 v100 h14 v-100z" fill="rgba(0,0,255,1)"/> <path d="M24,15 v100 h28 v-100z" fill="rgba(0,0,255,0.6)"/> <path d="M52,15 v100 h14 v-100z" fill="rgba(0,0,255,1)"/> <path d="M10,115 l14,24 h28 l14,-24z" fill="brown"/> <path d="M10,115 l14,24 h28 l14,-24z" fill="rgb(200,200,100)"/> <path d="M24,139 l14,24 l14,-24z" fill="blue"/> <animateTransform attributeName="transform" attributeType="xml" type="rotate" from="20,30,30"

to="0,30,30" begin="0s" dur="5s" /> <animateTransform attributeName="transform" attributeType="xml" type="scale" from="0.7" to="1"

begin="0s" dur="5s" additive="sum" /> </g> <text class="texto" x="50" y="150" font-weight="bold" font-size="32pt" fill="none" stroke="white" stroke-

width="1" stroke-dasharray="200">SVG <animate attributeName="stroke-dashoffset" from="200" to="0" dur="5s" begin="0s" fill="freeze" /> <animate attributeName="fill" from="rgba(0,0,0,0.6)" to="rgba(100,85,190,0.8)" dur="5s" begin="0s" fill="freeze"/>

</text>

Exercício 20: Crie efeitos de rotação com AnimateTransform nas rodas dentadas que criamos no Exercício 16.

Exercício 21: Crie efeito de rotação com AnimateTransform no ícone abaixo. Use opacidade e rotação para

desenhar os 10 retângulos em uma nova tag de conteúdo da pagina2.htm.

M(48,5) x

y

10

4

(50,30)

Page 33: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 52

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Exercício 22: Crie efeito de rotação com AnimateTransform no desenho das rodas e do pedal da bicicleta abaixo.

Use os raios das rodas como retângulos de comprimento 0.01, com ângulos de 15o entre si. Para criar

o efeito de cantos arredondados, insira a propriedade stroke-linejoin="round" em cada path do

desenho. Crie grupos para que a animação funcione corretamente. Insira o desenho como um logo ou

no banner da página index.htm.

Uma tag para criar o efeito de que o texto está seguindo uma curva pode ser feita da seguinte forma: crie

uma curva com arcos com id chamada de curva, e faça a ligação usando a tag textpath, com referência à #curva.

Uma animação pode ser feita alterando a propriedade startOffset.

<path id="curva" fill="none" stroke="blue" d="M30,30 a30,30 0 0,1 30,0 a30,30 0 0,0 30,0 a30,30 0 0,1

30,0 a30,30 0 0,0 30,0"/> <text> <textpath xlink:href="#curva">Texto em curva!

<animate attributeName="startOffset" from="-100" to="0" dur="5s" begin="0s" fill="freeze" /> </textpath> </text>

Seguem abaixo alguns desenhos que podem ser usados como ideias para criação de banners ou logos para

nossas páginas. Os efeitos de animações que usamos podem ser usados para criar estes desenhos.

x

y

10

15

M(55,60) M(35,60)

10

15

5

2

5

20

2

M(15,60) 15

15

23

4

R10 R10

<path name="banco" d="M35,60 l-15,-20 h5

h-7 h7" stroke="blue" fill="none" stroke-

linejoin="round" stroke-width="2"/>

Page 34: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 53

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

http://www.shutterstock.com/

Mais referências sobre desenhos em SVG podem ser encontradas nos seguintes sites:

http://miscelaneadoconhecimento.com/svg/apostilasvg.html

https://css-tricks.com/guide-svg-animations-smil/

Atividade 7: Entregar os arquivos do site estruturado com os desenhos de banner, logos e objetos com animações

em SVG.

Vamos criar uma galeria de imagens utilizando apenas o que aprendemos com HTML e CSS. Galerias de

imagens com mais efeitos podem ser desenvolvidas junto com funções da linguagem JavaScript. Nossa próxima

atividade começará de uma página estruturada, com espaço para inserir banner, barra de compartilhar, conteúdo e

rodapé.

Primeiro vamos estruturar o arquivo HTML com as tags de imagem e hiperlink. Vamos usar dois novos

atributos: id (servirá como ligação entre a foto ampliada e a foto em miniatura) e title (servirá como legenda da

imagem, tanto na miniatura, quando na imagem ampliada). Podemos criar duas classes: mini (para criar as

miniaturas das imagens) e maior (para criar as imagens ampliadas, que serão escondidas usando CSS). O id da

imagem ampliada (img1) servirá como referência do hiperlink href="#img1" da imagem em miniatura. A referência

do hiperlink da imagem ampliada será href="#_", que servirá para clicar na imagem ou fora dela para voltar ao

mesmo ponto onde a imagem está na página.

<div class="galeria">

<!-- miniatura da foto --> <a href="#img1" class="mini" title="Meu projeto 1">

<img src="imagens/projeto1_mini.jpg"> </a> <!-- foto ampliada, escondida pelo CSS --> <a href="#_" class="maior" id="img1" title="Meu projeto 1">

<img src="imagens/projeto1.jpg"> </a> ...

</div>

Para deixar uma imagem ou div na frente de outros elementos, basta usar valores positivos para a

propriedade z-index. No caso da nossa galeria de imagens, a classe maior deverá ficar escondida com o atributo

display:none, porém, vamos usar z-index:999 para que a imagem fique na frente de todos os elementos da página

quando for ampliada.

10. GALERIAS DE IMAGENS

Ligação entre a imagem

ampliada e a imagem em

miniatura.

Page 35: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 54

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Para centralizar a imagem ampliada vamos usar o position:fixed (que usa como referência a tela do

dispositivo do visitante) com top e left com 50%. Assim, o canto superior da imagem fica centralizado na tela. Para

centralizar a imagem como um todo usaremos translate de -50%. Para deixar o fundo escuro, usamos o background

com opacidade igual a 0.7. Vamos usar a propriedade transition para criar efeitos de animação.

A classe galeria deve ter o display como flexbox para que as imagens em miniatura sejam ajustáveis para

qualquer tamanho de tela. Vamos colocar uma margem interna também, para que as imagens não fiquem junto com

as margens do site.

.galeria {display:flex; flex-wrap:wrap; padding:10px;}

/* Fotos ampliadas da galeria: devem ficar escondidas (display:none) */ .maior {display:none; position:fixed; z-index:999; width:100%; height:100%; text-align:center; color:white; text-decoration:none; top:50%; left:50%; transform:translate(-50%,-50%); opacity:1; background:rgba(0,0,0,0.7);} .maior img {max-width:100%; max-height:100%; min-width:100%; margin-top:5%; border-radius:10px; margin-

bottom:-5px;}

Assim que o visitante clicar na foto em miniatura da classe mini, o alvo (target) do link será a imagem da

classe maior, que pode ser configurada com animação (como fizemos na atividade 6). A configuração do target da

galeria é a seguinte: .maior:target {outline:none; display:block; opacity:1;} .maior:target img {animation:Escala 1.2s ease-in-out; text-align:center;} @keyframes Escala { 0% {transform:scale(0.6); opacity:0;} 90% {transform:scale(1.05); opacity:0.9;} 95% {transform:scale(0.95); opacity:0.95;} 97% {transform:scale(1.025); opacity:0.97;} 100% {transform:scale(1); opacity:1;} }

Agora vamos configurar as miniaturas das imagens. Como todas as imagens têm tag de hiperlink, podemos

nos referir às tags com o nome a.mini. Para deixar um efeito de que as imagens estão sobrepostas, podemos criar

margens laterais negativas e criar margens internas com padding:7px. Vamos usar o alinhamento centralizado para

colocar o título (title) de cada foto como legenda (como fazíamos com figcaption nas primeiras aulas).

a.mini {background:#fff; margin:20px -30px; padding:7px; text-align:center; text-decoration:none; margin-

left:0; background:linear-gradient(-45deg, #87CEFA,white); border-radius:10px;}

Vamos configurar um mesmo tamanho para todas as imagens em miniatura, com z-index:1 e efeito de

transição para fazermos animação com hover.

.mini img {width:150px; height:100px; margin:10px 10px -5px 10px; transition:0.4s all ease-in-out; z-index:1;} .mini img:hover {transform:scale(1.1);}

O recurso de pseudo-classe que usaremos para inserir os títulos é chamado de before/after, que pode ser

usado para inserir elementos antes ou depois de algum elemento da página. Este elemento pode ser texto ou

imagem. Este recurso é muito utilizado para inserir automaticamente imagens antes de cada item de menus.

Nos exemplos a seguir, antes de cada título h1 da página uma imagem é inserida, e antes de cada parágrafo

um hífen é inserido.

h1:before {content:url(imagens/smiley.gif);} p:before {content:"- ";}

Em nossa galeria, vamos usar a pseudo-classe after para inserir os títulos de cada imagem ampliada e em

miniatura. Como cada imagem tem seu título, vamos usar a função attr() para buscar o título de cada imagem.

Page 36: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 55

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

a.mini:after {content:attr(title); display:block;} a.maior:after {content:attr(title); display:block;}

Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”, como fotos

sobrepostas, podemos usar a pseudo-classe nth-child (a mesma que usamos para formatar linhas pares e ímpares

das tabelas da Atividade 5).

Como as miniaturas estão inseridas sempre antes das imagens ampliadas, elas ocupam sempre posições

ímpares dentro da classe imagens. Logo, o nosso foco é criar o nth-child com números ímpares. Por exemplo, se

você quiser apenas alternar 2 efeitos, basta usar números 2n+1; para 3 efeitos, usamos 3n+1. O exemplo que vamos

usar tem 5 efeitos diferentes.

n=0 n=1 n=2 n=3 n=5 estilo

5n+1 1 6 11 16 21 azul, 0o

5n+2 2 7 12 17 22 vermelho, 5o

5n+3 3 8 13 18 23 preto, 5o

5n+4 4 9 14 19 24 verde, -10o

5n+5 5 10 15 20 25 … amarelo, -5o

Logo, o estilo ficará assim: a.mini:nth-child(5n+1){color:blue; transform:rotate(0deg);} a.mini:nth-child(5n+3){color:black; transform:rotate(5deg);} a.mini:nth-child(5n+5){color:yellow; transform:rotate(-5deg);} a.mini:nth-child(5n+2){color:red; transform:rotate(5deg);} a.mini:nth-child(5n+4){color:green; transform:rotate(-10deg);}

Para criar os itens de compartilhar, podemos inserir imagens dentro do banner do site com link nas tags de

SVG, indicando as coordenadas x e y, além das medidas de altura e largura de cada imagem.

<a href="http://www.facebook.com/pages/UFPR">

<image xlink:href="imagens/facebook.png" x="700" y="150" height="70px" width="70px"/> </a> <a href="http://www.twitter.com/ufpr">

<image xlink:href="imagens/twitter.png" x="800" y="150" height="70px" width="70px"/> </a> <a href="https://www.instagram.com/ufpr_oficial/">

<image xlink:href="imagens/instagram.png" x="900" y="150" height="70px" width="70px"/> </a> <a href="whatsapp://send?text=Meu portfolio - http://www.degraf.ufpr.br/docentes/paulo/webdesign/">

<image xlink:href="imagens/whatsapp.png" x="1000" y="150" height="70px" width="70px"/> </a> <a href="mailto:[email protected]">

<image xlink:href="imagens/email.png" x="1100" y="150" height="70px" width="70px"/> </a>

11 33 55 77 99 1111

1133 1155 1177 1199 2211 2233

Page 37: a id class - exatas.ufpr.br · a.maior:after {content: attr(title); display: block; } Para criar um efeito para que as miniaturas das imagens fiquem com aspecto “desarrumado”,

Fundamentos do Webdesign 56

Universidade Federal do Paraná – Departamento de Expressão Gráfica – Prof. Paulo Henrique Siqueira

Atividade 8: Entregar os arquivos do site estruturado de um portfólio com galeria de imagens, menu, desenhos de

banner e logos com animações em SVG.