Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Error con los media queries

19 de agosto de 2015

Estoy haciendo un sitio con la metodología "mobile first". Venía todo bien hasta que empiezo a tener algunos problemas con los media queries que se pisan, en especial los landscape. Estoy usando medidas only screen de determinados dispositvo. Por ejemplo:

Quiero que esta clase tenga un tamaño de 2em solamente en la medida 667x375 en landscape. Por eso declaro la línea only-screen. Esto en la línea de mi hoja mediaqueries.css en la linea 111.

@media only screen and (max-device-width: 677px) and (min-device-width: 375px)
       and (orientation: landscape) {
    .title-hover-content h4 {
        /*font-size: 2em;*/
    }
}

Pero ese estilo me lo pisa por otro que está en la misma hoja pero en la linea 153 porque según la filosofía "mobile first" hay que diseñar desde lo más chico a lo más grande:

@media only screen and (max-device-width: 1024px) and (min-device-width: 600px)
        and (orientation: landscape) {
    .title-hover-content h4 {
        font-size: 4em;
    }
}

Quería una orientación a qué me está pasando y por qué estoy teniendo ese problema. Me resulta raro que si declaro que solo se vea con una determinada medida en una determinada, me lo pise por otra regla que dice también eso que solamente muestre en una media pero me aparece en otra.

Saludos, y gracias.


Respuestas

#1

El problema que te está sucediendo es que has definido un diseño "responsive" en el que dos comportamientos diferentes se solapan. El navegador procesa tu CSS de la siguiente manera y en el siguiente orden:

  • Si el navegador mide entre 375 y 677 píxel, usa 2em
  • Si el navegador mide entre 600 y 1024 píxel, usa 4em

Con valores como 375 o 1024 no va a haber problemas, pero con todos los valores enter 600 y 677 sí que vas a tener problemas. El motivo es que dos reglas diferentes dicen cosas distintas para un mismo valor. Como sabes, en CSS cuando sucede eso siempre gana el selector más específico y en caso de empate, el último que se haya definido. Así que por eso en tu caso el valor 4em machaca al 2em.

La solución sería hacer un diseño que no se solape y en el que las "fronteras" entre las diferentes fases del "responsive" estén perfectamente alineadas:

@media only screen
       and (max-device-width: 677px)
       and (min-device-width: 375px)
       and (orientation: landscape) {
    .title-hover-content h4 {
        font-size: 2em;
    }
}
 
@media only screen
       and (max-device-width: 1024px)
       and (min-device-width: 677px) /* <-- CAMBIA ESTO (aquí antes ponía 600px) */
       and (orientation: landscape) {
    .title-hover-content h4 {
        font-size: 4em;
    }
}

@javiereguiluz

19 agosto 2015, 15:21
#2

Ya lo cambié y me sigue pisando otro, ¿debería ver en todas las declaraciones lo que me decís para que no se pisen estilos?

@jonatancaudo

19 agosto 2015, 15:48
#3

Sí, deberías cambiarlo en todos los casos en los que se produce ese solapamiento. Lo que te recomiendo es que aproveches los cambios para simplificar un poco los estilos. Como estás trabajando con "mobile first", no hace falta que indiques la anchura máxima del dispositivo. Basta con indicar le anchura mínima y definir los estilos siempre del más pequeño al más grande.

Si te fijas por ejemplo en el código de Bootstrap, ellos lo resuelven simplemente con:

@media (min-width: 768px) {
    /* ... */
}
 
@media (min-width: 992px) {
    /* ... */
}
 
@media (min-width: 1200px) {
    /* ... */
}

Si lo haces en ese orden, no hace falta que te líes con las anchuras máximas.

@javiereguiluz

19 agosto 2015, 16:15
#4

Ya hice varios sitios con esas medidas pero en la parte mobile muchas veces las cosas quedan mal por la tanta variedad de pantallas, por eso quise ser más específico y agrupar pantallas en mediaqueries y mostrar contenido con la regla onlyscreen.

@jonatancaudo

19 agosto 2015, 16:48
#5

Hola.. te hago una consulta! por lo principal aclararte que soy novato en responsive..

trabajando con una web, estas son mis medidas.. el problema que tengo es que en la primer medida pongos mis reglas en lo que es tipografias, font size etc y son respetada ahora cuando quiero ponerlas en las demas medidas no me las tomas.. la idea es que en las demas medidas los tamaños van cambiando para mejor lectura.. que puede ser que este haciendo mal? alguna idea..?

@media only screen and (min-width: 360px) and (max-width: 480px) {

carousel {

height: 70px;
font-size:18px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000;
 
}

texto1 {

height: 45px;
font-size:12px;
color:#ffffff; 
text-shadow: 4px 4px #000000;}

carousel2 {

height: 70px;
font-size:18px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000;
 
}

texto2 {

height: 45px;
font-size:12px;
color:#ffffff; 
text-shadow: 4px 4px #000000;}

carousel3 {

height: 70px;
font-size:16px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000; */

}

texto3 {

height: 45px;
font-size:10px;
color:#ffffff; 
text-shadow: 4px 4px #000000;
}

}

// Small devices (landscape phones, 576px and up) @media (min-width: 576px) and (max-width: 767px) {

carousel {

height: 70px;
font-size:28px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000;
 
}

texto1 {

height: 45px;
font-size:22px;
color:#ffffff; 
text-shadow: 4px 4px #000000;}

carousel2 {

height: 70px;
font-size:28px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000;
 
}

texto2 {

height: 45px;
font-size:22px;
color:#ffffff; 
text-shadow: 4px 4px #000000;}

carousel3 {

height: 70px;
font-size:28px;
color: hsla(127,86%,30%,1.00);
font-family: 'Signika', sans-serif;
text-shadow: 4px 4px #000000; */

}

texto3 {

height: 45px;
font-size:22px;
color:#ffffff; 
text-shadow: 4px 4px #000000;
}

} // Medium devices (tablets, 768px and up) @media (min-width: 769px) and (max-width: 991px) {

}

// Large devices (desktops, 992px and up) @media (min-width: 992px) and (max-width: 1199px) {

}

// Extra large devices (large desktops, 1200px and up) @media (min-width: 1200px) {

@diecoronel

4 enero 2018, 14:59