2012-04-24 15 views
25

Przeprojektowuję mój blog z myślą o responsywnym projektowaniu stron internetowych i metodzie "mobilnej pierwszej". W skrócie próbuję użyć minimalnej szerokości, aby uniknąć wszelkiego rodzaju replikacji lub css ... no display: none's etc ..Specyfika CSS, zapytania o media i min-szerokość

Mój problem polega na tym, że gdy muszę nadpisać wartość CSS, pierwszeństwo ma mniejsza min-szerokość. Przykład:

@media only screen and (min-width: 600px) { 
    h2 { font-size: 2.2em; } 
} 

@media only screen and (min-width: 320px) { 
    h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 
} 

będę oczekiwać, kiedy jestem w uchwałach 600px i powyżej, aby uzyskać h2 2.2em, ale zamiast dostać 1.7em .. W moich narzędzi Dev widzę, że deklaracja jest 2.2em tam, ale drugi ma pierwszeństwo ... To nie ma sensu!

Czy mogę nadal używać szerokości minimalnej i skutecznie zastępować deklaracje w wyższych rozdzielczościach bez użycia silniejszych selektorów lub szerokości maksymalnej ..?

+2

do wyjaśnienia na odpowiedź BoltClock jest poniżej, to właśnie przeglądarka myśli: To uderza pierwszego zapytania mediów "Och, mam minimalną szerokość 600! Ustaw rozmiar czcionki na 2,2! ". Następnie przechodzi do następnego zapytania o media: "Och, mam minimalną szerokość 320! Ustaw teraz moją czcionkę! ". –

+1

Odpowiedź jednorożca jest poprawna, ale może powinieneś myśleć w kategoriach maksymalnej szerokości zamiast minimalnej szerokości. Jeśli chcesz mieć mniejszy rozmiar H2 na mniejszych ekranach, możesz napisać 'font-size: 2.2em' bez zapytania mediów, a następnie' font-size: 1.7em' w zapytaniu dla 'max-width: 599px'. –

+0

max-width nie jest tak naprawdę dobrą praktyką .. trudno to wytłumaczyć, ale kiedy używasz max-width, kończysz pisanie duplikatów CSS. Sprawdź http://www.html5rocks.com/en/mobile/responsivedesign/ –

Odpowiedz

32

będę oczekiwać, kiedy jestem w uchwałach 600px i powyżej, aby uzyskać h2 2.2em, ale zamiast dostać 1.7em .. W moich narzędzi Dev widzę, że deklaracja 2.2em ma, ale drugi ma pierwszeństwo ... To nie ma sensu!

Ma to sens. Jeśli nośnik spełnia wartość min-width: 600px, powinien również spełniać wartość min-width: 320px; innymi słowy, wszystko, co ma co najmniej 600 pikseli szerokości ma również co najmniej 320 pikseli szerokości, ponieważ 600 jest większe niż 320.

Ponieważ oba media oceniają wartość true, reguła, która występuje jako ostatnia, ma pierwszeństwo w kaskadzie, powodując Twój kod równoważne to:

h2 { font-size: 2.2em; } 
h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 

to wyjaśnia, dlaczego 2.2em pojawia się w dostarczaniu narzędzi programistycznych, ale nie ma wyraźnego wpływu.

Najprostszym rozwiązaniem jest przełączenie swoje @media bloków wokół, więc reguły kaskadę w odpowiedniej kolejności:

@media only screen and (min-width: 320px) { 
    h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 
} 

@media only screen and (min-width: 600px) { 
    h2 { font-size: 2.2em; } 
} 
+1

Specyfika CSS bierze również pod uwagę kolejność pojawiania się ... czasami brakuje najbardziej oczywistych rzeczy, gdy spędzasz 12 godzin przed komputerem! Dzięki Unicorn :) –

+0

Nie rozumiem. Jak to możliwe, jeśli medium o szerokości co najmniej 600 pikseli ma szerokość co najmniej 320 pikseli? czy to naprawdę oznacza, że ​​** może ** mieć szerokość 320 pikseli (np. poprzez zmianę rozmiaru okna przeglądarki na mniejszą)? –

+0

@John Wang: 600px to więcej niż 320px. Więc jeśli coś ma 600px lub więcej, to także 320px lub więcej. Takie jest znaczenie "przynajmniej". – BoltClock