Tableless - Desenvolvimento inteligente com Padrões Web

06/07/2009
CSS

Introdução sobre Media Queries

Media Queries é a utilização de Media Types com uma ou mais expressões envolvendo características de uma media para definir formatações para diversos dispositivos. O browser ou a aplicação lê as expressões definidas na query, caso o dispositivo se encaixe nestas requisições, o CSS será aplicado.

Por


Breve explicação sobre Media Types

As Media Types definem para qual tipo de media o CSS será direcionado.
O HTML foi criado para ser portável, ou seja, ele deve ser lido e interpretado por qualquer tipo de dispositivo. Cada dispositivo exibe o HTML de uma maneira. A forma que este HTML é formatado em cada dispositivo é diferente. Logo, o código CSS será diferente para cada um destes dispositivos.
Por exemplo, se você visita um site por um computador, ele não terá a mesma caso você o visite por um dispositivo móvel.
São dispositivos diferentes, com formas totalmente diferentes de navegação.
O exemplo acima é o mais comum. Mesmo assim, existem outras medias que podemos controlar, como por exemplo, impressão.
Abaixo segue uma lista das medias:

all
Para todos os dispositivos.
braille
Para dispositivos táteis.
embossed
Para dispositivos que “imprimem” em braille.
handheld
Para dispositivos de mão. Normalmente com telas pequenas e banda limitada.
print
Para impressão em papel.
projection
Para apresentações, como PowerPoint.
screen
Para monitores ou outros dispositivos com telas coloridas e com resolução adequada.
speech
Para sintetizadores de voz. O CSS 2 tem uma especificação de CSS chamada Aural, onde podemos “formatar” a voz dos sintetizadores.
tty
Para dispositivos que utilizam uma grade fixa para exibição de caracteres, como por exemplo, teletypes, terminais, dispositivos portáteis com display limitado.
tv
Para dispositivos como televisores, ou seja, com baixa resolução, quantidade de cores e scroll limitado.

Todos os nomes das medias são case-sensitive.

A utilização dessas medias são feitas como o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>Exemplo</title>

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

</head>

<body>


</body>
</html>

Note a tag LINK. Estou linkando um arquivo de CSS, com o nome de estilo.css. Esse código CSS está destinado para funcionar em dispositivos de media HANDHELD, ou seja, aparelhos móveis, celulares com tela pequena ou aparelhos parecidos. Esse CSS não será aplicado por exemplo, quando o usuário visitar o site utilizando um desktop, por exemplo. Para tanto, teríamos que utilizar media SCREEN.

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

O Problema

Cada vez mais surgem dispositivos de diversos tamanhos com hardwares bem parecidos com os desktops. Isso faz com que a navegação destes aparelhos tenha uma experiência muito próxima de desktop. Um exemplo atual é o iPhone. Sua tela tem boa qualidade e seu navegador renderiza as páginas como um navegador normal de desktop. Logo, não tem motivo para prepararmos um layout e um CSS com media type HANDHELD para o iPhone. Apesar de ele ser um handheld, ele não trabalha como um. Contudo, ele também não trabalha como um desktop. Mesmo a renderização do MobileSafari sendo identica a de um desktop, o comportamento do usuário e a forma de navegação é diferente. Logo temos um meio termo. Não podemos disponibilizar um CSS para HANDHELD, nem um CSS totalmente SCREEN.

A Solução – Media Queries

As Media Queries definem condições para a utilização de um CSS específico. Se essas condições forem aprovadas, ou seja, se o dispositivo de adequar a todas as condições, o CSS será aplicado.

1
<link rel="stylesheet" href="estilo.css" media="screen and (color)" />

Neste código, por exemplo, o CSS será aplicado em dispositivos de media screen, que tenham uma característica color.
Logo, este CSS não será aplicado em aparelhos Monocromáticos. Simples, ahn?

Operadores Lógicos

Os Operadores Lógicos te possibilitarão criar media queries diversas. Os operadores são: not, and e only.

O not irá fazer uma sentença de negação. Por exemplo:

1
<link rel="stylesheet" href="estilo.css" media="all and (not color)" />

Sentenção verdadeira para dispositivos monocromáticos.

O only irá esconder os estilos de browsers que não reconhecem media queries. Antes da sentença, você coloca o only:

1
<link rel="stylesheet" href="estilo.css" media="only screen and (color)" />

É possível também agrupar várias media queries separando-os com , (vírgula). Se qualquer uma das queries forem verdadeiras, o CSS será aplicado. Então a vírgula funciona como um operador or.

1
<link rel="stylesheet" href="estilo.css" media="screen and (color), projection and (color)" />

Media features

Para então distinguir um dispositivo do outro, você utilizará as características de cada um. Veja o exemplo:

1
<link rel="stylesheet" href="estilo.css" media="screen and (max-width:480px)" />

Estou especificando neste código, que o arquivo estilo.css, será aplicado para dispositivos que se enquadram em screen com telas que tenham uma resolução máxima de 480px.

Há uma lista de características que você pode utilizar aqui para selecionar os dispositivos que você quiser.

  • width
  • height
  • device-width
  • device-height
  • orientation
  • aspect-ratio
  • device-aspect-ratio
  • color
  • color-index
  • monochrome
  • resolution
  • scan
  • grid

As media queries também são case-sensitive.

