Отличный момент познакомиться с еще одной безграничной возможностью библиотеки Compass - это поработать с типографикой.

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

Убрать подчеркивание у ссылок в Compass

Начнем с простого и попробуем настроить вид и поведение ссылок с помощью Compass. Для этого необходимо подключить модуль в текущий проект в виде строки:

@import "compass/typography/links";

Затем создадим в HTML-файле пару параграфов с ссылками:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, eos, dolorum, eum blanditiis laudantium placeat aspernatur esse dolorem <a href="#">optio molestiae provident</a> nobis sint architecto dolores repudiandae magnam iste assumenda minima.</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sequi, nobis, maiores, quasi molestias dignissimos repellendus quis nemo quibusdam <a href="#">accusamus culpa numquam</a> voluptas sunt dolor inventore pariatur cumque a unde ut.</p>

… и применим к ссылкам миксин

1
hover-link
:

p {
  margin-bottom: 20px;

  a {
    @include hover-link;
  }
}

Если теперь посмотрим на скомпилированный вывод в CSS-файле, то увидим две до удивления простые строчки:

p a {
  text-decoration: none;
}

p a:hover {
  text-decoration: underline;
}

То есть, суть миксина

1
hover-link
в убирании подчеркивания у ссылки в ее обычном состоянии; и добавлении подчеркивания при состоянии hover. Попробуйте ввести показанный выше код в своем HTML-редакторе и посмотреть результат.

Изменение цвета ссылок в Compass

В Compass имеется миксин

1
link-colors
для управления цветом ссылок. То есть, с помощью этого миксина можно изменять стандартные цвета ссылки при ее различных состояниях.

Синтаксис миксина достаточно устрашающий, с первого взгляда:

link-colors($normal, $hover, $active, $visited, $focus)

Однако здесь нет ничего сложного. Пять переменных миксина принимают в качестве аргументов цвета для ссылки в пяти ее состояниях:

<ul>
  <li>$normal - цвет обычного состояния ссылки</li>
  <li>$hover - цвет ссылки при наведенном на нее курсоре мыши</li>
  <li>$active - цвет ссылки в момент нажатия на нее</li>
  <li>$visited - цвет посещенной ссылки</li>
  <li>$focus - цвет ссылки, получившей фокус с клавиатуры</li>
</ul>

При этом только один из параметров миксина

1
link-colors
является обязательным -
1
$normal
. Остальные можно опустить и тогда будут использоваться цвета по умолчанию.

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

@import "compass/typography/links/link-colors"

Откроем таблицу цветов, расположенную по адресу w3schools - HTML Colors и наугад возмем оттуда пять цветов в HEX-формате, которые передадим миксину в качестве аргументов:

a{
  @include link-colors(#CC0000, #CC3300, #CC6600, #CC9900, #CCCC00);
}

В скомпилированном CSS-файле появиться несколько строчек такого вида:

p a:visited {
  color: #cc9900;
}

p a:focus {
  color: #cccc00;
}

p a:hover {
  color: #cc3300;
}

p a:active {
  color: #cc6600;
}

Введите показанный здесь код у себя и посмотрите на результат.

Сброс всех стилей для ссылок в Compass

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

Например, имеется параграф с классом

1
.woo
, внутри которого расположена ссылка. Применим к ней миксин
1
unstyled-link
для сброса всех стилей, предварительно подключив модуль:

@import "compass/typography/links/unstyled-link";
p.woo a {
  @include unstyled-link;
}

Посмотрим на результат компиляции кода в CSS и увидим такую картину:

p.woo a {
  color: inherit;
  text-decoration: inherit;
  cursor: inherit;
}

p.woo a:active,
.wrap p.woo a:focus {
  outline: none;
}

Ссылка наследует от параграфа (то есть - текста, входящего в этот параграф) свойства цвета, подчеркивание и вид курсора; а также убирается рамка

1
outline
при получении ссылкой фокуса или щелчка мыши по ней.

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

На этом все.


Плавный переход от простого CSS-фреймворка 960gs к чуть более сложному фреймворку Blueprint.

Конечно, основой для изучения фреймворка Blueprint может послужить только официальное руководство. Эта статья - попытка автора осмыслить и научиться основам работы с фреймворком Blueprint. Статья является вольным переводом официального руководства по Blueprint.

Что такое Blueprint

Этот фреймворк предназначен для сокращения времени на разработку front-end проектов (ну конечно - ведь задача всех без исключения CSS-фреймворков заключается именно в этом; они для этого и были созданы).

В отличие от фреймворка 960gs, фреймворк Blueprint предлагает более богатый набор предустановленных возможностей. Помимо CSS-сетки (grid), имеются стили для типографики, для печати, для браузеров IE.

Фреймворк Blueprint

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

Также можно воспользоваться тестовой директорией на официальном сайте проекта, чтобы на практике убедиться во всех возможностях, которые предоставляет Blueprint.

Понятие “фреймворк” в данном контексте (имеется ввиду Blueprint) может вводить в заблуждение, так как Blueprint не поможет вам в задаче организации или написания CSS-кода.

Обзор структуры фреймворка Blueprint

Снизу вверх, перечислим CSS-слои, из которых состоит Blueprint:

  • CSS-reset - сброс стилей;
  • Типографика - предоставляет небольшой набор типографики и цветов оформления;
  • Grid - предоставляет набор CSS-классов, с помощью которых выполняется построение CSS-сетки.

Вторая часть фреймворка Blueprint - это js-скрипты, позволяющие настроить большинство деталей фреймворка, начиная с колонок и их ширины и заканчивая файловыми путями и именами CSS-классов.

Имеется два js-скрипта:

  • Compressor - для сжатия и обработки исходных файлов;
  • Validator - для валидации основных файлов фреймворка Blueprint;

Для того, чтобы начать работу с фреймворком Blueprint, необходимы (как минимум) три файла, подключенные к стартовой HTML-странице:

  • 1
    
    screen.css
    - весь CSS-код для вывода на устройства
    1
    
    screen
    и
    1
    
    projection
    ;
  • 1
    
    print.css
    - CSS-код для печати (вывод на принтеры);
  • 1
    
    ie.css
    - немного CSS-кода для корректной работы в браузерах IE.

Пример подключения вышеперечисленных файлов к HTML-странице показан ниже:

<link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print">
<!--[if lt IE 8]>
  <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->

Обратите внимание, что пути расположения файлов

1
screen.css
,
1
print.css
и
1
ie.css
у вас могут отличаться от приведенного в примере.

Использование CSS в фреймворке Blueprint

Как уже упоминалось выше, в фреймворке Blueprint имеются три основных CSS-слоя. Первые два CSS-слоя - это сброс стилей (

1
reset.css
) и типографика (
1
typography.css
); они применяют свое действие ко всем стандартным HTML-элементам страницы.

Другими словами, у вас нет нужды вносить какие-либо изменения в оба эти файла. Если вам, к примеру, необходимо изменить размер шрифта на странице, вы можете сделать это в своем собственном файле таблиц стилей; таким образом можно легко и безболезненно обновлять фреймворк Blueprint, не затрагивая при этом ваши собственные проекты.

Классы типографики в Blueprint

Во фреймворке Blueprint имеется небольшой набор классов для настройки типографики. Ниже приведен список имен классов с кратким описанием, для чего каждый из них предназначен:

  • 1
    
    .small
    - делает размер шрифта меньше стандартного;
  • 1
    
    .large
    - делает размер шрифта больше стандартного;
  • 1
    
    .hide
    - скрывает HTML-элемент;
  • 1
    
    .quiet
    - делает цвет текста менее ярким;
  • 1
    
    .loud
    - делает цвет текста черным;
  • 1
    
    .highlight
    - добавляет желтый фоновый цвет к тексту;
  • 1
    
    .added
    - добавляет зеленый фоновый цвет цвет к тексту;
  • 1
    
    .removed
    - добавляет красный фоновый цвет к тексту;
  • 1
    
    .first
    - удаляет
    1
    
    padding-left
    и
    1
    
    margin-left
    у элемента;
  • 1
    
    .last
    - удаляет
    1
    
    padding-right
    и
    1
    
    margin-right
    у элемента;
  • 1
    
    .top
    - удаляет
    1
    
    padding-top
    и
    1
    
    margin-top
    у элемента;
  • 1
    
    .bottom
    - удаляет
    1
    
    margin-bottom
    и
    1
    
    padding-bottom
    у элемента;

Примеры типографики в Blueprint

Стилизация форм в Blueprint

Для стилизации форм (

1
forms.css
) в фреймворке Blueprint существует два класса -
1
.text
и
1
.title
. Класс
1
.text
делает текст элемента
1
input
обычным, а класс
1
.title
делает текст поля ввода
1
input
большего размера.

Помимо этого, в Blueprint имеется несколько классов для создания и стилизации информационных сообщений и сообщений об ошибке:

  • 1
    
    div.error
    - создает сообщение об ошибке (красный блок);
  • 1
    
    div.notice
    - создает информационное сообщение (желтый блок);
  • 1
    
    div.success
    - создает сообщение об успехе (зеленый блок).

Создание сетки

Третьим слоем (

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

По умолчанию, во фреймворке Blueprint создается сетка из 24-х колонок, каждая из которых имеет ширину в 30px; между колонками имеется расстояние в

1
10px
, созданное через
1
margin
. Общая ширина сетки составляет 950px, что является оптимальной шириной для дисплеев размером
1
1024x768px
. Если вас интересует более узкий размер сетки, вам нужно обратиться к разделу с объяснениями настройки Blueprint.

Отлично! Но каким образом можно установить сетку на HTML-странице с помощью Blueprint? С помощью классов, предоставляемых этим фреймворком. Для того, чтобы создать новую колонку, воспользуйтесь тегом

1
<div>
и примените к нему класс вида
1
.span-x
.

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

<div class="container">
  <div class="span-24">The header</div>
  <div class="span-4">The first column</div>
  <div class="span-16">The center column</div>
  <div class="span-4 last">The last column</div>
  <div class="span-24">The footer</div>
</div>

Помимо класса

1
.span-x
существует еще пара классов, о которых необходимо обязательно знать. Во-первых, любой сайт, созданный с помощью Blueprint-сетки, должен иметь блок-обертку с классом
1
.container
, который, как правило, помещается сразу после тега
1
<body>
.

Во-вторых, последняя колонка в ряду (который по умолчанию может состоять из максимального числа - 24 колонок) должна иметь дополнительный класс

1
.last
для того, чтобы убрать
1
padding-right
и
1
margin-right
у последней. Колонка, имеющая класс
1
.span-24
, не нуждается в дополнительном классе
1
.last
, так как уже сама по себе занимает всю ширину сетки.

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

Ниже показан список дополнительных классов, которые могут пригодиться при создании сетки на Blueprint:

  • 1
    
    .append-x
    - добавляет
    1
    
    х
    колонок после указанной колонки;
  • 1
    
    .prepend-x
    - добавляет
    1
    
    х
    колонок перед указанной колонкой;
  • 1
    
    .push-x
    - сдвигает вправо колонку на указанное кол-во столбцов; может использоваться для смещения колонок;
  • 1
    
    .pull-x
    - сдвигает влево колонку на указанное кол-во столбцов; может использоваться для смещения колонок;
  • 1
    
    .border
    - создает границу с правой стороны колонки;
  • 1
    
    .colborder
    - создает пустую колонку, внутри которой (по середине вертикали) располагается граница
    1
    
    border
    ;
  • 1
    
    .clear
    - “очистка” потока;
  • 1
    
    .showgrid
    - добавьте к блоку-контейнеру или колонке для того, чтобы увидеть сетку или базовую линию

В этом списке

1
х
является числом в диапазоне от 1 до 23 применительно к классам
1
append\prepend
; и числом в диапазоне от 1 до 24 для классов
1
push\pull
. Эти значения будут меняться, если вы установите новое значение в качестве количества колонок в конфигурационном файле фреймворка.

Ниже показан еще один пример, в котором имеется четыре колонки одинаковой ширины, с границей между первыми двумя и последними двумя колонками, а также пустым промежутком (класс

1
.append-4
) посередине сетки шириной в четыре колонки:

<div class="container">
  <div class="span-5 border">The first column</div>
  <div class="span-5 append-4">The second column</div>
  <div class="span-5 border">The third column</div>
  <div class="span-5 last">The fourth (last) column</div>
</div>

Четыре колонки и класс .append-4

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

<div class="container">
  <div class="span-12">
    <div class="span-6">Top left</div>
    <div class="span-6 last">Top right</div>
    <div class="span-6">Bottom left</div>
    <div class="span-6 last">Bottom right</div>
  </div>
  <div class="span-12 last">Second half of page</div>
</div>

Вложенность в Blueprint

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

1
/tests/parts/grid.html
.

Скрипты

Фреймворк Blueprint имеет в своем составе два скрипта: один для сжатия и кастомизации CSS-файлов; второй для валидации CSS-файлов, составляющих основу фреймворка - это особенно полезно, если вы вручную вносили в них изменения.

Валидатор

Задача файла-валидатора предельно проста - проверить валидность основных CSS-файлов фреймворка. Для выполнения этой задачи скрипт имеет в своем комплекте версию W3C CSS валидатора. Для того, чтобы запустить скрипт, необходим установленный язык Ruby на компьютере. Скрипт запускается из терминала командой:

$ruby validate.rb

Компрессор

Так как CSS-файлы, которые используются при создании HTML-файлов, являются сжатыми, то вам необходимо снова произвести их компрессию, если вы производили в них изменения. Для этой цели служит скрипт компрессии.

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

Для того, чтобы сжать файл, необходимо просто запустить скрипт. Скрипт выполнит парсинг основных CSS-файлов и поместит новые сжатые файлы в папку проекта Blueprint. Также как и валидатор, компрессор должен быть установлен через Ruby. После установки скрипт его можно запустить из терминала с помощью команды:

$ruby compress.rb

Вызов файла скрипта без указания дополнительных параметров произведен извлечение файлов из папки

1
blueprint/src
и произведен их сжатие до трех файлов -
1
ie.css
,
1
print.css
,
1
screen.css
. Однако, с помощью аргументов можно изменить алгоритм работы скрипта.

Например, команда:

$ruby compress.rb -h

… покажет список аргументов, которые можно использовать совместно со скриптом.

Пользовательские настройки

Узнать больше о том, как применять пользовательские настройки, можно в документации к скрипту, расположенной по адресу

1
lib/compress.rb
.

На этом статья закончена.


Приступаем к интересной теме - вертикальному ритму “Vertical Rhythm” в веб-дизайне и способе его создания с помощью библиотеки Compass.

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

Ну, во-первых, в Интернете на момент написания статьи не так уж и много материалов по этой тематике; в немногочисленных материалах сущность вопроса преподносится как нечто очень сложное.

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

Vertical Rhythm - Школьная тетрадь в линейку

Так вот - сами не зная об этом, мы уже тогда использовали вертикальный ритм (Vertical Rhythm) на практике! Слово вертикальный ритм говорит само за себя - текст или контент на странице должен размещаться в определенном ритме, по определенному правилу; а не хаотично.

В данном случае все строки на такой странице должны размещаться по нарисованным линейкам - это и есть суть пресловутого Vertical Rhythm.

В типографике вертикальный ритм применяется с незапамятных времен; и только с недавних пор о вертикальном ритме заговорили применительно к веб-дизайну. Использование вертикального ритма в веб-дизайне подразумевает применение CSS-свойств, управляющих вертикальными параметрами элементов страницы: размером шрифта (

1
font-size
), высотой строки(
1
line-height
), отступами (
1
padding
и
1
margin
), границами (
1
border
).

Основная цель вертикального ритма - сделать текст (контент - в общем случае) максимально читабельным. То есть, это когда посетитель заходит на страницу, читает что-либо на ней, и сам процесс не доставляет ему никаких неудобств. Напротив - ему приятно читать такой текст.

В библиотеке Compass имеется модуль “Vertical Rhythm”, задача которого - максимально упростить создание и настройку вертикального ритма в проекте. Модуль Vertical Rhythm в Compass - это набор функций и миксинов, облегчающих вычисление высоты строк, вертикального

1
padding
и
1
margin
, толщины границ (
1
border
).

Вычисления основаны на базовой высоте строки

1
line-height
и базовом размере шрифта
1
font-size
с целью создания горизонтальной сетки. Давайте приступим к практике; то, что я не смог рассказать своими словами, думаю, будет наглядно показано на живых примерах.

Первое, что необходимо сделать - это установить (если еще не установлена) Compass версии

1
1.0.0 alpha 19
. Почему именно эту версию? В ней есть множество возможностей, которые отсутствуют в старой версии.

Установка Compass этой версии под Windows 7 на момент написания статьи является достаточно непростой задачей, поэтому рекомендую обратиться к статье “Медиа-запросы Breakpoint в Sass”.

Создаем и настраиваем проект в Compass

Создаем новый проект в командной строке с помощью Compass:

compass create vertical_rhythm_example --bare

Ключ

1
--bare
используется здесь, чтобы создать “голый” экземпляр проекта под Sass/Compass, без лишних файлов
1
print.scss
,
1
ie.scss
и так далее.

Производим неодходимые настройки в файле

1
config.rb
, а также создаем файлы
1
sass/style.scss
,
1
css/style.css
,
1
index.html
.

HTML-файл наполним структурой вида:

<div class="wrapper">
  <h1>header 1</h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae, architecto laborum quas iste nam maxime tempora temporibus inventore? Rerum, obcaecati porro officiis temporibus assumenda dicta odit ullam dolore vero laborum!</p>
  <h2>header 2</h2>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque, accusantium, amet, molestiae quas dolore deleniti non aut quis inventore repudiandae nostrum porro alias dolor pariatur rem sequi ea consequatur perferendis.</p>
  <h3>header 3</h3>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur, iusto, iure, quia ipsum dolore ea exercitationem porro et nostrum nam cumque hic possimus dolorem deleniti distinctio incidunt magnam earum quis.</p>
  <h4>header 4</h4>
  <img src="http://placehold.it/700x300" />
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora, omnis, ut, quis, nesciunt voluptatum rem dolor dolores amet vel sit error laboriosam quasi accusamus magnam neque sunt exercitationem molestias! Aperiam!</p>
  <h5>header 5</h5>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque, libero illum numquam sed quas. Assumenda, porro, suscipit, veniam, cum deleniti illo magnam harum ab earum obcaecati odit ad quo laudantium?</p>
  <img src="http://placehold.it/500x200" />
  <h6>header 6</h6>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquid, consectetur quod saepe unde corrupti tenetur minus nesciunt obcaecati tempore ut facere iusto pariatur corporis itaque eius? Doloribus, quaerat modi nihil.</p>
</div>

То есть, для чистоты эксперимента, создаем заголовки с первого по шестой уровень, несколько параграфов и два изображения. В процессе работы с модулем вертикального ритма будем пользоваться официальной документацией по адресу - Vertical Rhythm.

В файле

1
style.scss
подключаем сброс стилей Compass и модуль вертикального ритма:

@import "compass/reset";
@import "compass/typography/vertical_rhythm";

Сделаем небольшую стилизацию для блока

1
.wrapper
, заголовков, параграфов и изображений, чтобы визуально было проще разобраться, что к чему:

.wrapper{
  max-width: 960px;
  margin: 0 auto;
  background-color: hsla(240,100%,50%,.2);
}

h1,h2,h3,h4,h5,h6{
  font-weight: 700;
  text-transform: capitalize;
  background-color: hsla(120,100%,50%,.2);
}

p{
  background-color: hsla(0,100%,50%,.1);
}

img{
  max-width: 100%;
  margin: auto;
  display: block;
}

Основные переменные в Vertical Rhythm

В модуле “Vertical Rhythm” библиотеки Compass имеется множество переменных, но среди них есть только две основные, которые необходимы для расчетов внутри этого модуля:

$base-font-size: 22px;    // базовый размер шрифта
$base-line-height: 33px;  // базовое межстрочное расстояние

Значение переменной

1
$base-line-height
(как правило) равно выражению
1
$base-font-size * 1.5
, поэтому
1
22px * 1.5 = 33px
. Значение переменной
1
$base-font-size
в
1
22px
взято в качестве примера.

Помимо этого, есть еще две дополнительные переменные:

$rhythm-unit: "rem";         // базовая единица измерения (по умолчанию em)
$rem-with-px-fallback: true; // откат к единицам измерения px в браузерах, которые не понимают единицу rem

Включаем Vertical Rhythm

После ввода четырех вышеперечисленных переменных осталось только инициализировать модуль Vertical Rhythm” с помощью миксина:

@include establish-baseline;

Миксин

1
establish-baseline
делает простые вещи - он устанавливает
1
font-size
и
1
line-height
для корневого тега
1
<html>
. Но делает он это с помощью относительных единиц измерения.

Допустим, в своем проекте мы установили размер шрифта

1
22px
и высоту строки
1
33px
. Если взглянуть на результат компиляции из SCSS в CSS, то увидим следующее:

html {
  font-size: 137.5%;
  line-height: 1.5em;
}

Размер шрифта

1
16px
является установленным по умолчанию в большинстве браузеров, поэтому
1
16px = 100%
. Следовательно,
1
22px = 137.5%
.

Относительная величина

1
line-height
всегда относительна к размеру шрифта
1
font-size
текущего элемента, поэтому в данном случае она равна 1.5em (
1
22px * 1.5 = 33px
).

Перезагрузим браузер с открытой страницей создаваемого проекта-примера и увидим, как резко изменилась картина! Вместо слепленных друг с другом строчек появилась более четкая и удобочитаемая структура. Видно, что каждая строка текста располагается внутри своей линии.

Чтобы еще более наглядно представить картину структурированного контента, воспользуемся миксином:

body{
  @include debug-vertical-alignment;
}

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

Margin и padding в Vertical Rhythm

Но строки, заголовки и изображения все равно тесно прижаты друг к другу. В модуле Vertical Rhythm имеются свои собственные инструменты для создания отступов у элементов контента, в основе которых лежит опять таки базовый размер шрифта (вот он - тот самый ритм!):

$base-font-size * 1

Для элемента страницы можно задать

1
margin-top
или
1
padding-top
,
1
margin-bottom
или
1
padding-bottom
. Реализуется это с помощью специальных миксинов (на выбор, один из четырех):

p{
  background-color: hsla(0,100%,50%,.1);

  @include margin-trailer;  // margin-bottom
  @include margin-leader;   // margin-top

  @include padding-trailer; // padding-bottom
  @include padding-leader;  // padding-top
}

Имеются универсальные миксины, которые являются сокращениями от вышеперечисленных. Таким миксинам передаются необходимые аргументы и на выходе получаем результат:

p{
  background-color: hsla(0,100%,50%,.1);

  @include trailer($lines: 2, $property: margin); // margin-bottom на 2 строки
  @include trailer($lines: 2, $property: padding); // padding-bottom на 2 строки

  @include leader($lines: 2, $property: margin); // margin-top на 2 строки
  @include leader($lines:3, $property: padding); // padding-top на 3 строки
}

Одновременно задать

1
margin-top + margin-bottom
или
1
padding-top + padding-bottom
можно с помощью миксинов:

p{
  background-color: hsla(0,100%,50%,.1);

  @include rhythm-margins; // margin-top + margin-bottom
  @include rhythm-padding; // padding-top + padding-bottom
}

Миксин

1
@include rhythm
является глобальным сокращением вышеназванных миксинов для создания отступов
1
margin
или
1
padding
.

Создание границ в Vertical Rhythm

Отступы можно совмещать с границами

1
border
. То есть, можно (к примеру) создать верхний
1
padding
с верхней границей
1
border
.

Толщина границы и ее стиль управляются через переменные

1
$default-rhythm-border-width
и
1
$default-rhythm-border-style
. По умолчанию толщина границы равна
1
1px
, а ее стиль -
1
solid
.

p{
  background-color: hsla(0,100%,50%,.1);

  @include leading-border; // padding-top + border-top
  @include trailing-border; // padding-bottom + border-bottom
  @include horizontal-borders; // padding-top + border-top и padding-bottom + border-bottom
  @include h-borders; // alias для horizontal-borders
}

Одновременно задать

1
padding
и
1
border
для всех четырех сторон можно через миксин:

p{
  background-color: hsla(0,100%,50%,.1);
  @include rhythm-borders; // padding + border
}

Указать границу и отступ для какой-то одной стороны можно с помощью миксина:

p{
  background-color: hsla(0,100%,50%,.1);
  @include apply-side-rhythm-border($side: left);
}

Произвольный размер шрифта в Vertical Rhythm

Можно произвольно поменять размер шрифта любого элемента страницы, но делать это также нужно, исходя из ритма - с помощью соответствующего миксина

1
adjust-fonts-size-to
.

Давайте изменим размер заголовков таким образом, чтобы они отличались от основного текста (и были действительно заголовками):

h1{
  @include adjust-font-size-to(2.074rem);
}

h2{
  @include adjust-font-size-to(1.728rem);
}

h3{
  @include adjust-font-size-to(1.44rem);
}

h4{
  @include adjust-font-size-to(1.2rem);
}

h5{
  @include adjust-font-size-to(1rem);
}

h6{
  @include adjust-font-size-to(0.833rem);
}

Или же, допустим, нужно установить для заголовка первого уровня

1
h1
размер шрифта в
1
42px
. Микcин будет выглядеть таким образом:

h1{
  @include adjust-font-size-to(42px);
}

Первым делом, этот миксин делает размер шрифта элемента

1
h1
относительным к размеру шрифта элемента-контейнера. В нашем случае таковым является элемент
1
html
, поэтому размер шрифта равен
1
22px
. Соответственно, размер шрифта для
1
h1
получается (
1
42 / 22 = 1.90909
):

font-size: 1.90909rem;

Вторым делом миксин заново вычисляет высоту строки для нашего заголовка

1
h1
. Делает он это таким образом:

1.90909rem * 1.5 = 3rem (округленно)
22 * 3rem = 66px

Конечный результат показан ниже:

h1 {
  font-size: 42px;
  font-size: 1.90909rem;
  line-height: 66px;
  line-height: 3rem;
}

Отлично, правда? Вся прелесть в том, что показанные выше расчеты можно с легкостью забыть - модуль “Vertical Rhythm” каждый раз будет вычислять размер шрифта и высоту строки сам, не “напрягая” нас.

Помимо указания размера шрифта в качестве аргумента, миксину

1
adjust-fonts-size-to
можно также передать количество линий, которое должен занимать заголовок. Например, так:

h3{
  @include adjust-font-size-to(1.44rem,1);
}

Если вы попробуете у себя, то сразу увидите результат.

Выравнивание изображений в Vertical Rhythm

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

Смещение в вертикальном ритме

А именно - первое изображение своим верхним краем совпадает с линией ритма. А вот нижняя граница не попадает на линию. Из-за этого весь дальнейший контент также смещается и вертикальный ритм нарушается.

Происходит это потому, что изображение мы сделали блочным элементом и присвоили ему фиксированные размеры в пикселях в HTML-коде:

<img src="http://placehold.it/700x350" />
...
<img src="http://placehold.it/500x250" />
...

Исправить ситуацию можно с помощью плагина “Keep The Rhythm” под jQuery - Keep The Rhythm. Вдаваться в подробности работы этого плагина я не буду, а сразу покажу, как он подключается и результат его работы.

Получаем с GitHub библиотеку jQuery и сам плагин к ней:

jquery-1.9.1.min.js
jquery.keeptherhythm.js

Подключаем к HTML-странице в ее конце. И затем создаем небольшой скрипт. Смотрим результат:

Плагин Keep_The_Rhythm в действии

Все получилось! Однако, стоит заметить, что приведенный выше пример является упрощенным. Достаточно изменить масштаб страницы в окне браузера, и вертикальный ритм поломается.

Поэтому плагин “Keep The Rhythm” необходимо применять в связке с медиа-запросами для правильной его работы. По крайней мере, если возникнет вопрос по работе этого плагина, то документация на официальной странице всегда под рукой.

Заключение

Основой для написания этой статьи послужили два материала (видео и статья):


В первую очередь, что за загадочное слово -

1
permalink
? Все просто - это сокращение от permanent link - постоянная ссылка.

Постоянные ссылки нужны в системе WordPress для того, чтобы указывать на одну и ту же запись в перемещающейся ленте записей. При первоначальной настройке WordPress одной из задач является вопрос с постоянными ссылками. По умолчанию в WordPress permalink имеют ужасающий вид:

http://localhost/word1/?p=123

Ужасающий в том смысле, что такая ссылка для человека совершенно не читаемая. Сможете ли вы сказать, что находится по адресу, указанному в этой ссылке? Конечно нет!

Это для системы CMS WordPress понятно, что в этой ссылке указан адрес на пост с

1
id=123
(порядковый номер записи 123). И если система покопается в своей базе данных, то она (может быть) найдет запись с таким идентификатором и выдаст ее “на гора”. А для человека такая запись ни о чем не говорит.

Поэтому в настройках WordPress имеется специальный раздел, в котором можно настроить вид постоянных ссылок на понятный человеку (ЧПУ - Человеко-Понятный Урл). Размещен этот раздел по адресу “Настройки” - “Постоянные ссылки”.

Система WordPress предлагает на выбор пять вариантов постоянных ссылок (permalink) - один по умолчанию и четыре готовых (на выбор):

  • День и название поста - http://localhost:7788/third/2014/04/20/sample-post/
  • Месяц и название поста - http://localhost:7788/third/2014/04/sample-post/
  • Цифры - http://localhost:7788/third/archives/123
  • Название записи - http://localhost:7788/third/sample-post/

По большому счету, с каждым из этих четырех видов permalink все понятно. Я имею ввиду, в каком виде она предоставляет ссылку.

Но, помимо этих четырех permalink, имеется еще один вариант:

  • Произвольно - http://localhost:7788/third

В этом случае администратору сайта предоставляется возможность настроить вид permalink произвольно, руководствуясь специальными переменными. Ниже приведен список таких переменных, с указанием примера в скобках:

  • %year% - год публикации записи (2014)
  • %monthnum% - порядковый номер месяца публикации записи (05)
  • %day% - порядковый день месяца публикации записи (21)
  • %hour% - час публикации записи (09)
  • %minute% - минута публикации записи (12)
  • %second% - секунда публикации записи (13)
  • %post_id% - идентификатор записи (123)
  • %postname% - имя записи (about-the-permalink)
  • %category% - категория записи (wordpress)
  • %author% - автор записи (zencoder)
  • %tag% - метка записи (css)

Благодаря этим переменным можно создать permalink практически любого вида и под любые потребности.

К примеру, для блога с регулярными записями без тематики подойдет permalink следующей конструкции:

/%year%/%monthnum%/%day%/%postname%/

// Пример:
http://localhost:7788/third/%year%/%monthnum%/%day%/%postname%/

Для блога с нерегулярными записями и записи без тематики подойдет permalink вида:

/url/%postname%/

// Пример:
http://localhost:7788/third/url/%postname%/

Для блога с регулярными тематическими записями подойдет краткий permalink:

/%category%/%postname%/

// Пример:
http://localhost:7788/third/%category%/%postname%/

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

Еще одним важным моментом при самостоятельной настройке permalink является то, что любая из них должна заканчиваться переменной %postname% или %post_id%. В этом случае каждая из существующих в системе WordPress permalink будет указывать на конкретную запись. Если вы посмотрите на примеры выше, то заметите, что ссылки построены именно по такому принципу.

Данный материал является отрывком из книги Криса Койера “Digging Into WordPress”, пересказанным автором сайта своими словами.

На этом все.


Вот плавно и постепенно, стараясь без рывков и пробелов в познаниях front-end, я подошел к теме модульных сеток на CSS. Очередные мысли по поводу верстки для начинающего верстальщика.

Зачем я подошел к этой теме? Для чего нужны модульные сетки для верстальщика? Ответ прост - сегодня по крайней мере половина всех дизайнов верстается по такой сетке. Зачем это делается? Для быстроты процесса верстки и стандартизации этого же самого процесса. Сама идея модульной сетки далеко и далеко не новая - в типографии она была разработана еще в прошлом веке (если я не ошибаюсь). Благодаря такой сетке упорядочивается расположение всех элементов текста (изображений) на странице журнала, газеты и т. д.

Чтобы воочию представить себе модульную сетку в типографии, возьмите любой журнал или статью и внимательно посмотрите на любую его(ее) страницу. Вы сразу обратите внимание, что колонки текста, заголовки, фотографии на странице располагаются не хаотично, а в некотором порядке. Если попытаться начертить границы между блоками контента, то можно увидеть определенную блочную структуру:

Выдуманный пример разметки журнальной страницы

Рисунок выше - самый что ни на есть истинный пример модульной сетки. Блоки на этом рисунке могут быть блоками текста или изображениями. И такое расположение блоков информации на странице вполне может иметь место быть в реальной жизни.

Кстати, а почему модульные? Откуда такое название? Все просто - под модулем в таких сетках подразумевается “кирпичик”, основа сетки. Минимальная единица “измерения”, которая является основой этой сетки.

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

Сетка в электронной таблице MS Excel тоже является модульной структурой, в основе которой лежит ячейка этой сетки. Таблица в Excel может увеличиваться или уменьшаться с шагом, равным размеру ячейки этой таблицы.

Как очень хорошо известно, CSS - это типография, перешедшая в Интернет. Многие термины и понятия также перекочевали из типографии в технологию CSS: размер шрифта, межстрочное расстояние и т. д. Не стала исключением модульная сетка.

В один прекрасный момент веб-дизайнеры поняли, что не стоит изобретать велосипед. Что создание макета веб-страницы в коде HTML&CSS гораздо удобнее, проще и быстрее выполнять по модульной сетке, нежели “тасовать” блоки произвольно. Кроме того, сам дизайн страницы получается более стандартизированным, унифицированным; подчиненным одним и тем же, единым правилам.

С помощью кода на CSS была сделана попытка воспроизвести модульную сетку в Веб и применить ее на практике. Первой такой (насколько я знаю) попыткой была система 960 Grid System:

Модульная сетка на CSS

При первом взгляде на рисунок (не знаю, как у вас), у меня сразу возник вопрос - “а где же здесь сетка?” Сетка, сетка - это и есть сетка, спроектированная под особенности Веб! Ведь вы хорошо знаете, что в макете веб-страницы имеет значение только ширина блоков контента; высота же блоков является величиной переменной, она меняется в зависимости от количества контента, наполняющего эти блоки; она почти никогда не задается жестко, фиксировано. Поэтому в данном случае строки сетки совсем ни к чему - остаются только колонки.

Как уже упоминалось выше, модульная сетка пришла в CSS из типографии; понятия, связанные с модульной сеткой, также пришли из типографии.

В модульной сетке имеются всего три параметра:

  • container (контейнер)
  • column (колонка)
  • gutter (канавка)

Структура модульной сетки на CSS

Видим, что основной блок-обертка (container) содержит в себе 12 колонок (column). Содержимое (</em>контент</em>) располагается в этих колонках. Колонок может быть не обязательно 12; другими популярными величинами являются 16 колонок и 24 колонки:

Модульная CSS-сетка из 16 колонок

Модульная CSS-сетка из 24 колонок

Откуда такие величины - 12, 16 и 24 колонки? Во-первых, они взяты из математических расчетов, на которых основана модульная сетка. А во-вторых, такие значения наиболее применимы на практике.

Колонки разделяются между собой промежутками (

1
gutter
). Как правило, самые крайние отступы от колонок равны половине gutter - gutter/2.

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

Пример блочной верстки на основе CSS-сетки

Вот и получается примерный вид блочной верстки страницы на основе модульной CSS-сетки.

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

Получение модульной сетки 960gs

Первым шагом необходимо получить копию заготовки (шаблон) данной модульной CSS-сетки. Для этого заходим на сайт проекта 960gs и скачиваем оттуда заготовку, нажав большую кнопку посередине с надписью - ‘Big ol’DOWNLOAD button :)’. Получаем на свой компьютер архив с именем

1
960-Grid-System-master.zip
.

Кстати, а почему такое название у этой модульной сетки - 960 Grid System? Все просто, здесь цифра 960 - это ширина блока-обертки container в 960px, наиболее приемлемая ширина страницы сайта для мониторов с разрешением 1024x768px. На время создания этой модульной CSS-сетки большинство сайтов делалось фиксированной ширины для наиболее популярного разрешения мониторов - 1024x768px.

Разархивируем этот пакет и взглянем на его содержимое:

  • app_plugins
  • code
  • licenses
  • logo_files
  • sketch_sheets
  • templates
  • .gitignore
  • README.txt

В папке app_plugins находятся плагины под два графических редактора - Fireworks и Photoshop. Цель плагинов - будучи установленными в эти программы, помогать создавать макеты сайтов на основе модульной сетки 960gs. Это помощь для дизайнеров, которые рисуют макеты будущих сайтов.

В папке licenses располагаются тексты лицензий, под которыми распространяется данная модульная сетка.

В директории logo_files находятся логотип 960 Grid System в разных форматах -

1
.ai
,
1
.eps
,
1
.png
и
1
.psd
. Как пишется сам автор 960gs - Nathan Smith, этот логотип был создан и предоставлен в бесплатное пользование всем желающим по многочисленным просьбам “трудящихся”.

Есть также заготовки модульной сетки в виде линованной бумаги с колонкой для комментариев. Эти заготовки помещены в папку sketch_sheets в формате

1
.pdf
и готовы для того, чтобы их распечатать и пользоваться. Видимо, это тоже было сделано по просьбам “трудящихся”, которые любят создавать наброски макета на бумаге с помощью ручки или карандаша.

А вот для настоящих IT-ов имеется директория templates, в которой расфасованы точно такие же макеты, но в электронном виде, под самые разные wireframe-программы. Количество впечатляет - тут и Balsamiq, и Photoshop, Firework и Illustrator; под Gimp на Linux и под Omnigraffle на Mac OS X; пользуйся не хочу, что называется.

Но мы вернемся к самой главной папке, которую мы пропустили - code. Там находится то, ради чего мы и затеялись с этой модульной сеткой 960gs - готовые файлы с кодом этой самой сетки. Файлы формата HTML (

1
demo.html
,
1
demo_24_col.html
,
1
demo_24_col_rtl.html
,
1
demo_rtl.html
) можно посмотреть, но интереса они представляют мало - как понятно из их названия, это всего лишь демо-файлы. В папке img находятся три файла формата
1
.gif
:
1
12_col.gif
,
1
16_col.gif
,
1
24_col.gif
. Задача этих файлов - “подкладывать” их в виде фона для блока
1
.container_12
(или
1
.container_16
или
1
.container_24
) для того, чтобы удобно было визуально видеть эту самую сетку при верстке.

Папка CSS имеет список файлов формата CSS:

  • 960.css
  • 96012col.css
  • 96012col_rtl.css
  • 96016col.css
  • 96016col_rtl.css
  • 96024col.css
  • 96024col_rtl.css
  • 960_rtl.css
  • demo.css
  • reset.css
  • reset_rtl.css
  • text.css
  • text_rtl.css

… и подпапку min, в которой содержится точно такой же список файлов. Разница между первым и вторым списком в том, что первый список - это developer-версия, а второй - production-версия.

Внимательный читатель спросит - а что это за суффикс странный у некоторых файлов CSS -

1
rtl
. Ну, даже новичкам (которые в теме) должно быть понятно, что это
1
right-to-left
, стили для создания дизайна, в котором текст пишется и располагается справа налево. Таки если вы не собираетесь иммигрировать на историческую родину, то эти стили вам никогда не пригодятся, по большому счету!

Эти файлы формата CSS является тем самым, ради чего мы заходили на оф. сайт - это и сеть модульная сетка 960gs! Можно открыть их в HTML-редакторе и просмотреть исходный код - он очень короткий и простой.

Построение верстки на основе модульной сетки 960gs производится с помощью классов, расположенных в главном файле

1
960_12_col.css
(или
1
960_16_col.css
, или
1
960_24_col.css
). Классов в модульной сетке 960gs не так уж много - точнее, их совсем мало:

  • .container12 (.container16, .container_24)
  • .grid_х
  • .push_х
  • .pull_х
  • .alpha
  • .omega
  • .prefix_х
  • .suffix_х
  • .clear

Эти классы - своего рода рычаги, с помощью которых можно управлять созданием верстки:

  • Класс
    1
    
    .container_12
    создает блок-обертку шириной 960px, расположенную по центру окна браузера, состоящую из 12 колонок. Аналогично классы
    1
    
    .container_16
    и
    1
    
    .container_24
    также создают обертку шириной 960px, но состоящую из 16 и 24 колонок, соответственно.
  • Класс
    1
    
    .grid_х
    - это общее представление (можно сказать - формула) для создания ячеек модульной сетки. В качестве
    1
    
    х
    может быть значение от 1 до 12 (в 12-колоночной сетке), от 1 до 16 (в 16-колоночной сетке), от 1 до 24 (в 24-колоночной сетке). Задав значение вместо
    1
    
    х
    , создается ячейка шириной
    1
    
    х
    колонок. То есть,
    1
    
    .grid_2
    создает ячейку шириной 2 колонки;
    1
    
    .grid_10
    - создает ячейку шириной в 10 колонок. Естественно, значение
    1
    
    х
    не может превышать общее число колонок в контейнере. То есть, в контейнере с классом
    1
    
    .container_12
    может быть класс
    1
    
    .grid_12
    , но не больше. В контейнере с классом
    1
    
    .container_16
    может быть класс
    1
    
    .grid_16
    , но не больше. Аналогично с контейнером класса
    1
    
    .container_24
    .
  • Класс
    1
    
    .push_х
    “сдвигает” ячейку вправо на указанное количество колонок. То есть, класс
    1
    
    .push_4
    “отодвигает” ячейку вправо на 4 колонки.
  • Класс
    1
    
    .pull_х
    “сдвигает” ячейку влево на указанное количество колонок. Например,
    1
    
    .pull_3
    сдвинет ячейку влево на три колонки.
  • Классы
    1
    
    .alpha
    и
    1
    
    .omega
    просты - они убирают отступы у ячейки слева и справа, соответственно.
  • Классы
    1
    
    .prefix_х
    и
    1
    
    .suffix_х
    добавляют пустое пространство (расширяют) ячейку слева и справа, соответственно.
  • Класс
    1
    
    .clear
    служит для “очистки” содержимого после плавающего блока.

Давайте от теории перейдем к практике и создадим каркас обычного трех-колоночного макета, в котором “шапка” и “подвал” будут занимать всю ширину страницы:

Пример простого трех-колоночного макета

Из скачанного архива

1
960-Grid-System-master.zip
нам потребуются файлы:

  • text.css (в нем находятся все правила по типографике)
  • reset.css (файл сброса стилей для браузеров)
  • 960_24_col.css (модульная CSS-сетка на 24 колонок)
  • 24_col.gif (фоновая картинка, рисующая 24 колонок в основном блоке
    1
    
    .container_24
    )

Выбираем их оттуда и раскладываем по папкам нашего собственного проекта:

  • css:
    • text.css
    • reset.css
    • 96024col.css
  • img:
    • 24_col.gif

В шапке

1
header
файла
1
index.html
производим последовательное подключение полученных файлов. Только один из них -
1
style.css
- мы создадим самостоятельно, для написания своих собственных CSS-стилей. Все остальные файлы оставим без изменения - так и нужно поступать с файлами данного фреймворка (и не только этого):

<link rel="stylesheet" type="text/css" href="css/reset.css" />
<link rel="stylesheet" type="text/css" href="css/text.css" />
<link rel="stylesheet" type="text/css" href="css/960_24_col.css" />
<link rel="stylesheet" type="text/css" href="css/style.css" />

Затем создадим HTML-структуру страницы, применив знания классов, которые были рассмотрены выше. Шапке сайта задаем класс

1
.grid_24
, чтобы она заняла всю ширину 24-колоночного блока. Затем создаем левый блок шириной в 8 колонок с помощью класса
1
.grid_8
, центральный блок шириной в 13 колонок с помощью класса
1
.grid_13
, правый блок шириной в 3 колонки через класс
1
.grid_3
. И внизу помещаем “подвал” сайта опять на всю ширину страницы с помощью класса
1
.grid_24
:

<div class="container_24">
  <!-- header -->
    <header class="grid_24"></header>
  <!-- content -->
    <aside class="grid_8 leftSideBar"></aside>
    <main class="grid_13"></main>
    <aside class="grid_3 rightSideBar"></aside>
  <!-- footer -->
    <footer class="grid_24"></footer>
</div>
<!-- end container -->

Все, совсем несложными движениями мы создали структуру страницы сайта. Осталось применить некоторое оформление к блокам, чтобы визуально их отличать:

.container_24{
  background: url(../img/24_col.gif) top left repeat;
  margin-top: 10px;
}

header{
  background-color: hsla(120,100%,50%,.4);
  min-height: 100px;
  margin-bottom: 10px;
}

.leftSideBar, .rightSideBar, main{
  min-height: 300px;
  margin-bottom: 10px;
}

.leftSideBar{
  background-color: hsla(240,100%,50%,.5);
}

main{
  background-color: hsla(180,100%,50%,.4);
}

.rightSideBar{
  background-color: hsla(300,100%,50%,.3);
}

footer{
  background-color: hsla(60,100%,50%,.7);
  min-height: 50px;
}

На официальном сайте проекта 960gs имеется ссылка на слайд-шоу, в котором есть несколько интересных примеров создания разметки с помощью 960gs. Давайте разберем их - кусочки кода, которые можно применить на практике (кстати, именно такое предназначение имеют сниппеты).

Простой пример колонок

Очень простой пример создания двух рядов с тремя и двумя ячейками на всю ширину страницы:

Два ряда с колонками на всю ширину страницы

Для этого создаем такую разметку:

<div class="container_12">
  <!-- header -->
  <div class="grid_4">
    <p>
      1/3 ширины блока .container
    </p>
  </div>
  <div class="grid_4">
    <p>
      1/3 ширины блока .container
    </p>
  </div>
  <div class="grid_4">
    <p>
      1/3 ширины блока .container
    </p>
  </div>
  <div class="clear">
  </div>
  <!-- гадость! -->
  <!-- footer -->
  <div class="grid_6">
    <p>
      1/2 ширины блока .container
    </p>
  </div>
  <div class="grid_6">
    <p>
      1/2 ширины блока .container
    </p>
  </div>
</div>
<!-- end container -->

… и CSS-код:

.container_12{
  background: url(../img/12_col.gif) top left repeat;
  margin-top: 10px;
}

div[class^="grid"]{
  min-height: 100px;
  text-align: center;
  line-height: 100px;
}

div[class="grid_4"]{
  background-color: hsla(120,100%,50%,.4);
}

div[class="grid_6"]{
  background-color: hsla(240,100%,50%,.4);
}

Ячейки, обернутые другой ячейкой

Простой пример обертывания ячеек с сетке еще одной - общей ячейкой, которая может служить для придания общего фона для всех элементов внутри блока. Стоит обратить внимание на применение двух классов

1
alpha
и
1
omega
для первого и последнего блоков. С помощью этих классов убираются отступы слева и справа от этих крайних блоков. Если не добавить эти классы, то верстка поломается:

Обертывание ячеек в 960gs

HTML-код:

<div class="container_12">
  <!-- content -->
  <div role="wrap" class="grid_12">
    <div class="grid_3 alpha">
      <p>
        Part_1
      </p>
    </div>
    <div class="grid_3">
      <p>
        Part_2
      </p>
    </div>
    <div class="grid_3">
      <p>
        Part_3
      </p>
    </div>
    <div class="grid_3 omega">
      <p>
        Part_4
      </p>
    </div>
  </div>
</div>
<!-- end container -->

… и CSS-код:

.container_12{
  background: url(../img/12_col.gif) top left repeat;
}

div[role="wrap"]{
  background-color: hsla(120,100%,50%,.3);
  padding: 10px 0;
  margin-top: 10px;
}

div[class^="grid_3"]{
  background-color: hsla(240,100%,50%,.4);
}

Смещение ячеек в 960gs

Перемещение ячеек в сетке 960gs

Интересный пример перемещения ячеек в модульной сетке 960gs. Если внимательно посмотреть на пример, то станет заметно, что фиолетовый блок с надписью Last (последний) стоит на первом месте в ряду. Достигнуто это благодаря двум классам

1
.push
и
1
.pull
. Если не вдаваться в код, стоящий за этими двумя классами, то их назначение запомнить легко:
1
push
- толкать (толкаем, двигаем ячейки слева направо),
1
pull
- тянуть (тянем, двигаем ячейки справа налево). В этом примере было произведено взаимное замещение двух ячеек - они поменялись местами.

HTML-код:

<div class="container_12">
  <!-- header -->
  <div role="first" class="grid_6 push_6">
    <div class="grid_2 alpha">
      <p>
        Grid_1
      </p>
    </div>
    <div class="grid_2">
      <p>
        Grid_2
      </p>
    </div>
    <div class="grid_2 omega">
      <p>
        Grid_3
      </p>
    </div>
  </div>
  <!-- content -->
  <div role="last" class="grid_6 pull_6">
    Last
  </div>
</div>
<!-- end container -->

… CSS-код:

.container_12{
  background: url(../img/12_col.gif) top left repeat;
  margin-top: 10px;
}

div[class^="grid"]{
  min-height: 100px;
}

div[role="first"]{
  background-color: hsla(120,100%,50%,.3);
}

div[role="last"]{
  background-color: hsla(240,100%,50%,.3);
}

div[class^="grid_2"]{
  background-color: hsla(180,100%,50%,.2);
}

Создание рамки вокруг ячейки в 960gs

Также интересный пример создания рамки вокруг ячейки с изображением. Такая рамка с помощью обычного CSS-кода создается очень легко и просто; а вот в системе 960gs это достаточно непростая задача. Для этого придется в одну ячейку вложить блок, для которого установить границу, которая будет служить рамкой для картинки:

Ячейка с рамкой в 960gs

HTML-код:

<div class="container_12">
  <!-- content -->
  <div role="top" class="grid_7">
    <div role="border">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vitae, voluptatum, minus dolor eaque officiis quis placeat commodi unde minima recusandae amet velit dolorem perferendis quibusdam dolorum! Saepe iste nisi nobis!
      </p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto, iusto, id veniam non quas nesciunt laborum error debitis ipsam delectus sequi incidunt sunt et iste nulla deserunt vitae aut beatae.
      </p>
      <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae, ab, totam, labore, odio accusamus excepturi repellendus porro deserunt ut nisi molestiae molestias quibusdam accusantium saepe doloribus perspiciatis aliquid voluptatum sit?
      </p>
    </div>
  </div>
  <div role="top" class="grid_5">
    <div role="border" class="banner">
    </div>
  </div>
</div>
<!-- end container -->

… CSS-код:

.container_12{
  margin-top: 10px;
}

div[role="top"]{
  background-color: hsla(120,100%,50%,.3);
}

div[role="border"]{
  border: 10px solid #e5e5e6;
  height: 280px;
}

  div[role="border"] p{
    margin: 10px;
    padding: 5px;
    background-color: hsla(0,0%,0%,.3);
    border-radius: 5px;
  }

  div[role="border" ][class="banner"]{
    background: url(../img/weiss.jpg) top left no-repeat;
  }

Ячейка с обтеканием в 960gs

И напоследок еще один пример, на этот раз с примером отмены обтекания. Обратите внимание на два последних ряда. В предпоследнем намеренно сделано три ячейки, чтобы ширина страницы не была заполнена до конца. После этого ряда добавлен блок с классом

1
clear
, чтобы предотвратить смещение ячеек следующего ряда в это пустое пространство. Это одно из предназначений класса
1
clear
в системе 960gs.

Отмена обтекания ячейки в 960gs

HTML-код:

<div class="container_24">
  <!-- header -->
  <div class="grid_24 navbar">
    <div class="grid_12 push_2 alpha header"></div>
    <div class="grid_6 push_5 omega header"></div>
  </div>
  <!-- content -->
  <div class="grid_24 content">
    <aside class="grid_10 alpha leftColumn"></aside>
    <div class="grid_4 pull_9 label"></div>
    <div class="grid_11 push_3 rightColumn omega"></div>
  </div>
  <!-- subtopics -->
  <div class="grid_6 topic"></div>
  <div class="grid_6 topic"></div>
  <div class="grid_6 topic"></div>
  <div class="clear"></div>
  <!-- вот он зачем здесь, этот странный блок! -->
  <!-- subtopics -->
  <div class="grid_6 subtopic"></div>
  <div class="grid_6 subtopic"></div>
  <div class="grid_6 subtopic"></div>
  <div class="grid_6 subtopic"></div>
</div>
<!-- end container -->

… CSS-код:

.container_24{
  background: url(../img/24_col.gif) top left repeat;
}

.navbar{
  margin-top: 5px;
  margin-bottom: 10px;
  padding: 10px 0;
  background-color: hsla(240,100%,50%,.2);
}

.header{
  min-height: 50px;
  background-color: hsla(120,100%,50%,.7);
}

.content{
  background-color: hsla(60,100%,50%,.2);
  padding: 15px 0;
  margin-bottom: 10px;
}

.leftColumn{
  background-color: hsla(300,100%,50%,.5);
  min-height: 100px;
}

.rightColumn{
  background-color: hsla(180,100%,50%,.3);
  min-height: 150px;
  margin-top: -60px;
}

.label{
  background-color: hsla(0,0%,0%,.5);
  min-height: 50px;
  margin-top: 10px;
}

.news{
  background-color: hsla(0,0%,0%,.3);
}

.topic{
  background-color: hsla(0,0%,0%,.5);
  min-height: 80px;
}

.subtopic{
  background-color: hsla(30,100%,50%,.4);
  min-height: 80px;
}

.border{
  padding: 0 10px;
}

Вот и все. Объемной получилась статейка!