В предыдущей части данного обзора - “SASS в картинках - Часть 1” мы посвятили все время установке, настройке и примерам мониторинга “сладкой” парочки Ruby/SASS.

Разобрались, как установить под Windows платформу Ruby и ее приложение SASS, в чем отличия между старой и новой версией синтаксиса SASS. Как запустить SASS для мониторинга редактируемых файлов или директорий.

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

Переменные (Variables)

SASS “вводит” в состав CSS переменные, которых изначально в нем нет. Тем самым, язык стилевых правил постепенно превращается в более-менее полноценный язык программирования. Как и в обычном языке программирования, сначала объявляется переменная (с помощью спецсимвола $), задается ее имя и присваивается значение.

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

Например, на рисунке ниже переменной $color присвоено значение цвета в HEX-формате. Далее в одном месте кода эта переменная применяется “как есть”, а в другом месте из значения переменной вычитается еще одно число в этом же формате. В результате цвет получается темнее на заданное количество - очень удобно и быстро!

Переменные в SASS

Вложенность (Nesting)

Тут все просто - как вы обычно пишите правила CSS?

Наверное, так:

h1 {
 font-size: 12px;
 color: #ccc;
}
h1 a {
 text-decoration: none;
 color: #ddd;
}

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

Теперь напишем этот же код на SASS (SCSS):

h1 {
 font-size: 12px;
 color: #ccc;
 a {
  text-decoration: none;
  color: #ddd;
 }
}

Вот в чем “фокус” - на SASS (SCSS) мы пишем код так, как видим. Смотрим HTML-код - ссылка вложена в тег h1. Поэтому, в SASS-коде так и “рисуем” - внутри селектора h1 помещаем селектор a, говоря тем самым SASS, что тег a вложен в тег h1. После конвертации в CSS-код у нас получиться точно такой код, как в первом примере (где представлен CSS-код):

Вложенность селекторов в SASS

В SASS вложенность (nesting) бывает двух типов: вложенность селекторов (рассмотренная выше) и вложенность свойств, которую мы рассмотрим сейчас.

Вложенность свойств - это почти тоже самое, что и первый случай. Разница лишь в том, что применяется она к CSS-свойствам, а не селекторам. Ее удобно использовать для сложносоставных свойств, таких как font.

Например, на CSS мы бы написали так:

h1{
 font-size: 30px;
 font-style: italic;
 font-weight: bold;
 font-family: Arial, sans-serif;
 color: #ccc;
 padding-left: 10px;
}

На SASS (SCSS) этот же код мы напишем так:

h1{
 font: {
  size: 30px;
  style: italic;
  weight: bold;
  family: Arial, sans-serif;
 }
 color: #ccc;
 padding-left: 10px;
}

Вложенность свойств на SASS

Наследование

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

Наследование в SASS (SCSS) выполняется с помощью директивы @extend.

h1{
 font: {
  size: 30px;
  style: italic;
  weight: bold;
  family: Arial, sans-serif;
 }
 color: #ccc;
 padding-left: 10px;
}
h2{
 @extend h1;
 color: #aaa;
}

Наследование в SASS

Parent

Не знаю, как переводиться данная фича в SASS, но в примере кода она очень понятна - может, и нет смысла искать ее перевод? Если кто изучал Javascript & jQuery, то знает о таком символе - &. Его можно перевести как “этот”.

Давайте посмотрим код, и все сразу станет ясно:

SASS Parent

Видим, что в коде для ссылки прописаны свойства. И в этом же правиле прописано правило для hover. Так вот, чтобы не писать конструкции типа a, a:hover - запишем a, &:hover. Если описать это простым языком, то “этому же элементу присвоить правило при псевдоклассе :hover.

Функции SASS

Когда мы рассматривали переменные, то упомянули об арифметических операциях над значением переменных. Иногда это удобно, а иногда нет. В SASS имеется достаточно большой набор функций, предназначенных для самых разнообразных задач. Ознакомиться с их полным перечнем можно по адресу sass-lang.com/docs/yardoc/Sass/Script/Functions.html:

Функции SASS

К примеру, у нас в коде имеется правило задания цвета для ссылки. А также есть правило, по которому ссылка изменяет цвет по наведению на нее курсора мыши.