Não são todos os browsers que suportam media queries. Hoje em dia, isso é muito utilizado para separar o CSS para iPhone. O MobileSafari reconhece essas media queries, o que possibilita que você faça uma versão do CSS para iPhone. Mesmo assim, muitos por aí preferem fazer uma versão do site inteiro para estes dispositivos. Como já conversamos, isso depende das suas necessidades, público e tamanho do site.

Direto da fonte

Por Diego Eis

Diego Eis criou o Tableless para disseminar os padrões web no Brasil. Como consultor já treinou equipes de empresas como Nokia, Globo.com, Yahoo! e iG. É palestrante e empreendedor.

http://twitter.com/diegoeis/

Veja os outros posts de

  • http://www.paulodetarso.com Paulo de Tarso F. M.

    Fala Diego!

    Bom artigo, muito bacana esse recurso. Mas me diga uma coisa: quais são os browsers que suportam isso? Apenas o Safari? E o que acontece se utilizarmos em um IE6, por exemplo? Ele irá reconhecer o CSS normalmente?

    Fiquei com essa dúvida…

    Abraço!

  • http://twitter.com/diegoeis/ Diego Eis

    Tarso, tudo bem?

    Normalmente eu não estou mais abordando assuntos que podem usuais hoje em dia. Pelo contrário. Estou falando de assuntos que estarão disponíveis amanhã.

    O IE6 não é parâmetro aqui para o Tableless. Como ficam seus clientes? Oras, faça sites para IE6, como sempre fez. Mas não será no Tableless que iremos aprender isso. Aqui estamos nivelando por cima. Sempre.

    O IE6, por ser um browser de 10 anos atrás, não irá entender isso e muitas outras coisas.

  • Jefferson Santana

    Esse artigo é de muito interesse, muito útil, parabéns por mais essa materia.

    Agora é só estudar um pouco mais essas possibilidades media queries possa trazer.

    Abraços…

  • Jefferson Santana

    Diego Eis, acho que todos esses navegadores de ultima geração que estão mais dentro dos padrões reconhece correto?

    Safari
    Chrome
    Opera
    Firefox
    Acho que até o IE 8 já reconhece.

    Tudo isso eu creio, acredito que seja assim, porque IE 6 é muito velho…

  • http://webcomfarinha.com Matheus

    Caraca!!!

    Nem imaginava que existia Media Queries!

    Media Types é muito importante, já tive por exemplo que fazer uma versão para impressão e outra para visualização em navegadores desktop e estas combinações ampliam o leque!!!!

    Parabéns pelo artigo! Como sempre servindo de ponto de partida para novas pesquisas minhas!

  • Pingback: Utilizando Media Queries do CSS | Boas práticas de Desenvolvimento com Padrões Web

  • http://www.chrisb.com.br Chris Benseler

    A tecnologia em si é bacana, apesar do que eu mais ver hoje em dia em termos de mobile é “vamos fazer sites pro Iphone”… ou seja, vejo muita preocupação do cliente em fazer algo pro Iphone, se esquecendo dos outros dispositivos! Infelizmente…

    []s!

  • Pingback: Clica Aqui » Efeito cascata, herança e especificidade do CSS

  • Pingback: O que são Media Types do CSS? | Boas práticas de Desenvolvimento com Padrões Web

  • Pingback: Versionamento inteligente para mobiles | Boas práticas de Desenvolvimento com Padrões Web

  • Pingback: UX Design Blog » Desenvolvendo sites para mobile

  • http://www.tudopodre.com.br Psysapiens

    Gostei desse “Media Queries”, vou dar uma brincada com ele…
    XD

  • Pingback: Emuladores para browsers mobiles | Boas práticas de Desenvolvimento com Padrões Web

  • http://www.site-genial.com.br glaucia

    Facilita bastante e dá mais segurança pra desenvolvedor… operadores lógicos. legal.

    Media Queries, show.

  • http://www.tomasvasquez.com.br/blog Tomamais

    Muito bom mesmo!

  • Pingback: Emuladores para browsers mobiles « …tecnologicamente correta…

  • Pingback: Versionamento inteligente para mobiles « …tecnologicamente correta…

  • Rodrigo

    Legal, mas não funciona no IE8? Inclusive este site não abre no IE justamente por este motivo.

  • http://www.evertonvianna.com.br Everton Vianna

    Muito bom o conceito. Infelizmente o IEca 8 não tem suporte a Media Queeries. Ou seja, quem usar tal conceito abre-se mão de usuários do IEca 8 pra baixo.

  • Pingback: Acesse do seu iphone!

  • Pingback: Emuladores para browsers mobiles « FreeStyle Blog

  • Adriano

    Realmente ajuda muito para desenvolver mobile e tables.
    Excelente post, continue assim.
    Ate mais!

  • http://www.cafeinterativo.wordpress.com Gabriel Pinherio

    Para densevolver interações e experiências para aparelhos móveis, devemos pensar no target final e todo repertório que faz parte do seu cotidiano, com intuito de oferecer a melhor experiência possível.

    Adapater uma interface, um layout com mediaqueries não iria contra isso?

  • Pingback: Utilizando Media Queries do CSS | Tableless | Media Brasileiro

  • Pingback: Manipulando a metatag Viewport | Tableless

  • Jonathan Dos Santos

    existe o responde.js https://github.com/scottjehl/Respond que é usado pelo h5bp

  • Pingback: Responsive Web Design em 2012 e além | Drag-and-Drop