Подтвердить что ты не робот

Как следует управлять медиа-запросами CSS3?

Поскольку существует много способов реализации CSS3 Media Queries на веб-сайте, я хотел бы знать, какой из них рекомендуется более опытным веб-дизайнерам. Я могу представить пару:

1. Все в одном листе стилей

Существует стиль по умолчанию, который применяется ко всем ширинам экрана и медиа-запросам, которые применяются только для уменьшения ширины экрана и перезаписывают по умолчанию все в одном файле. Например:

HTML

<link rel="stylesheet" href="main.css">

main.css

article
{
    width: 1000px;    
}

@media only screen and (max-width: 1000px)
{
    article
    {
        width: 700px;
    }

}

(помните, что это всего лишь пример)

Плюсы:

  • Стиль по умолчанию применяется к старым браузерам.
  • Требуется только один запрос HTTP

Минусы:

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

2. Отдельные таблицы стилей

Существуют отдельные таблицы стилей, содержащие полный код, предназначенный для каждой ширины экрана. Браузеры загружают только тот, который применяется. Например:

HTML

<link rel="stylesheet" href="large-screen.css" media="screen and (min-width: 1001px)"> /*Also older browsers*/
<link rel="stylesheet" href="small-screen.css" media="only screen and (max-width: 1000px)">

большой screen.css

article
{
    width: 1000px;
}

малые screen.css

article
{
    width: 700px;
}

Плюсы:

  • Аккуратный и организованный
  • Требуется только один запрос HTTP
  • Браузеры загружают только то, что им нужно.

Минусы:

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

3. Отдельные таблицы стилей, один глобальный список стилей

То же, что и # 1, но глобальный стиль и медиа-запросы находятся в отдельных таблицах стилей. Например:

HTML

<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="small-screen.css" media="only screen and (max-width: 1300px)">

main.css

article
{
    width: 1000px;
}

малые screen.css

article
{
    width: 700px;
}

Плюсы:

  • Также опрятный и управляемый
  • У вас нет проблемы С# 2 при внесении глобальных изменений.
  • Глобальный стиль применяется к старым браузерам.

Минусы:

  • Меньшая ширина экрана требует 2 HTTP-запроса.

Это все, о чем я могу думать. Как управлять медиа-запросами?

Спасибо за любые ответы.

4b9b3361

Ответ 1

Ну, я, конечно, не могу утверждать, что являюсь авторитетом в этом вопросе (я все еще сам изучаю правила кодирования), но я на самом деле склоняюсь к опции № 1 - единственной таблице стилей. Однако я думаю о конкретной реализации этого. Вместо того, чтобы иметь единственную точку разрыва для каждого случая размера экрана, вам нужны новые стили, я бы предложил несколько точек останова - один для стилей CSS каждого модуля, где нужно было бы разрешить несколько размеров экрана.

А... это могло быть слегка запутанным выражением. Пример в порядке...

Вместо того, чтобы что-то вроде:

/*default styles:*/
/*header styles*/
.header-link{  ...  }
.header-link:active{  ...  }
.header-image{  ...  }
.header-image-shown{  ...  }
.header-table-cell{  ...  }

/*content styles*/
.content-link{  ...  }
.content-link:active{  ...  }
.content-image{  ...  }
.content-image-shown{  ...  }
.content-table-cell{  ...  }

/*footer styles*/
.footer-link{  ...  }
.footer-link:active{  ...  }
.footer-image{  ...  }
.footer-image-shown{  ...  }
.footer-table-cell{  ...  }

/*alternate styles for smaller screens:*/
@media only screen and (max-width: 1000px){
    /*header styles*/
    .header-link{  ...  }
    .header-image{  ...  }
    .header-image-shown{  ...  }
    .header-table-cell{  ...  }

    /*content styles*/
    .content-link{  ...  }
    .content-image{  ...  }
    .content-image-shown{  ...  }
    .content-table-cell{  ...  }

    /*footer styles*/
    .footer-link{  ...  }
    .footer-image{  ...  }
    .footer-image-shown{  ...  }
    .footer-table-cell{  ...  }
}

