Определение запросов мультимедиа CSS в селекторах

Есть ли какие-либо проблемы (производительность - моя главная задача), если вместо определения селекторов css в запросах мультимедиа (пример 1) вы определяете запросы к мультимедиа в css-селекторах (пример 2).

Пример 1 - селектора css в запросах медиа

@media (min-width: 600px) {
  .foo { ... }
  .bar { ... }
  .hello { ... }
  .world{ ... }
}

@media (min-width: 1000px) {
  .foo { ... }
  .bar { ... }
  .hello { ... }
  .world{ ... }
}

@media (min-width: 1500px) {
  .foo { ... }
  .bar { ... }
  .hello { ... }
  .world{ ... }
}

Пример 2 - медиа-запросы в селекторах css

.foo {
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

.bar {
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

.hello {
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

.world{
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

Возможно, вам интересно: "Зачем это?". В LESS существуют некоторые ограничения, связанные с расширением классов во внутренних медиа-запросах, а также с помощью переменных диапазона.

Ответ 1

Короткий ответ, нет. Нет проблем с производительностью при определении медиа-запросов в селекторах CSS.

Но давайте погрузиться в...

Как описано в статье Anselm Hannemann, отличной статье "Эффективность Интернета: один или тысячи медиа-запросов" , нет никакой потери производительности при добавлении медиа-запросов таким образом, каким вы являетесь.

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

.foo {
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

.bar {
  @media (min-width: 600px) { ... }
  @media (min-width: 1000px) { ... }
  @media (min-width: 1500px) { ... }
}

Тем не менее, делает количество различных медиа-запросов, которые вы используете. Разные разные min-widths, max-widths и т.д.

Ответ 2

Не должно быть разницы в производительности, чтобы посмотреть, как браузеры обрабатывают мультимедийные запросы. Двигатели браузера сериализуют и вытесняют дублированные медиа-запросы, поэтому им нужно только один раз оценивать каждый медиа-запрос. Кроме того, они кэшируют запросы, чтобы впоследствии их можно было повторно использовать. Не имеет значения, используете ли вы один большой или несколько медиа-запросов в своем коде, предполагая, что ваши значения в основном одинаковы.


Некоторые из возможностей, когда могут возникать проблемы с производительностью

  • Вы используете несколько мультимедийных запросов с разными значениями, а окно браузера изменено. По мере изменения размера окна браузера несколько запросов к мультимедиа могут быть большими накладными расходами на процессоре.
  • Когда селектор CSS слишком сложный. Сложный селектор CSS значительно затрудняет работу, чем несколько запросов к мультимедиа. Поэтому наличие нескольких медиа-запросов внутри сложных селекторов может вызвать проблемы с производительностью.