¿Cómo Se deben Gestionar las Consultas de Medios CSS3?


Dado que hay muchas maneras de implementar Consultas de medios CSS3 en un sitio web, me gustaría saber cuál es recomendado por diseñadores web más experimentados. Puedo pensar en un par:

1. Todo en una hoja de estilos

Hay un estilo predeterminado que se aplica a todos los anchos de pantalla, y las consultas de medios que se aplican solo a anchos de pantalla más bajos y sobrescriben el predeterminado, todo en un archivo. Para ejemplo:

HTML

<link rel="stylesheet" href="main.css">

Main.css

article
{
    width: 1000px;    
}

@media only screen and (max-width: 1000px)
{
    article
    {
        width: 700px;
    }

}

(por favor, tenga en cuenta que esto es solo un ejemplo)

Ventajas:

  • El estilo predeterminado se aplica a navegadores antiguos
  • Solo se requiere una solicitud HTTP

Contras:

  • Se complica con mucho código
  • Algunos navegadores tendrán que descargar código que no aplicarán

2. Hojas de estilo separadas

Allí son hojas de estilo separadas que contienen código completo adaptado para cada ancho de pantalla. Los navegadores solo cargan el que aplica. Por ejemplo:

HTML

<link rel="stylesheet" href="large-screen.css" media="screen and (min-width: 1001px)"> /*Also older browsers*/
<link rel="stylesheet" href="small-screen.css" media="only screen and (max-width: 1000px)">

Pantalla grande.css

article
{
    width: 1000px;
}

Pantalla pequeña.css

article
{
    width: 700px;
}

Ventajas:

  • ordenado y organizado
  • Solo se requiere una solicitud HTTP
  • Los navegadores solo cargan lo que necesitan

Contras:

  • (Esta es la razón por la que estoy indeciso para usar esto:) Cuando se realiza un cambio que se aplica a todos los anchos de pantalla, el cambio tiene que ser copiado y pegado en los puntos apropiados en todas las hojas de estilo.

3. Hojas de estilos separadas, una Hoja de Estilos Global

Lo mismo que #1, pero el estilo global y las consultas de medios están en hojas de estilo separadas. Para ejemplo:

HTML

<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="small-screen.css" media="only screen and (max-width: 1300px)">

Main.css

article
{
    width: 1000px;
}

Pantalla pequeña.css

article
{
    width: 700px;
}

Ventajas:

  • También limpio y manejable
  • No tiene problema de #2 al hacer cambios globales
  • El estilo global se aplica a navegadores antiguos

Contras:

  • Los anchos de pantalla más pequeños requieren 2 solicitudes HTTP

Eso es todo en lo que puedo pensar. Cómo debería los medios ¿se gestionan las consultas?

Gracias por cualquier respuesta.

Author: LonelyWebCrawler, 2012-07-23

3 answers

Bueno, ciertamente no puedo afirmar ser una autoridad en el asunto (todavía estoy aprendiendo sobre convenciones de codificación), pero en realidad me inclino hacia la opción #1 - una sola hoja de estilo. Estoy pensando en una implementación específica de la misma, sin embargo. En lugar de tener un solo punto de interrupción para cada caso de tamaño de pantalla para el que necesita nuevos estilos, sugeriría varios puntos de interrupción, uno para los estilos CSS de cada módulo donde se deben abordar varios tamaños de pantalla.

Ah...que podría haber sido un declaración ligeramente confusa. Un ejemplo está en orden...

En Lugar de algo como:

/*default styles:*/
/*header styles*/
.header-link{  ...  }
.header-link:active{  ...  }
.header-image{  ...  }
.header-image-shown{  ...  }
.header-table-cell{  ...  }

/*content styles*/
.content-link{  ...  }
.content-link:active{  ...  }
.content-image{  ...  }
.content-image-shown{  ...  }
.content-table-cell{  ...  }

/*footer styles*/
.footer-link{  ...  }
.footer-link:active{  ...  }
.footer-image{  ...  }
.footer-image-shown{  ...  }
.footer-table-cell{  ...  }