На SASS (SCSS) такой код можно написать так:

a{
 color: #ddd;
}
a:hover{
 color: darken(#ddd, 30%);
}

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

Ну просто очень удобно и быстро!

Функция затемнения цвета в SASS

Подмешивания (Mixin)

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

Если сказать простым языком, то mixin - это большой кусок CSS-кода, который можно применять бесконечное число раз. Так же как и переменные, mixin сначала объявляется с помощью директивы @mixin и задается имя для него. Затем в теле подмешивания прописываются CSS-правила, при этом одновременно можно использовать переменные в этих правилах.

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

Достаточно прописать всего одну строчку - “вставить такой кусок кода здесь”:

Подмешивания в SASS

Интерполяция (Interpolation)

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

Например, таким образом:

Интерполяция в SASS

(На картинке закралась ошибка. Конечно же, переменной $top в названии свойства border не существует. На ее месте должна стоять переменная $vert).

Подмешивания (mixin) с аргументами

Ранее мы познакомились с функциями без аргументов (mixin). Но это был простой пример. На самом деле, функции (mixin) в SASS могут иметь аргументы, которые они принимают в качестве параметров.

Например, рассмотрим такой рисунок:

Функции с аргументами в SASS

Видим, что в начале кода объявлена функция (mixin) с именем corners. В качестве аргументов она принимает три переменные - $vert, $hor, $radius. Значения переменных $vert и $hor передаются в тело функции как интерполяция, а значение переменной $radius подставляется в качестве значения CSS-свойства border.

В результате можно очень легко и быстро изменять вид и значение CSS-свойства: border-top-left: 8px, border-bottom-left: 8px, border-top-right: 8px, border-top-right: 8px и так далее.

Далее в коде подключается (вызывается) функция corners с помощью директивы @include. При вызове этой функции ей передаются аргументы:

@include corners(top,left,15px);
@include corners(bottom,right,35px);

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

border-top-left: 15px;
border-bottom-right: 35px;

Фантастика! Ну что же, на этом можно закончить обзор того, что умеет SASS (SCSS). Я думаю, что вы по достоинству оценили все преимущества данного языка и сразу же кинулись применять его на практике.

Вроде ничего не забыл ))


Следующий виток саморазвития верстальщика - начинаем изучение препроцессора SASS.

Вы спросите - а зачем он нужен и что это за “зверь” такой? Ведь в багаже знаний верстальщика и так полно вещей, которые он должен знать. Это и HTML&CSS, и Javascript с jQuery, и основы PHP с системами управления контентом (CMS) WordPress, Joomla, Drupal. Помимо этого - знание основ Photoshop (не сможете нарезать psd-макет). И еще куча всего по мелочи. Так зачем усложнять себе жизнь еще чем-то?

И будете неправы. В данном случае - это не усложнение, а облегчение “тяжелой” жизни верстальщика. Достаточно потратить пару дней на изучение SASS, чтобы потом верстать страницы быстрее и семантически более правильно. Ну хорошо, скажете вы - уговорил. Так что же это за такая прекрасная вещь, SASS?

SASS - это надстройка над CSS, написанная на языке программирования Ruby (есть такой). Правильно такая надстройка называется препроцессором. SASS добавляет в CSS такие вещи, как переменные, функции и многое другое. Тем самым, описательный язык CSS превращается в более-менее полноценный язык программирования. Часто ли вы при написании CSS-кода повторяете один и тот же код?

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

Существует аналог SASS по имени LESS. Отличие в том, что LESS моложе, проще и не имеет такой мощной библиотеки-фреймворка Compass, какую имеет SASS.

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

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

Пример такого кода показан ниже:

table.hl
 margin: 2em 0
 td.ln
  text-align: right

Более новая версия - SCSS (SASS-подобный CSS) имеет синтаксис почти такой же, как и у CSS. Поэтому особо рассказывать тут нечего, лучше посмотреть на пример кода:

table.hl {
 margin: 2em 0;
 td.ln {
  text-align: right;
 }
}

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

Установка SASS разделена на два этапа. Первый - необходимо установить поддержку языка Ruby в операционной системе, так как SASS - это всего лишь одно из многих приложений, написанное на этом языке. Больше всего в этом плане повезло пользователям MacOS X - там поддержка Ruby предустановлена по-умолчанию. Для пользователей Linux OS нужно только немного напрячься - установить эту поддержку с помощью менеджера пакетов. Например, для систем Debian* эта команда будет выглядеть так:

