- Computadores
- Telefones/tablets
- Videogames
- Smart TVs
- Smartwatches
- VR headsets
- Carros
[VR]: Virtual Reality
- Tamanho da tela
- Razão de aspecto (largura/altura)
- Tipo de input (mouse/teclado, toque (multi), gestos)
- Densidade de pixels da tela
- Quantidade de cores
- Conexão com a Internet
- Independer de ampliação
- Usuário não deve precisar dar zoom para enxergar/interagir
- Independer da razão de aspecto (larg/alt)
- Página deve se adequar para ficar longa ou achatada
- Aproveitar todo o espaço disponível, não mais, não menos
- Não permitir barras de rolagem horizontais
- Explorar da alta densidade de pixels
- Usar imagens com resolução suficiente ao dispositivo
- Otimizar o desempenho
- A página não pode demorar para carregar
- Carregando uma página no smartphone
- Relembrando a tag
<meta>
- Definindo a janela de pintura (viewport)
- Unidades de medida
::: figure .viewport-on-device
Do jeito errado (se nãodefinirmos a viewport) :::
::: figure .viewport-on-device
Do jeito certo(viewport definida) :::
- O navegador, por padrão, assume que a página vai ocupar uns 1000px
de largura, mesmo em dispositivos com telas menores
- Navegador carrega a página
- Navegador vê que ela ocupou mais que a largura do dispositivo
- Navegador reduz (faz zoom out) na página
- Precisar dar zoom-in/out é uma experiência de uso ruim!
- Para evitar que o usuário precise ampliar/reduzir, podemos definir qual
a largura da "janela de pintura" (viewport) da página
- Para tanto, vamos usar uma tag
<meta>
- Para tanto, vamos usar uma tag
- Unicode provê o suporte multilíngua
- Diversos alfabetos, não apenas o romano/latino
- UTF-8 é uma codificação que usa uma sequência de 8 bits para
armazenar códigos UNICODE
- Os 128 primeiros caracteres UTF-8 são idênticos aos ASCII
- Ou seja, todo o alfabeto, pontuações mais comuns e números
- Os 128 primeiros caracteres UTF-8 são idênticos aos ASCII
-
Em HTML, dentro do
... <head> <meta charset="utf-8"> <!-- USE ESTA META TAG --> <title>...</title> ...
<head>
da página, usamos uma<meta>
tag com o atributocharset
para isso ➡️- Essa tag deve aparecer nos primeiros 1024 caracteres da página (entenda)
- Para ASCII, seria
<meta charset="ISO-8859-1">
(ASCII romano/latino)
- Usamos
<meta name="viewport" content="...">
para definir a largura da janela:<meta name="viewport" content="width=device-width, initial-scale=1">
width=device-width
faz com que a "janela" do navegador tenha a largura igual à do dispositivo (não mais, não menos)initial-scale=1
faz com que a página não seja ampliada/reduzida inicialmente (mas ainda assim permitindo que o usuário o faça)
- Devemos sempre usar a
<meta name="viewport">
nos sites! - Referência: meta tag viewport na MDN
- Além da viewport, também precisamos definir dimensões dos elementos de forma que caibam na janela
- Técnicas:
- Evitar larguras fixas maiores que a janela
➡️width: 900px
width: 100%
- Preferir unidades de medida relativas
➡️padding-top: 90px
padding-top: 25%
- Evitar larguras fixas maiores que a janela
- Mas o que são unidades de medida relativas?
- Absolutas (fixas)
px
cm
,mm
,in
,pt
,pc
- Relativas ao tamanho do container:
%
- Relativas ao tamanho da fonte:
em
(letra M)rem
(letra M - root)ex
(letra x)ch
(número 0)
- Relativas ao tamanho da janela:
vh
(1/100 altura)vw
(1/100 largura)vmin
(1/100 menor dim.)vmax
(1/100 maior dim.)
<iframe height='265' scrolling='no' title='Exemplo em vs rem' src='//codepen.io/fegemo/embed/JrvRgL/?height=300&theme-id=dark&default-tab=html,result&embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen Exemplo em vs rem by Flavio (@fegemo) on CodePen. </iframe>
em
é ofont-size
do elemento atualrem
é ofont-size
do elemento<html>
(root element)- ...que, por padrão, é
16px
- ...que, por padrão, é
- Quando usar: para tamanhos, margens,
padding
,line-height
etc.
<iframe height='326' scrolling='no' title='Exemplo vh e vw' src='//codepen.io/fegemo/embed/jGxVMV/?height=326&theme-id=dark&default-tab=css,result&embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'>See the Pen Exemplo vh e vw by Flavio (@fegemo) on CodePen. </iframe>
1vw
= 1/100 da largura da janela1vh
= 1/100 da altura da janela- Quando usar: para tamanhos de coisas que ocupam sempre a mesma proporção da janela (e.g., slides)
- O que são media queries
- Anatomia de uma media query
- Tipos de mídia
- Características de mídia
- As media queries têm o propósito de possibilitar a delimitação do escopo de regras CSS para diferentes mídias
- Exemplos:
- Arquivo com regras CSS para impressão
<link rel="stylesheet" media="print" href="p-impressao.css">
- Dentro de um arquivo CSS, regras diferentes para o tamanho de uma imagem
se o dispositivo estiver orientado verticalmente (portrait) ou
horizontalmente (landscape)
-
img.produto { width: 200px; }
-
@media screen and (orientation: portrait) { img.produto { width: 100%; } }
-
- Arquivo com regras CSS para impressão
- Formada por:
- Media types
- Media features
- Operadores
all
~ Qualquer dispositivo
print
~ Para documentos paginados ou exibidos em modo de visualização de impressão (aperte Ctrl+P)
screen
~ Dispositivos com telas (normalmente) coloridas
speech
~ Para sintetizadores de voz
- Arquivos separados:
<link rel="stylesheet" media="all" href="estilos-gerais.css"> <link rel="stylesheet" media="screen" href="para-monitores.css"> <link rel="stylesheet" media="print" href="para-impressao.css">
- Dentro de um mesmo arquivo CSS:
body { background-color: #ccc; } @media print { body { background-color: transparent; } }
width
,height
,max-width
,max-height
,min-width
,min-height
- Largura e altura da janela do navegador
aspect-ratio
- Razão da largura pela altura da janela do navegador
orientation
- Orientação (
landscape
xportrait
) do dispositivo
- Orientação (
resolution
- Densidade de pixels do dispositivo
- E mais...
- Forma 1: Em arquivos separados
<!-- Arquivo de estilo para dispositivos pequenos --> <link rel="..." media="screen and (max-width: 640px)" href="small-screens.css"> <!-- Arquivo de estilo para dispositivos grandes --> <link rel="..." media="screen and (min-width: 641px)" href="large-screens.css">
- Forma 2: Dentro de um mesmo arquivo (mais comum)
#logo { width: 200px; } /* com o "celular em pé"", a logo vai ocupar 100% */ @media screen and (orientation: portrait) { #logo { width: 100%; } }
- A origem: iPad 3
- Densidade de pixels
- Como aproveitar
Para testar em um dispositivo de tela com alta densidade de pixels:
- Este dispositivo tem densidade: x 🔢
window.devicePixelRatio
- O que é
- Exemplos de sites
- Como fazer
- Não significa desenho responsável =)
- É a idéia de que as páginas Web devem se adaptar à plataforma que a está
exibindo
- Melhorar a experiência de usuário
- Aproveitar características específicas de plataformas diferentes
- Usa o recurso de media queries, mas também tamanhos fluidos, flexbox e grid
- Para criar uma página responsive, você deve
- Usar unidades de medida relativas
- Definir os pontos (largura) em que a página "quebra" (os breakpoints)
- Criar regras de estilos diferentes para cada conjunto de dimensões
- Por exemplo, vamos criar uma página que mostra
- 4 produtos por linha em dispositivos grandes
- 3 produtos por linha em dispositivos médios
- 2 produtos por linha em dispositivos pequenos
#produtos { display: flex; }
@media (min-width: 801px) {
/* tela grande: 4 produtos por linha */
div.produto { width: calc(100% / 4); }
}
@media (min-width: 481px) and (max-width: 800px) {
/* tela média: 3 produtos por linha */
div.produto { width: calc(100% / 3); }
}
@media (max-width: 480px) {
/* tela pequena: 2 produtos por linha */
div.produto { width: calc(100% / 2); }
}
<iframe width="100%" height="450" src="//jsfiddle.net/fegemo/Lw7prv0u/6/embedded/result,css,html/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
- Atividade de hoje