Я предлагаю вариант # 1, только что реализованный как:

/*default header styles*/
.header-link{  ...  }
.header-link:active{  ...  }
.header-image{  ...  }
.header-image-shown{  ...  }
.header-table-cell{  ...  }

/*alternate header styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .header-link{  ...  }
    .header-image{  ...  }
    .header-image-shown{  ...  }
    .header-table-cell{  ...  }
}

/*default content styles*/
.content-link{  ...  }
.content-link:active{  ...  }
.content-image{  ...  }
.content-image-shown{  ...  }
.content-table-cell{  ...  }

/*alternate content styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .content-link{  ...  }
    .content-image{  ...  }
    .content-image-shown{  ...  }
    .content-table-cell{  ...  }
}

/*default footer styles*/
.footer-link{  ...  }
.footer-link:active{  ...  }
.footer-image{  ...  }
.footer-image-shown{  ...  }
.footer-table-cell{  ...  }

/*alternate footer styles for smaller screens*/
@media only screen and (max-width: 1000px){
    .footer-link{  ...  }
    .footer-image{  ...  }
    .footer-image-shown{  ...  }
    .footer-table-cell{  ...  }
}

(Все классы являются заполнителями. Я не очень креативен...)

Хотя это означает, что вы будете делать одно и то же объявление объявления мультимедиа несколько раз (что приведет к еще большему количеству кода), это намного удобнее для тестирования отдельных модулей, что в целом поможет поддерживать работоспособность вашего сайта по мере его получения больше. Попробуйте добавить несколько реальных стилей, больше тегов/классов/id в пример, который я дал, и, возможно, добавить к ним немного больше пробелов, и вы скоро увидите, насколько быстрее он будет сузить и изменить/добавить стили (через все размеры экрана) в реализации, показанной второй частью примера.

И я полностью согласен с этим ответом на информацию от Scalable и Modular Architecture для CSS от Джонатана Снука. (В конце концов, ни один из новичков, как я, не смог бы понять и объяснить такой ответ, как это все!) Как указано в одной из многих соответствующих частей этой книги,

"... вместо одной точки останова, либо в основном файле CSS, либо в отдельной таблице стилей мультимедийных запросов, размещайте медиа-запросы вокруг состояний модуля."

Хотя, если по личным предпочтениям или другим вам лучше не использовать этот подход, тогда вы можете пойти с любым из других вариантов, которые вы предложили - в конце концов, сам Снок говорит, что его книга "больше ориентирована на стиль" чем жесткая структура ", поэтому не чувствую, что это стандарт кодирования. (Хотя я считаю, что это должно быть. XD)

Ответ 2

Я верю в "ввод кода, где вы его ожидаете". Если стиль нуждается в перегрузке, я бы хотел, чтобы мой код превысил максимально возможный стиль по умолчанию, поэтому в том же документе. Таким образом, через год я все равно буду знать, что происходит, когда я смотрю на код. В другом подходе (отдельный файл css для каждой точки останова) мне нужно будет помнить, что goo ищет переполнение кода стилей в отдельном файле. Не проблема, если я не забуду, я сделал это таким образом через год. Предположим, что это личное предпочтение, и браузеру все равно.

Ответ 3

Если вы хотите использовать второй вариант, вы можете избежать "копирования и вставки" глобальных стилей, которые вам нужны как для мобильных, так и для настольных версий сайта, которые удобны для veeeeeery и помогут вам сохранить все более организованное в моем и использует SASS.

У вас может быть что-то вроде этого:

> CSS Folder
> Sass folder
 - _global.scss
 - _mobile_layout.scss
 - _desktop_layout.scss
 - main_mobile.scss
 - main_desktop.scss

который будет скомпилирован в

> CSS Folder
 - main_mobile.css
 - main_desktop.css

Надеюсь, вы сочтете это полезным ^^