apt-get install ruby

Пользователи же Windows как всегда “впереди планеты всей”. Придется находить и скачивать вручную пакет-инсталлятор Ruby. Для этого переходим по адресу rubyinstaller.org/downloads/, выбираем из списка самую свежую версию пакета (на момент написания это Ruby 2.0.0-p247) и скачиваем ее:

Пакет Ruby-инсталлятора для Windows

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

Установка Ruby под Windows

Необходимо поставить галочки так, как это показано на рисунке, иначе Ruby и его приложение SASS не запустятся в терминале. Стоит сразу оговориться, что ни сам Ruby, ни программа SASS не имеют графического интерфейса. Управление обоими программными продуктами осуществляется через командную строку.

Что касается трех галочек в окне инсталлятора, то тут все просто. Первая галочка устанавливает поддержку языка Tcl\Tk, вторая галочка добавляет путь к исполняемому файлу Ruby в окружение командной оболочки, третья галочка устанавливает привязку файлов с расширением .rb и .rdw к Ruby.

После того, как установлен Ruby, настало время SASS. Здесь ситуация проще, так как Ruby имеет свой собственный менеджер пакетов a-la системы Linux OS. Менеджер пакетов имеет название gem. Чтобы установить приложение SASS, достаточно иметь подключение к Интернет и запустить в терминале Windows следующую команду:

Установка SASS под Windows

Если все прошло успешно, то вывод в терминале должен быть таким:

Успешная установка SASS под Windows

Для самоуспокоения и ознакомления с командами приложения SASS можно набрать в терминале:

sass --help

Должен появиться список всех команд программы SASS. Это подтверждает факт, что установка прошла успешно. Теперь немного отвлечемся от темы и углубимся в сторону HTML. Как хорошо известно, подключение таблиц со стилями в HTML-странице производится по следующему типу:

Подключение стилевых таблиц в HTML

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

Приложение SASS умеет выполнять мониторинг редактируемого sass-файла в автоматическом режиме, для этого достаточно указать ей входной (input) и выходной (output) файлы. К примеру, такая команда может выглядеть следующим образом:

Запуск мониторинга sass-файла

Если sass-файлов несколько и расположены они в одной директории, то можно запустить мониторинг все этой директории следующим образом:

sass --watch input_directory:output_directory

Из рисунка видно, что программа в автоматическом режиме производит анализ всех изменений в sass-файле и записывает их в выходной css-файл. При этом фиксируются все изменения, в том числе и ошибки:

Фиксирование всех событий в sass-файле

При этом, если взглянуть на содержимое директории, к которой расположен проект, то увидим, что там, помимо sass-файла, располагается и css-файл (результат работы):

Содержимое директории с проектом

Кроме того, из подсказки командной строки видно, что процесс мониторинга можно прервать в любой момент, нажав сочетание клавиш Ctrl+C. Программа настроена с умом и случайно (по ошибке) остановить ее не получиться - она попросит подтверждения выбранного действия путем ввода буковки Y (Yes) и нажатия клавиши Enter.

Помимо конвертации sass-файлов с css-файлы, в SASS имеется встроенная возможность обратного процесса. Осуществляется она с помощью утилиты sass-convert. Синтаксис такой команды может быть таким:

sass-convert --from css --to sass -R .

Такая команда рекурсивно (ключ -R) сконвертирует все css-файлы в sass-файлы, расположенные в текущей (точка здесь не зря стоит!) директории.

В принципе, все что нужно сказать об установке Ruby/SASS, о том как прекрасен и хорошо SASS - уже сказано. В следующей статье будет рассмотрено на примерах, на что же действительно способен SASS.

На этом все.


Для веб-разработчика, и для верстальщика в частности, первые вещи, которые он обязан знать, это языки HTML, CSS, Javascript с библиотекой jQuery.

Желательно знание основ PHP, популярных CMS - WordPress, Joomla, Drupal. Обязательно знание основ работы в Photoshop, иначе просто не сможет верстальщик работать.

