Ostatnio projektuję witryny, które są bardziej responsywne i często korzystam z zapytań o media CSS. Zauważyłem, że kolejność definiowania zapytań o media ma znaczenie. Nie testowałem tego w każdej przeglądarce, ale tylko w Chrome. Czy istnieje wytłumaczenie tego zachowania? Czasami jest to frustrujące, gdy witryna nie działa tak, jak powinna i nie masz pewności, czy jest to zapytanie, czy kolejność, w jakiej zostało napisane.
Oto przykład:
HTML
<body>
<div class="one"><h1>Welcome to my website</h1></div>
<div class="two"><a href="#">Contact us</a></div>
</body>
CSS:
body{
font-size:1em; /* 16px */
}
.two{margin-top:2em;}
/* Media Queries */
@media (max-width: 480px) {
.body{font-size: 0.938em;}
}
/* iphone */
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
body {font-size: 0.938em;}
}
/*if greater than 1280x800*/
@media (min-width: 1200px) {
.two{margin-top:8em;}
}
/*1024x600*/
@media (max-height: 600px) {
.two{margin-top:4em;}
}
/*1920x1024*/
@media (min-height: 1020px) {
.two{margin-top:9em;}
}
/*1366x768*/
@media (min-height: 750px) and (max-height: 770px) {
.two{margin-top:7em;}
}
Jednak gdybym napisał zapytanie o 1024x600 w ostatnim, przeglądarka zignorowałaby ją i zastosowała wartość marginesu określoną na początku CSS (margin-top: 2em).
/* Media Queries - Re-arranged version */
@media (max-width: 480px) {
.body{font-size: 0.938em;}
}
/* iphone */
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
body {font-size: 0.938em;}
}
/*if greater than 1280x800*/
@media (min-width: 1200px) {
.two{margin-top:8em;}
}
/*1920x1024*/
@media (min-height: 1020px) {
.two{margin-top:9em;}
}
/*1366x768*/
@media (min-height: 750px) and (max-height: 770px) {
.two{margin-top:7em;}
}
/*1024x600*/
@media (max-height: 600px) {
.two{margin-top:4em;}
}
Jeśli moje rozumienie zapytań o media jest prawidłowe, kolejność nie powinna mieć znaczenia, ale wydaje się, że tak. Jaki może być tego powód?
źródło
Lub możesz po prostu dodać min-width do większego zapytania / ych mediów i nie mieć żadnych problemów, niezależnie od kolejności.
@media (min-width: 400.1px) and (max-width: 600px) { body { background: red; } } @media (max-width: 400px) { body { background: blue; } }
Używając tego kodu, w dowolnej kolejności, kolor tła będzie zawsze czerwony dla rozdzielczości o szerokości 400,1-600 pikseli i zawsze niebieski dla rozdzielczości o szerokości 400 pikseli lub mniej.
źródło