2012-04-24 2 views
25

Я пересматриваю свой блог с учетом адаптивного веб-дизайна и метода «мобильный первый». Короче говоря, я стараюсь использовать минимальную ширину, чтобы избежать какой-либо репликации или css .. нет отображения: нет и т. д.Специфичность CSS, медиа-запросы и минимальная ширина

Моя проблема заключается в том, что когда мне нужно переписать значение CSS, нижняя минимальная ширина имеет приоритет. Пример:

@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; } 
} 

Я бы ожидать, когда я нахожусь в резолюциях 600px и выше, чтобы получить 2.2em h2, но вместо этого я получаю 1.7em .. В моих Dev инструментов, которые я вижу, что декларация 2.2em является там, но другой имеет преимущество. Это не имеет смысла!

Могу ли я использовать минимальную ширину и эффективно перезаписывать объявления с более высоким разрешением без использования более сильных селекторов или максимальной ширины.?

+2

Для уточнения на ответ BoltClock в поле ниже, это то, что думает браузер: Он попадает в первый медиа-запрос «О, у меня минимальная ширина 600! Давайте установим размер моего шрифта в 2.2em! '. Затем он переходит к следующему медиа-запросу: «О, у меня минимальная ширина 320! Давайте теперь установим мой шрифт! ». –

+1

Ответ единорога правильный, но, возможно, вам стоит подумать о максимальной ширине вместо min-width. Если на меньших экранах требуется меньший размер H2, вы можете написать 'font-size: 2.2em' без медиа-запроса, а затем' font-size: 1.7em' в запросе для max-width: 599px'. –

+0

max-width на самом деле не очень хорошая практика .. трудно объяснить, но когда вы используете максимальную ширину, вы в конечном итоге перезаписываете дублирующее CSS. Проверьте http://www.html5rocks.com/en/mobile/responsivedesign/ –

ответ

32

Я бы ожидал, когда у меня будет разрешение 600 пикселей и выше, чтобы получить 2.2em h2, но вместо этого я получаю 1.7em .. В моих инструментах Dev я вижу, что декларация 2.2em есть, но другой имеет преимущество. Это не имеет смысла!

Имеет смысл. Если материал соответствует min-width: 600px, он должен также выполнять min-width: 320px; другими словами, все, что имеет ширину не менее 600 пикселей, также имеет ширину не менее 320 пикселей, так как 600 больше 320.

Поскольку оба медиа-запроса оцениваются как true, последнее правило имеет приоритет в каскаде, что делает ваш код эквивалентен следующему:

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

это объясняет, почему 2.2em появляется в ваших инструментов разработчика, но не принимает видимого эффекта.

Наиболее простое решение, чтобы переключить свои @media блоки вокруг так, что ваши правила каскада в правильном порядке:

@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

Специфика CSS также учитывает порядок появления ... иногда вы просто пропускаете самые очевидные вещи, когда вы проводите 12 часов перед компьютером! Спасибо Unicorn :) –

+0

Я не понимаю. Почему, если носитель шириной не менее 600 пикселей также имеет ширину не менее 320 пикселей? действительно ли это означает, что ** может быть шириной 320 пикселей (например, путем изменения размера окна браузера меньше)? –

+0

@ Джон Ван: 600 пикселей больше, чем 320 пикселей. Так что если что-то 600px или шире, это также 320px или шире. В этом смысл «по крайней мере». – BoltClock

Смежные вопросы