Но причем здесь командная строка Windows, скажете вы? Это системному администратору в его ремесле она необходима, чтобы создавать bat-файлы, через терминал управлять удаленными соединениями, создавать и настраивать локальные сети. Для чего же она нужна человеку, который работает с веб-приложениями?

Оказывается, нужна. Не вся ее мощь, не все ее DOS-команды - только самые распространенные и необходимые. А нужна при работе с препроцессорами CSS, такими как SASS или LESS.

Насчет LESS - это можно еще поспорить, а вот для SASS она понадобиться однозначно. Установка препроцессора SASS производиться через командную строку; процесс мониторинга также запускается через командную оболочку.

Так что давайте подтянем свои знания в этой области на тот уровень, который необходим. Ниже приведено краткое описание с примерами всех тех команд, которые могут потребоваться. Некоторые читатели могут сказать - а зачем плодить еще одну статью по командной строке Windows?

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

Горячие клавиши командной оболочки

  • Win+R - быстрый запуск командной оболочки;
  • Alt+Space - меню настройки командной строки;
  • F7 - показ списка введенных команд в оболочке;

cmd /f:on - включение перебора директорий по сочетанию Ctrl+D и перебора файлов по сочетанию Ctrl+F; (очень полезное свойство - благодаря ему не нужно вручную писать имя каталога, куда необходимо попасть, достаточно найти его методом перебора).

Создание папок

  • mkdir sass - создание новой папки sass в корне текущего диска;
  • md sass - аналогично предыдущей (укороченный вариант);
  • md sass\verstka - создание вложенных директорий;
  • md F:verstka\revoltz - создание директорий в указанном диске;

Просмотр содержимого каталогов

  • tree - показ дерева каталогов;
  • tree /f - показ дерева каталогов с их содержимым;
  • tree F:sass - показ “куска” дерева каталогов, начиная с указанного места;
  • dir - просмотр содержимого текущего диска (каталога) в виде списка;
  • dir F: - просмотр содержимого диска F:
  • dir /p F: - постраничный вывод содержимого диска F:
  • type test.txt - просмотр содержимого файла (расширение файла указывать обязательно);

Перемещение по каталогам и дискам

  • cd /d F: - переход в корень диска F: (для меня, как бывшего линуксоида, странное и неудобное нагромождение с ключом)
  • cd .. - перейти на уровень вверх;
  • cd Folder\Folder2\Folder3 - перейти в папку Folder3;

Удаление файлов и каталогов

  • del test.txt - удалить файл (расширение файла указывать обязательно);
  • rmdir folder3 - удалить папку (директорию);

Копирование и перемещение

  • copy text.txt Folder\Folder2\Folder3 - скопировать файл в директорию Folder3;
  • move text.txt Folder\Folder2\Folder3 - переместить файл в директорию Folder3;

Разное

  • cls - очистка экрана ввода;

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

Затем перейти в свойства - окно с четырьмя вкладками.

Первую - “Options” - можно пропустить, там ничего особо интересного нет.

Вторая вкладка - “Font” - для настройки шрифтов. Лучше всего поставить шрифт “Lucida Console” и кегль 12:

Шрифты терминала Windows

Третья вкладка - “Layout” - для настройки размеров окна. Наиболее удобные размеры приведены на рисунке:

Размеры окна терминала Windows

Четвертая вкладка - “Colors” - для настройки цветов фона, текста. Всплывающее окно (появляется по нажатию клавиши F7) также настраивается с помощью фонового цвета и цвета текста - но кто его использует? (можно оставить “как есть”):

Цвета терминала Windows

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

Вид терминала Windows

На этом все.


В этой статье будем создавать меню-аккордеон с помощью jQuery UI.

Что такое jQuery, знают все - это библиотека Javascript. То есть, это собрание готовых модулей для самых разнообразный действий на сайте, таких как применение анимации, динамического изменения свойств HTML-элементов и многое другое. С помощью jQuery подобные действия можно “прикрутить” к страничке легко и быстро.

jQuery UI - это библиотека для библиотеки jQuery. Другими словами, если jQuery - это надстройка над Javascript, то jQuery UI - это надстройка над jQuery. Пирамида получается в некотором смысле этого слова.

Предназначение jQuery UI - создание интерфейсов пользователя на HTML-странице. UI - это аббревиатура User Interface (Интерфейс Пользователя), а именно - это меню навигации, вкладки, полоса прогресса, календарь, автопроверка вводимых данных и другое.

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

