Upload
dokhanh
View
213
Download
0
Embed Size (px)
Citation preview
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
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
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%
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
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;}
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">☰</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;}
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; ...}
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%
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">
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
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
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
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">
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
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">
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
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
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
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
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:
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
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
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)
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)
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
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)
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
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
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
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
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"
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)
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"/>
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.
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.
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
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.