/*alternate styles for smaller screens:*/
@media only screen and (max-width: 1000px){
    /*header styles*/
    .header-link{  ...  }
    .header-image{  ...  }
    .header-image-shown{  ...  }
    .header-table-cell{  ...  }

    /*content styles*/
    .content-link{  ...  }
    .content-image{  ...  }
    .content-image-shown{  ...  }
    .content-table-cell{  ...  }

    /*footer styles*/
    .footer-link{  ...  }
    .footer-image{  ...  }
    .footer-image-shown{  ...  }
    .footer-table-cell{  ...  }
}

Yo sugeriría la opción # 1, simplemente implementada como tal:

/*default header styles*/
.header-link{  ...  }
.header-link:active{  ...  }
.header-image{  ...  }
.header-image-shown{  ...  }
.header-table-cell{  ...  }

/*alternate header styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .header-link{  ...  }
    .header-image{  ...  }
    .header-image-shown{  ...  }
    .header-table-cell{  ...  }
}

/*default content styles*/
.content-link{  ...  }
.content-link:active{  ...  }
.content-image{  ...  }
.content-image-shown{  ...  }
.content-table-cell{  ...  }

/*alternate content styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .content-link{  ...  }
    .content-image{  ...  }
    .content-image-shown{  ...  }
    .content-table-cell{  ...  }
}

/*default footer styles*/
.footer-link{  ...  }
.footer-link:active{  ...  }
.footer-image{  ...  }
.footer-image-shown{  ...  }
.footer-table-cell{  ...  }

/*alternate footer styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .footer-link{  ...  }
    .footer-image{  ...  }
    .footer-image-shown{  ...  }
    .footer-table-cell{  ...  }
}

(Todas las clases son marcadores de posición. No soy muy creativo...)

Aunque esto significa que hará la misma declaración de consulta de medios varias veces (lo que lleva a un poco más de código), es mucho más útil para probar módulos individuales, lo que en general ayudará a la mantenibilidad de su sitio ya que se hace más grande. Intente agregar varios estilos reales, más etiquetas / clases / id al ejemplo que di, y tal vez agregue un poco más de espacio en blanco a ellos, y pronto verá lo mucho más rápido que es reducir y cambiar/anexar estilos (en todos los tamaños de pantalla) en la implementación que se muestra en la segunda parte del ejemplo.

Y acredito esta respuesta completamente a la información de Arquitectura Escalable y Modular para CSS, por Jonathan Snook. (Después de todo, no hay manera de un principiante al igual que yo sería capaz de averiguar y razonar una respuesta como esa por mí mismo!) Como se cita de una de las muchas partes relevantes de ese libro,

"...en lugar de tener un único punto de interrupción, ya sea en un archivo CSS principal o en una hoja de estilo de consulta de medios separada, coloque las consultas de medios alrededor de los estados del módulo."

Sin embargo, si por preferencia personal u otra prefiere no usar este enfoque, entonces es libre de elegir cualquiera de las otras opciones que propuso, después de todo, El propio Snook dice que su libro "es más una guía de estilo que un marco rígido", así que no sientas que esto es un estándar de codificación. (Aunque siento que debería serlo. XD)

 28
Author: Serlite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-25 16:17:59

Creo en "poner el código donde lo esperas". Si un estilo necesita sobrescribir, querría que mi código que sobrescribe estuviera lo más cerca posible del estilo predeterminado, por lo tanto, en el mismo documento. De esa manera, dentro de un año, todavía sabré lo que está pasando cuando mire el código. En el otro enfoque (archivo css separado por punto de interrupción) necesitaré recordar buscar el código de estilos de anulación en un archivo separado. No hay problema, a menos que olvide que lo hice así dentro de un año. Supongo que es personal preferencia y el navegador no le importa.

 3
Author: Jorix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-05 17:09:45

Si desea utilizar la segunda opción, hay una manera de evitar "copiar+pegar" los estilos globales que necesita para sus versiones móviles y de escritorio del sitio, que es muy útil y le ayuda a mantener todo más organizado en mi opinión y que está utilizando SASS.

Podrías tener algo así:

> CSS Folder
> Sass folder
 - _global.scss
 - _mobile_layout.scss
 - _desktop_layout.scss
 - main_mobile.scss
 - main_desktop.scss

Que se compilará en

> CSS Folder
 - main_mobile.css
 - main_desktop.css

Espero que le resulte útil ^^

 1
Author: legnaleama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-22 08:42:19