Первое, что нужно сделать - это набросать каркас HTML-страницы, то есть doctype, кодировку, head, body:

<!doctype html>
  <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
    </body>
  </html>

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

Переходим на страницу загрузки и здесь выполним компиляцию ядра и только необходимых нам модулей (возможностей) jQuery UI. Что это значит? Полный комплект библиотеки jQuery UI содержит в себе возможность создания самых различный интерфейсов - вкладок, ползунков, календарей, полос прогресса, автозаполнения и так далее. Нам же необходима только одна из них - меню-аккордеон. Зачем скачивать и использовать библиотеку целиком, когда можно применять в работе только малую ее часть? Выигрыш в загрузке страницы в окне браузера очевиден.

Другая, менее очевидная причина такого выбора заключается в том, что во время работы движок jQuery UI создает свои собственные классы стилизации для меню, в частности. Эти классы напрямую соотносятся с файлом стилизации, таким как smoothness/jquery-ui.css. Когда мы будем создавать правила CSS для нашего аккордеона, мы будет прописывать свои собственные классы. В итоге те классы, которые “вмонтированы” в связку “jQuery UI + Theme” будут только ненужным балластом и мусором.

Итогом всех вышеперечисленных умозаключений является следующая последовательность шагов. Заходим, как было уже сказано, на страницу и видим там три больших раздела: “Version”, “Components”, “Theme”. В первом разделе “Version” выбирается версия библиотеки jQuery. На момент написания статьи это v.1.10.3. Это нас устраивает, поэтому оставляем все как есть.

Переходим во второй раздел “Components”. Здесь из длинного списка модулей выберем только то, что нам необходимо. Но сначала снимаем галочку со всех выбранных по умолчанию опций - “Toggle All”. Пролистываем список вниз и находим нужную нам строчку - “Accordion”, ставим против нее галочку. Обращаем внимание, что автоматически активировались еще две галочки в подразделе “UI Core” - “Core” и “Widget”. Это два основных компонента ядра “jQuery UI”, без которых не будет работать ни один модуль.

Опускаемся вниз страницы в раздел “Theme”. Здесь по умолчанию выбрана тема “UI lightness”, это набор CSS-стилей для оформления меню-аккордеон, созданный командой разработчиков jQuery UI. Список готовых тем не ограничивается только этим файлом, на самом деле таких тем около 24, из которых можно выбрать понравившуюся. Помимо этого, можно воспользоваться визуальным конструктором “ThemeRoller”, перейдя по ссылке “Design a custom theme”. Но нас оба эти выбора не интересуют, так как мы будем создавать свои собственные стили. Поэтому в выпадающем списке тем данного раздела выбираем “No Theme”.

Осталось нажать кнопку “Download”, чтобы скачать скомпилированную библиотеку, которая будет носить имя jquery-ui-1.10.3.custom.zip и весить 461 Kb. Сравните - полная версия jQuery UI весит 2.37 Mb, разница ощутимая! Теперь распаковываем архив и вытаскиваем из него необходимые нам файлы, которые распихиваем в соответствующие им папки: jquery-1.9.1.js и jquery-ui-1.10.3.custom.js в папку javascripts (я буду создавать меню с помощью SASS/Compass). В папке css скачанного архива есть подпапка no-theme с CSS-файлом jquery-ui-1.10.3.custom.css. Пролистав го, я сделал вывод, что данный файл служит для подключения иконок и другого вспомогательного оформления будущего меню. Рискну оставить его в архиве и не использовать.

Подключаю полученные файлы библиотеки jQuery UI в head HTML-документа. Напоминаю, что я буду создавать меню-аккордеон с помощью SASS/Compass, поэтому название папок и синтаксис кода будет отличаться от “общепринятого”.

<!doctype html>
  <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Accordion jQuery UI</title>
      <script type="text/javascript" src="javascripts/jquery-1.9.1.js"></script>
      <script type="text/javascript" src="javascripts/jquery-ui-1.10.3.custom.min.js"></script>
      <link rel="stylesheet" type="text/css" href="stylesheets/screen.css">
    </head>

