Переход с 960 Grid на ZURB Foundation
960gs была отличной системой вёрстки! Поскольку у подавляющего большинства посетителей вашего сайта был монитор с разрешением как минимум 1024 пикселя по горизонтали, 960g позволял легко построить сайт прямо в HTML/CSS.
Но с появлением различных мобильных устройств и медиа-запросов (media queries) сайты, свёрстанные при помощи сетки фиксированной ширины, стали сильно проигрывать сайтам с адаптивным дизайном.
В этой статье я расскажу, как перенести ваш дизайн из 960gs в ZURB Foundation Framework. Хотя надо отдать должное 960gs: этот заслуженный фреймворк пытается шагать в ногу со временем, в нём ведь можно использовать adapt.js... Но не будем отвлекаться.
Тема этой статьи – сетка в Foundation, её сравнение с сеткой 960gs и дополнительные возможности Foundation, получаемые при помощи SASS. Далее я буду подразумевать, что читатель уже хорошо знаком с 960gs и присматривается к Foundation, чтобы использовать на практике адаптивный дизайн.
Сетка
Для начала рассмотрим концепцию строк и столбцов в Foundation в сравнении с 960gs. В 960gs принято было использовать один мега контейнер и выстраивать строку при помощи комбинации вложенных в него контейнеров, например:
<div class="container_12">
<div class="grid_6"></div>
<div class="grid_6"></div>
<div class="grid_6"></div>
<div class="grid_6"></div>
</div>
Можно (но необязательно), завершить первую строку при помощи <div class="clear"></div>, что эквивалентно двенадцати столбцам. Такой расклад породит две строки с двумя столбцами одинаковой ширины.
Классы alpha и omega удаляют у контейнера margin-left и margin-right соответственно.
Того же результата можно добиться с использованием предопределённых классов в Foundation:
<div class="row">
<div class="medium-6 columns"></div>
<div class="medium-6 columns"></div>
</div>
<div class="row">
<div class="medium-6 columns"></div>
<div class="medium-6 columns"></div>
</div>
Как видите, мега контейнер отсутствует. Имеются контейнеры строк, в которые вложены контейнеры столбцов, и столбцы также дают в сумме 12. Для определения ширины столбца вместе с классом columns должен использоваться один из классов, задающих ширину, например medium-6.
Если продолжить сравнение, то концепция сетки в Foundation похожа на таковую в Twitter Bootstrap, за исключением того, что Foundation позволяет задавать ширину столбца в нескольких критических точках, определяемых шириной экрана.
Нотация medium-6 говорит о том, что данная колонка на экране средней ширины (по умолчанию – не шире 641 пикселя) займёт 6 долей ширины из 12, то есть половину доступного экранного пространства.
Чтобы указать, как должна измениться относительная ширина колонки на другом разрешении, нужно добавить тот же <div> в другие классы, начинающиеся на small или large, например:
<div class="row">
<div class="medium-6 small-6 columns"></div>
<div class="medium-6 small-6 columns"></div>
</div>
<div class="row">
<div class="medium-6 small-3 columns"></div>
<div class="medium-6 small-9 columns"></div>
</div>
Использование Foundation предполагает, что сайт будет учитывать, прежде всего, устройства с малой шириной экрана. Начинайте вёрстку с поддержки таких устройств, а потом, если возникнет такая необходимость, расширяйте её для больших экранов.
Foundation устроен согласно концепции «Мобильность прежде всего». Это означает, что если вы зададите для столбца один из small-классов, его параметры будут наследоваться через все критические точки, если только поведение в этих точках не будет явно задано при помощи классов medium или large.
С другой стороны, если вы зададите, например, только класс medium, то система будет использовать для малых экранов стиль по умолчанию, который аналогичен small-12.
Эквивалент 960gs
Учитывая вышесказанное, изменения кода при переходе от старого фреймворка к новому должны производиться так: сначала удаляется <div> класса container, затем вокруг группы grid_#-блоков, образующих одну строку, выстраивается <div> класса row. Затем во всех блоках-ячейках grid_# заменяется на medium-#.
Полученный расклад будет похож на то, как ваша старая 960gs выглядела на экранах шириной в 640 пикселей и уже. Набор столбцов растянется на весь экран, то есть у каждого столбца ширина будет составлять 100%.
Вот ещё некоторые концепции 960gs, переведённые на язык Foundation.
Вложенность
В системе 960gs вложенность достигалась при помощи классов alpha и omega, удаляющих горизонтальные отступы у блока. При таком подходе вложенные строки должны содержать столько же условных ячеек по ширине, сколько их есть у внешнего блока.
В Foundation, чтобы создать вложенную строку, достаточно добавить <div> класса row в любую ячейку. Никаких дополнительных классов не требуется.
Главное отличие от 960gs состоит в том, что вложенная строка делит оставшуюся ей ширину на те же 12 долей. То есть строка внутри блока с классом medium-6 разделит эти 6 условных ячеек на 12.
Создание разрывов
Классы prefix и suffix в 960gs были отличным инструментом для вставки пустых промежутков и центрирования блоков. В Foundation эти же функции выполняют классы offset.
Переупорядочивание столбцов
Этот функционал очень похож в обоих фреймворках. Вы можете располагать блоки в HTML в каком угодно порядке, а их горизонтальное положение на экране будут задавать классы push и pull.
Дополнительная информация
Foundation может всё, что может 960gs, и даже намного больше. Обратитесь к документации, чтобы получить исчерпывающую информацию о возможностях ZURB Foundation.
Критические точки Foundation
Вот мы и подошли к главному, ради чего занялись Foundation: к адаптивности. О точках large, medium и small вы уже знаете.
Существуют также xlarge и xxlarge. (Как в американских размерах одежды. Удобно запомнить, не правда ли?). Вот как соотносятся критические точки и ширина экрана:
Критическая точка | Ширина экрана |
small | до 40em (640px) |
medium | от 40,063em (641px) до 64em (1024px) |
large | от 64,063em (1025px) до 90em (1440px) |
xlarge | от 90,063em (1441px) до 120em (1920px) |
xxlarge | 120,063em (1921px) и более |
Обратите внимание: только классы small, medium и large можно использовать непосредственно в HTML. Для работы с xlarge или xxlarge, равно как и для кастомизации любого класса, нужно применять SASS.
Опции SASS
Foundation использует Compass и SASS. Если вы уже на «ты» с SASS, это значительно облегчает дело. Если же нет, здесь вы можете почитать о том, как начать работать с SASS в Foundation.
Главное преимущество, которое даёт SASS в работе с Foundation, состоит в том, что вместо добавления специфических для Foundation классов в вашу разметку вы можете расширять эти классы на основе уже существующей разметки.
Например, класс news можно заставить вести себя как сочетание классов grid-6 columns.
Вот пример, как этого можно добиться. Допустим, у вас есть HTML-разметка:
<div class="main">
<div class="news"></div>
<div class="events"></div>
</div>
Чтобы блоки делили экран между собой по 50%, ваш SASS должен быть следующим:
.main {
@include grid-row;
.news {
@include grid-column(6);
}
.events {
@include grid-colmn(6);
}
}
Это то же самое, как если бы мы изменили HTML-код следующим образом:
<div class="row">
<div class="small-6 columns"></div>
<div class="small-6 columns"></div>
</div>
Создание дополнительных критических точек
Для того чтобы добавить точку разрыва, вы должны использовать в работе с CSS такой приём:
.main {
@include grid-row;
.news {
@include grid-column(8);
@media #{$large-up} {
grid-column(6)
}
}
.events {
@include grid-colmn(4);
@media #{$large-up} {
grid-column(6)
}
}
}
Что равнозначно:
<div class="row">
<div class="small-8 large-6 columns"></div>
<div class="small-4 large-6 columns"></div>
</div>
Такая техника работы с CSS полезна тем, что позволяет не вносить изменения в HTML-код, что больше подходит к концепции разделения содержания и представления.
Избегайте дублирования стилей
Есть ещё одна примечательная особенность работы со стилями в Foundation. Если вы собираете свои стили в отдельные файлы, но хотите использовать в них примеси из Foundation, вы должны определить переменную $include-html-classes как false. Это может выглядеть так:
@import "foundation/settings";
$include-html-classes: false;
@import "foundation";
Пути могут отличаться в зависимости от расположения документов на вашем сайте. Эта переменная поможет вам избежать дублирования стилей фреймворка Foundation при использовании всех его настроек, функций и примесей.
Используйте эту технику, если вы уже включили основной .css-файл Foundation в вашу страницу. Тогда у вас будет место для хранения особых настроек страницы или набора страниц.
В заключение
В этой статье мы лишь поверхностно взглянули на Foundation и SASS. Этот фреймворк и эта технология богаты идеями и возможностями, и к тому же они имеют множество активных сторонников-разработчиков, день за днём совершенствующих и дополняющих их.