Uno de los grandes dolores de cabeza a la hora de maquetar una aplicación son las diferentes resoluciones contra las que nos tenemos que enfrentar… Y realmente puede llegar a ser complicado, sobre todo porque la tendencia es tener aplicaciones que sean capaces de adaptarse tanto a un navegador como a los diferentes dispositivos como móviles, tables, etcétera. La solución: Responsive Web Design
Es por ello que, después de haber jugado bastante, una gran opción para controlar el diseño de nuestras aplicaciones se trata de CSS Media Queries, las cuales son expresiones que retornan true o false relacionadas con propiedades media del navegador que está solicitando la página.
¿Cómo lo utilizo?
El primer paso que debemos dar es determinar dónde queremos especificar la expresión. Existen varios sistemas para ello:
- Usando @media{ //Styles }: Indicamos la expresión que queremos evaluar y, si el resultado es true, se aplican los estilos que estén dentro del bloque media.
- Usando @import: Este caso es similar al anterior pero , en vez de utilizar un bloque con los estilos a aplicar, se indica el archivo css que se quiere importa en el caso de que la expresión resulte afirmativa.
- Indicando la expresión directamente en el link de importación del CSS.
- Utilizando código Javascript: Es posible pero, personalmente, no creo que sea la forma más eficiente. Basicamente porque el performance se puede llegar a ver afectado por ello… Pero es posible
Una vez que tenemos decidido dónde, vamos a determinar el qué. Normalmente, las expresiones están relacionadas con el ancho y el alto de un navegador ya que son los puntos de referencia que nos indican cual es nuestro espacio de trabajo. Por ejemplo:
@media screen and (max-width: 320px)
{
body
{
font-family: Segoe UI, Arial, Verdana, sans-serif;
font-size: 0.7em;
padding: 5px;
background-color: rgb(0 , 0 , 0 );
color: #ccc;
}
article h2
{
font-size: 1.2em;
}
article h2:after
{
content: ' //Mobile - 320px';
}
section
{
padding: 0;
padding-top: 10px;
padding-bottom: 10px;
border: none;
background-color: rgb(27, 117, 187);
}
}
En este caso, he creado un bloque de código con una serie de estilos que solamente se aplicarán si el navegador, ya sea dispositivo o no, tiene como tamaño máximo 320 píxeles (Como el Nokia Lumia 800 o el Samsung Galaxy SII).
El método más común es utilizar @media + la expresión + el bloque de código que nos gustaría aplicar en ese caso. Aún así, veamos las otras alternativas:
@Import
@import('mobile.css') screen and (max-width: 320px)
En el link de importación del CSS
<link href="styles.css" rel="stylesheet" type="text/css" media="screen and (max-width:320px)"/>
Utilizando codigo JavaScript
if ("styleMedia" in window && window.styleMedia.matchMedium("screen and (max-width:320px)")) {
//Do stuff
}
A nivel de performance, la mejor solución es utilizar @media in line, dentro del CSS donde el código ya ha sido cargado y sólamente tiene que evaluar si lo utiliza o no (no tiene que comprobar si incluye un segundo archivo, no utiliza un lenguaje adicional como JavaScript, etcétera).
Por otro lado, otra cosa que os recomiendo es el uso de HTML Conditional Comments para evaluar qué navegador es el que el usuario está utilizando y, en función de ello, cargar un archivo u otro para que el diseño sea consistente con todos los navegadores:
<!--[if IE]>
<link href="@Url.Content("/Content/IE.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if IE 6]>
<link href="@Url.Content("/Content/IE6.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if IE 7]>
<link href="@Url.Content("/Content/IE7.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if IE 8]>
<link href="@Url.Content("/Content/IE8.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if IE 9]>
<link href="@Url.Content("/Content/IE9.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if gte IE 8]>
<link href="@Url.Content("/Content/greaterTahnIE8.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if lt IE 9]>
<link href="@Url.Content("/Content/lowerThanIE9.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if lte IE 7]>
<link href="@Url.Content("/Content/lowerThanIE7.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if gt IE 6]>
<link href="@Url.Content("/Content/greaterThatIE6.css")" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if !IE]>
<link href="@Url.Content("/Content/notIE.css")" rel="stylesheet" type="text/css" />
<!-- <![endif]-->
Espero que sea de utilidad
¡Saludos!
#CSS Media Queries (Responsive Web Design) http://t.co/MDwtdSWq #ResponsiveWebApps
Excelente post, en mi opinión por organización y mantenimiento posterior lo mejor es usar @import, así es mas sencillo realizar cambios por cada media querie que se tena, ademas si crece mucho cada bloque de código evitamos el perdernos fácilmente con un solo css muy grande.
RT @Jtorrecilla: Gran post por @0GiS0 CSS Media Queries (Responsive Web Design) http://t.co/Z5ZYI7iK
RT @0GiS0: #CSS Media Queries (Responsive Web Design) http://t.co/MDwtdSWq #ResponsiveWebApps
Para el caso de IE8 (que no soporta media queries) me ha funcionado (casi para todo) el uso de response.js https://github.com/scottjehl/Respond
#CSS Media Queries (Responsive Web Design), por @0GiS0. http://t.co/kJ9Bgbh7
Gracias por los RTs! //CSS Media Queries (Responsive Web Design) http://t.co/MDwtdSWq
RT @0GiS0: Gracias por los RTs! //CSS Media Queries (Responsive Web Design) http://t.co/MDwtdSWq
CSS Media Queries (Responsive Web Design) http://t.co/UOp079l7 by @0GIS0
CSS Media Queries (Responsive Web Design) http://t.co/R9RmZJ1K
Interesante artículo #css #responsivedesign #mediaquery http://t.co/NwTRz8uv
Bueno y simples tutorial.
#css3 CSS Media Queries (Responsive Web Design) « //return(GiS);: http://t.co/teyk3iZw
@mejorandola @deswebcom Has tus #web para #responsive con #CSS Media Queries http://t.co/jZCd54VT
Otra opción podría ser colocar el @import dentro del @media, ¿es esto correcto?
@media screen and (max-width: 320px)
{
@import(‘mobile.css’) screen and (max-width: 320px)
}
Quién me puede ayudar con esta idea?
Pingback HTML 5 Fullscreen API | return(gis);