Создаем HTML-разметку для будущего меню аккордеон. Для чистоты эксперимента просто скопируем ее с сайта проекта jQuery UI, со страницы примера Accordion. Как написано на этой странице, разметка выполнена в виде заголовков третьего уровня h3 и блоков div для того, чтобы контент был доступен на странице даже при отключенной поддержке Javascript в браузере пользователей.

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

<div id="accordion">
  <h3>Section 1</h3>
    <div>
      <p>
        Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
        ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
        amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
        odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
        </p>
    </div>
  <h3>Section 2</h3>
    <div>
      <p>
        Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
        purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
        velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
        suscipit faucibus urna.
      </p>
    </div>
  <h3>Section 3</h3>
    <div>
      <p>
        Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
        Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
        ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
        lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
      </p>
      <ul>
        <li>List item one</li>
        <li>List item two</li>
        <li>List item three</li>
      </ul>
    </div>
  <h3>Section 4</h3>
    <div>
      <p>
        Cras dictum. Pellentesque habitant morbi tristique senectus et netus
        et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
        faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
        mauris vel est.
      </p>
      <p>
        Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
        Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
        inceptos himenaeos.
      </p>
    </div>
</div>

Все готово для написания своих собственных стилей для нашего меню. Сброс стилей (reset) мне выполнять не нужно, так как Compass автоматически подключил его к моему проекту:

@import "compass/reset";

Устанавливаем самые общие правила для контейнера #accordion:

#accordion{
  width: 500px;
  margin: 10px auto;
  ...

Создаем правила для заголовков h3:

...
  h3 {
    font: 18px/30px Georgia, serif;
    background-color: #778899;
    text-indent: 10px;
    cursor: pointer;
    margin-bottom: 1px;
    &:hover{
    background-color: lighten(#778899, 10%);
  }
    &:focus {
    outline: none;
  }

… и для контента в меню:

...
  div{
  padding: 10px 20px;
  background-color: lighten(#778899, 20%);
  margin-bottom: 1px;
  font: 14px/20px PT Sans, sans-serif;
  text-indent: 1em;
}

Теперь прикрутим скрипт в head нашего HTML-документа, чтобы меню-аккордеон заработало:

<script type="text/javascript">
  $(function(){
    $(#accordion).accordion();
  });
</script>

Вуаля - все готово! Меню работает на скрытие и раскрытие. Можно немного приукрасить навигацию, сделав заголовки активными - при щелчке мыши на нем содержимое будет сворачивается. При повторном щелчке на этом же заголовке содержимое меню будет вновь разворачивается. Выполняется это передачей нашему скрипту параметра collapsible:

<script type="text/javascript">
  $(function(){
    $(#accordion).accordion({
      collapsible: true
    });
  });
</script>

Все хорошо, но есть один небольшой недочет - по умолчанию скрипт задает для блоков div высоту 120px. В третьем блоке у нас имеются два элемента - параграф p и список ul. При раскрытии этого пункта контент не вмещается по высоте и “налазит” на четвертый пункт. Аналогичная ситуация и с контентом четвертого пункта меню. Решение напрашивается само собой - нужно отрегулировать высоту для контента нашего меню.

Для этого нужно перейти по ссылке API documentation, где представлен список опций, методов и событий для меню аккордеон на jQuery UI. Нас интересует одна из опций - heightStyle, которая может принимать три значения:

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

Ниже представлены скриншоты меню аккордеон с вариантами значений fill и content для опции heightStyle:

Меню аккордеон с опцией heightStyle: fill

Меню аккордеон с опцией heightStyle: content

Есть еще несколько интересных опций для меню на jQuery UI.

Опция active - какой пункт меню будет открыт по умолчанию в браузере. Номер пункта устанавливается через целое число, отсчет ведется с нуля.

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

active: 2

… заставит браузер раскрыть третий по счету пункт меню.

Событие event назначит, при каком условии будет происходить переключение между пунктами меню. По умолчанию таковым является событие click, то есть щелчок мыши на пункте. Можно изменить событие на mouseover, что заставит скрипт открывать вкладку при наведении курсора мыши на пункт меню.

Можно сказать, что задача выполнена. Меню аккордеон на jQuery UI имеет еще достаточно опций и способов настройки, но здесь представлен самый простой и общий результат. Ниже приведен полный код созданного нами меню.

<!doctype html>
  <html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Accordion jQuery UI</title>
    <script type="text/javascript" src="javascripts/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="javascripts/jquery-ui-1.10.3.custom.min.js"></script>
    <link href=http://fonts.googleapis.com/css?family=PT+Sans rel=stylesheet type=text/css>
    <link rel="stylesheet" type="text/css" href="stylesheets/screen.css">
    <script type="text/javascript">
      $(function(){
        $(#accordion).accordion({
          collapsible: true,
          heightStyle: "content"
        });
      });
    </script>
  </head>
  <body>
    <div id="accordion">
      <h3>Section 1</h3>
        <div>
          <p>
            Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
            ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
            amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
            odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
          </p>
        </div>
      <h3>Section 2</h3>
        <div>
          <p>
            Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
            purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
            velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
            suscipit faucibus urna.
          </p>
        </div>
      <h3>Section 3</h3>
        <div>
          <p>
            Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
            Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
            ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
            lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
          </p>
          <ul>
            <li>List item one</li>
            <li>List item two</li>
            <li>List item three</li>
          </ul>
        </div>
      <h3>Section 4</h3>
        <div>
          <p>
            Cras dictum. Pellentesque habitant morbi tristique senectus et netus
            et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
            faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
            mauris vel est.
          </p>
          <p>
            Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
            Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
            inceptos himenaeos.
          </p>
        </div>
    </div>
  </body>
</html>
@import "compass/reset";

  #accordion{
  width: 500px;
  margin: 10px auto;
    h3{
      font: 18px/30px Georgia, serif;
      background-color: #778899;
      text-indent: 10px;
      cursor: pointer;
      margin-bottom: 1px;
    &:hover{
      background-color: lighten(#778899, 10%);
    }
    &:focus{
     outline: none;
    }
  }
    div{
      padding: 10px 20px;
      background-color: lighten(#778899, 20%);
      margin-bottom: 1px;
      font: 14px/20px PT Sans, sans-serif;
      text-indent: 1em;
    }
  }

На этом все.


При оборачивании изображения в блок div внизу картинки возникает странный отступ.

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

С тремя из них я был уже знаком благодаря замечательному ресурсу для верстальщиков - xiper.net. А вот на сайте htmlbook.ru Влада Мержевича в разделе “Практикум” узнал, что таких способ не три, а пять. С задачкой справился, а решения захотел поместить у себя.

Пять способов убрать отступ под картинкой

Создаем блок div с классом .image, для которого назначаем ширину, центрирование и границу для наглядности. Внутрь блока div.image помещаем картинку:

<div class="image">
  <img src="img/charlize_theron.jpg" width="307" height="230" alt="Charlize Theron">
</div>
.image {
  border: 2px solid #000;
  width: 307px;
  margin: 0 auto;
}

Видим этот отступ под изображением:

Изображение с отступом

И пробуем пятью различными способами убрать этот отступ.

1. Сделать элемент img блочным

Сделать элемент inline блочным - display: block

.block {
  display: block;
}

2. Задать вертикальное выравнивание

Так как элемент img является строчным inline, то к нему применимо свойство vertical-align, как к любому строчному элементу. Мне такой способ нравиться больше всего:

Элемент inline - присвоить vertical-align: top

.vertical {
  vertical-align: top;
}

3. Сделать элемент плавающим через float

Задать для элемента img свойство float: left или float: right. Если элемент делается плавающим через float, то из строчного inline он становится блочным block.

И отступ также пропадает. Только надо не забыть добавить для контейнера div.image свойство overflow: hidden, иначе пропадет граница вокруг изображения.

Что и понятно, так как при float: left или float: right элемент “вырывается” из общего потока, становится плавающим:

Элемент inline - присвоить float: left

.float {
  float: left;
}

4. Сделать картинку таблицей

Для изображения задать свойство display: table:

Элемент inline - присвоить display: table

.table {
  display: table;
}

5. Задать высоту для блока

Для блока-контейнера div.image жестко задать высоту, равную высоте изображения. В моем случае высота картинки равна 230 пикселей, поэтому и для блока-обертки задаю такую же - 230 пикселей:

Элемент inline - присвоить width

.height {
  height: 230px;
}

Все пять способов проверены мною и должны работать в реальности.

На это все.