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

понедельник, 17 ноября 2014 г.

Исправление весенней ошибки

Авторство в создании концепции «отвечающего» веб–дизайна (responsive web design, RWD) приписывается американскому дизайнеру из Бостона Итану Маркотту, хотя за шесть лет до опубликования его статьи на эту тему, другой дизайнер–разработчик, Камерон Адамс, выдвинул общую идею динамической адаптации представления веб–сайта на различных устройствах: смартфонах, планшетах, ноутбуках и офисных компьютерах.

Как бы там ни было, но выявление «первородства», а также дальнейших перипетий развития и совершенствования теории и практики адаптивного дизайна — именно так эта техника называется в русскоязычной литературе — имеет схоластическое значение: гораздо важнее вопросы практической имплиментации. Тем более, что некоторые веб–изощренцы, доходя порой даже до стадии извращенцев, находят принципиальный и непримиримые различия между понятиями адаптивный дизайн, адаптивная разметка, отзывчивый дизайн и всеми остальными производными от этих понятий. Жуть и жесть!

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

Другими словами, решил сделать «работу над ошибками». В качестве резинки–ластика для стирания этих ошибок и карандаша, способного красивым почерком вписать в историю моего сайта правильные современные «слова», связав их в логически верные «предложения», которые, в конечном итоге, сложатся в интересный, увлекательный «роман» призван вызвать набор CSS/Javascript Bootstrap, недавно приобретённый вместе с пакетом HTML5 Bootstrap.

На первый взгляд никаких особых изменений, по сравнению с первоначальной («табличной») схемой (рисунок слева внизу) не произошло: на варианте со слоями (рисунок справа внизу) всё так же в левой колонке располагается блоки навигации (меню жёлто–оранжевого цвета) и второстепенной информации (фрагмент фиолетового цвета), в центральной колонке — основной контент (зелёный цвет), а в правой — дополнительные сведения. Однако, вариант со слоями строится исключительно на принципах HTML5 и ему присущи очень полезные дополнительные свойства.

Вся «прелесть» адаптивного дизайна во всей своей красе проявляется в представлениях для малого и сверхмалого разрешений (в контексте терминов Bootstrap), то есть, для планшетов и смартфонов, соответственно. Таким образом, если разрешение экрана у пользователя окажется меньше 768 пикселей в ширину (обычное дело для смартфонов и малых планшетов), то содержимое веб–страница будет представлено в виде одной колонки (зелёное и сиреневое поля на среднем рисунке внизу), а меню (жёлто–оранжевое поле на том же рисунке) и дополнительная информация (поле синего цвета) вызываются по требованию пользователя (всплывают по нажатию соответствующей пиктограммы).

Для устройств с несколько бо́льшим разрешением (больше 768, но меньше 992 пикселей) — раскладка с двумя колонками для контента и дополнительной информации, «обрамлёнными» сверху и снизу блоками меню и вспомогательной информации (рисунок слева внизу). А для больших и очень больших разрешений — всего, что больше 992 пикселей в ширину, — ранее описанное трёхколоночное представление (для наглядности я повторил этот рисунок справа внизу).

Наверное, можно было бы всё это многообразие макетов реализовать и через таблицы (как мечталось в далёком апреле), но инструментарий пакета Bootstrap позволяет не только преодолеть возможную «головную боль» с дизайном, но и полностью её предотвращает. Спрашивается, зачем ломиться «скрозь» лес, ломая рогами ветки и треща валежником, если можно спокойно прогуляться по аллейке с рюмкой кофе в руках, наблюдая красоты окружающей природы? Я, например, выбрал «прогулку».

Речь идёт о наборе из четырёх типов классов, которые соответствуют четырём диапазонам разрешений экрана:

  • .col-xs- (eXtra Small) — колонка (столбец) для самого малого разрешения (меньше 768px);
  • .col-sm- (SMmall) — колонка для малого разрешения (от 768 до 992px в ширину);
  • .col-md- (MeDium) — колонка для среднего разрешения (между 992 и 1200px);
  • .col-lg- (LarGe) — колонка для большого разрешения (больше 1200px).

В конце каждого наименования класса должно быть указано число, соответствующее количеству полос, которое будет занимать колонка по ширине из двенадцатиполосной сетки. Непонятно? Это неудивительно — нужно сначала разобраться с «сеточной» техникой вёрстки макета страниц.

Для удобства дизайнера, всё пространство, на котором будет расположено содержимое веб–страницы с заголовками, меню, подвалом и дополнительными блоками — в общем, всё — разбивается по ширине на двенадцать вертикальных полос. Можно, конечно, разделить пространство на большее или меньшее количество полос, но именно двенадцать включено по умолчанию в пакете Bootstrap, и я не нашёл причины, по которой необходимо изменять их количество для моего сайта. На схеме внизу представлены три макета (для трёх разрешений), наложенный на двенадцатиполосную сетку.

А теперь, прочувствуйте простоту и удобство вёрстки страницы с помощью сетки и Bootstrap: для самого маленького разрешения, которому соответствует группа классов .col-xs-, блок меню–навигации (жёлто–оранжевого цвета) будет «награждён» классом .col-xs-4 («простирается» на четыре полосы сетки), блок основного контента (зелёного цвета) и вспомогательной информации (лилового цвета) — .col-xs-12 (ширина всех 12 полос), а второй блок дополнительной информации — .col-xs-4.

Макет для планшетов и нетбуков (если такие ещё существуют) строка меню и левый блок дополнительной информации наделяются классом .col-sm-12 (занимают всю ширину экрана), блок основного контента — .col-sm-8 и правый блок вспомогательной информации — .col-sm-6.

По такому же принципу, — решительно и деловито, — назначаются классы для среднего разрешения: .col-md-6 — для блока основного контента и .col-md-3 — для всех остальных. Группу классов .col-lg- решил вообще не трогать: с экранами больших разрешений успешно справится «средняя» группа (.col-md-).

Если вас заинтересовала техника вёрстки с использованием «сеток», могу порекомендовать весьма приличный, хоть и англоязычный ресурс для общего развития и снятия эмоционального напряжения.

Первый порыв применения Bootstrap на практике, можно сказать, «проба пера» вылилась в такую конструкцию (интересно, как она себя поведёт в жизни, то есть, на сайте?):

<div class="container"> 
 <div class="row"> 
  <div class="col-sm-12 col-md-3 hidden-xs">
   <!-- на смартфонах меню спрятано и вызывается принудительно, по нажатию пиктограммы (механизм вызова меню здесь не рассматривается) -->
   <h2>Меню</h2>
   <p>(жёлто-оранжевый блок)</p>
   <div class="hidden-sm">
    <!-- ... а блок дополнительной информации отображается в другом месте и на смартфонах, и на планшетах (см. ниже) -->
    <h2>Доп.информация левой колонки</h2>
    <p>(лиловый блок)</p>
   </div>
  </div>
  <div class="col-xs-12 col-sm-8 col-md-6">
   <h2>Контент</h2>
   <p>(зелёный блок)</p>
  </div>
  <div class="col-xs-4 col-sm-4 col-md-3 hidden-xs">
   <!-- на смартфонах правая колонка спрятана и вызывается принудительно, по нажатию пиктограммы (механизм вызова блока здесь не рассматривается) -->
   <h2>Правая колонка</h2>
   <p>(синий блок)</p>
  </div>
 </div>
 <div class="row"> 
  <div class="col-xs-12 hidden-md hidden-lg">
   <!-- дополнительная информация из левой колонки на смартфонах и планшетах выводится под блоком с основным содержанием -->
   <h2>Доп.информация левой колонки</h2>
   <p>(лиловый блок)</p>
  </div>
 </div>
</div>

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

понедельник, 14 апреля 2014 г.

Битва слоёв с таблицами

Четыре года тому назад уже полным ходом шли кровопролитные бои между сторонниками компоновки страниц сайта, с одной стороны, при помощи таблиц и с использованием слоёв (div'ов) с другой. Моя личная двадцатилетняя история работы с реляционными базами данных и, следовательно, таблицами совершенно предсказуемо и очевидно определила мой выбор в пользу табличной вёрстки. Последующая практика разработки сайтов хоть и внесла некоторые коррективы в концептуальное отношение к слоям, но пламенной любви к ним так и не привила — ну, не чувствую я div'ы так, как чувствую таблицы.

Вместе с тем, создание сложной структуры страницы исключительно «на таблицах» может ввести в ступор даже опытного «табличника» — одно время в Сети ходили леденящие душу истории о сайтах, свёрстанных из четырёх десятков вложенных друг в друга таблиц. Впрочем, не менее страшные ужастики рассказывали и о многократно вложенных слоях, но это не лишало впечатлительных разработчиков сна и не заставляло их пугливо вздрагивать от случайных шорохов в ночной тиши: сегодня полтора десятка вложенных слоёв — нормальное явления, например, для шаблонов Blogger'а.

Жизненный опыт неустанно твердит: никакая крайность не может быть наилучшим решением. Справедливости ради должен заметить, что я никогда не был фанатом–ультрас таблиц, хоть ощущаю определённую духовную близость с ними с ними, а к слоям испытываю некоторую отчуждённость. Тем не менее, провозглашаю приверженность разумной середине (ну, или почти середине) в их применении на практике.

Такая «условная середина» определяется практической необходимостью и целесообразностью: например, неоспоримо лидерство слоёв при устройстве различных эффектов (скажем, полупрозрачных локальных затененеий), всплывающих, разворачивающихся и появляющихся окон. Зато, что касается структурирования какой–либо регулярной информации (в случае с моим сайтом это, например, галерея фотографий с пространными комментариями–описаниями), то разумной альтернативы таблицам вообще не существует (и не надо со мной спорить — всё равно не переубедите!).

В результате, мой новый выбор таков: структурирование страницы на самом высшем уровне осуществляется слоями, формирование колонок — при помощи таблиц, а наполнение ячеек таблиц — снова в div'ах, при необходимости (можно же и непосредственно в ячейку напихивать данные). Примерно так:

[...]
[...]

суббота, 12 апреля 2014 г.

Подключение скриптов и стилей

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

С помощью всё того же Гугла разыскал я JQuery–библиотеку под названием плагин JQuery Sintax Highlight для «красивизации» кодов, написанных на различных языках программирования (мне могут потребоваться Javascript, CSS, PHP и SQL).

Но вот незадача: установочный пакет этого плагина (и, кстати, многих других) требуется скопировать на сервер, на котором размещён сайт, однако, для моего случая (сайтом является блог на Blogger) возможность загрузки файлов скриптов и таблиц стилей Гуглом не предусмотрена. Тем не менее, решение нашлось.

Среди услуг, предоставляемых Гуглом имеется сервис для размещения и хранения документов — облачное хранилище Google Drive. Если у вас есть аккаунт на Google (например, почта), значит у вас есть и Google Drive.

Запустить этот сервис можно нажав на квадратик из точек в правом верхнем углу панели Google (см. скриншот вверху) и выбрав из выпадающего окна иконку «Диск» После этого можно создать папку для своих скриптов (у меня это папка jquery) — именно для этого и существует красная кнопка «Создать», перейти в созданную папку и, нажав на меньшую безымянную красную кнопку (со стрелкой вверх), примыкающую к кнопке «Создать», загрузить требуемые файлы (в рассматриваемом случае это файл скрипта jquery.highlight.js и сопровождающий его файл стилей jquery.highlight.css, заранее взятые из репозитария).

Следующий этап — «разблокирование» файлов для всеобщего доступа: по умолчанию, при загрузке доступ к файлу имеет только его владелец. На скриншоте вверху для файла установлен наивысший уровень доступа: «Общедоступно в Интернете» (любые другие варианты у моего блога вызывали острое неприятие и скрипт просто не загружался на страницу). Кстати, если вы создаёте отдельную папку для своих скриптов (как моя jquery) и на неё устанавливаете требуемый доступа, то все загружаемые в эту папку файлы тоже будут «общедоступны в Интернете» (нужно будет только подтвердить это в диалоговом окне после загрузки).

Очень важный этап — переделка адреса ссылки на загруженные файлы. Гугл генерирует ссылку примерно такого вида (находится в поле «Совместный доступ»):

https://drive.google.com/file/d/0D-SchqSURoSlR2Mk0Vm12GJSWcy/edit?usp=sharing

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

https://googledrive.com/host/0D-SchqSURoSlR2Mk0Vm12GJSWcy

На этом упражнения с Google Drive можно было считать законченными и переходить к водным процедурам, но остался совсем небольшой этап: вставить в шаблон блога ссылки на загруженные файлы (ведь ради этого и затевался весь сыр–бор).

Первым делом, выберите в боковом меню вашего блога позицию «Шаблон». После этого очень многие начинающие (а зачастую и продолжающие) блогеры сразу же, смело и решительно заходят в святая святых, нажимая на кнопку «Изменить HTML». Наш путь, по большому счёту, лежит туда же, но сначала предпримем простой и необременительный шаг для обеспечения собственной безопасности — нужно сделать резервную копию шаблона, для чего и предусмотрена кнопка «Резервное копирование и восстановление» на той же странице.

Последуйте мудрому совету разработчиков платформы Blogger — «загрузите шаблон полностью», как предлагает надпись на кнопке диалогового окна и, если вдруг какие–нибудь ваши камлания над блогом приведут к фатальному перекосу в его работоспособности, вам не придётся в отчаянии рвать на себе пучками волосы, стеная от душевной боли по невосполнимой утрате и физической боли, неизбежно сопровождающей столь варварский способ эпиляции.

Теперь, если вы сохранили шаблон вашего блога, можно заходить в режим «Изменить HTML» и вставить в любое место шаблона между тегами <head> и </head> строки, сконструированные вами на предыдущем этапе, следя за тем, чтобы они не попали внутрь тела какого–либо условного выражения (я это делаю сразу после <title> и </title>):

<title><data:blog.pageTitle/></title>
<script language='JavaScript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js'/>
    
<!-- jquery.highlight.js и jquery.highlight.css -->
<script language='JavaScript' src='http://googledrive.com/host/0B-SczaUpoUUY5SlkhqVm12GJS2g'/>
<link type="text/css" rel="stylesheet" media="all" href="http://googledrive.com/host/0B-SchqVm12GJT2pYaUtJd2UydlU" /> 

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

  • подключить библиотеку jquery.js (или её уплотнённый вариант jquery.min.js — строка №2 в верхней врезке кода),
  • вставить туда же (между тегами <head> и </head>) ещё один фрагмент кода:
<script language='JavaScript'>
 $(document).ready(function(){
  $('pre.code').highlight({source:1, zebra:1, indent:'space', list:'ol',attribute: 'data-language'});
 });
</script>

Теперь осталось поместить код между тегами <pre class="code"> и </pre> — обязательно нужно указать имя класса и можно указать название языка, который находится в контейнере (допускаются варианты html, js, php, css и sql):

<pre class="code" lang="html"> <p>Привет, мир!</p> </pre>

Как наверняка уже догадался мой проницательный читатель, все примеры отображены уже с помощью плагина подсветки синтаксиса JQuery Sintax Highlight, то есть поставленная в начале статьи задача выполнена. Но в заключение должен сделать несколько замечаний. Во–первых, в первом контейнере указаны произвольные идентификаторы на файлы скрипта и таблицы стилей: вам нужно будет сформировать и свои собственные на Google Drive, поскольку эти — не рабочие.

Во–вторых, перед вставкой в контейнер HTML–кода необходимо предварительно преобразовать символы < и > в HTML–тегах на &lt; и &gt;, соответственно. Для этих целей удобно использовать онлайн перекодировщики, например, этот. В–третьих, кол, приведенный во втором контейнере ($(document).ready(function()…) тоже можно поместить в отдельный файл, загрузить этот файл на Google Drive, сформировать ссылку по изложенному в этой статье алгоритму и включить в заголовок документа в виде <script language='JavaScript' src='http://googledrive.com/host/[идентификатор файла]'/>.

пятница, 11 апреля 2014 г.

Начинаю начинать

Встречают, как говорится, по одёжке, а «одёжка» моего сайта, над которой я долго и старательно корпел, по прошествии бурных лет перестала ласкать мой взор (скриншот бывшей стартовой страницы приведен выше). Другими словами, дизайн придётся переделать. «Однозначно» © В.В.Жириновский.

Тусклые оттенки и неуёмная тяга к градиентам, конечно же, была навеяна вечной дымкой – то ли от невероятно жаркого воздуха, то ли из–за пылеобразного песка поднимающегося при малейшем ветре и долго висящего в воздухе, вызывая «скржет зубовный». Отдохнувший от пустынных пейзажей за пару лет глаз, при новом обследовании дизайна решительно отказался от унылости и было принято решение несколько откорректировать гамму: заменить фон, уйти от грязноватых жёлто–голубых градиентов, слегка перекомпоновать страницу. Впрочем, полностью отказаться от градиентов не получилось и в центральной колонке всё–таки остался бело–жёлтый представитель. На всякий случай, так сказать.

Перво–наперво, предстоит изменить кодировку сайта: четыре года тому назад было совсем нестыдно делать сайт в кодировке CP-1251, а теперь — всё, что не UTF-8 считается чуть ли не признаком дурного тона. Это тенденция понятна, разумна и приемлема, поэтому придётся ей следовать.

Была мысль перенести весь сайт на какой–нибудь популярный движок CMS, например, Joomla, но под каждый раздел сайта в своё время были написаны уникальные скрипты и отказываться от них я не намерен. А вот их «перековка» под неродную систему может вылиться в несоизмеримые трудовые затраты. Тем более, что я настолько комфортно чувствую себя в компании библиотек XTemplate и DBSimple, что буду сильно печалиться и тосковать, если Джумла их не примет в своё лоно.

Ещё нужно будет «вычистить» из PHP–скриптов весь текст, который должен выводиться в браузер. Идеальным является решение с использованием функционала GetText, но затеваться на моноязычном сайте с системой, предназначенной для многоязычных, вряд ли разумно. Гораздо проще завести набор .INI файлов для определения всех требуемых значений. Так и сделаю.

Про систему комментирования статей я уже писа́л — решение почти найдено и его остаётся только воплотить. «Почти» — потому, что нужно дополнительно определиться с системой подключаемых комментариев: например, по Хабрахабру гораздо предпочтительнее (по сравнению с Disqus) смотрится Cackle, а ещё хвалят HyperComments (хотя в бесплатной версии очень скромная функциональность).

Продолжаются раздумья насчёт целесообразности изменения библиотеки для работы с миниатюрами и изображениями реального размера. В первой версии сайта используется Highslide на «чистом» Javascript и «весом» около 275К, но в новой редакции «Заливной рыбы» интенсивно применяется надстройка JQuery (ну, очень мне нравится!), и логично было бы использовать соответствующую библиотеку. Выбор пал на PicBox на JQuery, которая имеет размер около 30К, правда, требует вспомогательную библиотеку JQueryUI (ещё 60К в сжатом виде).

И это — только то, что лежит на поверхности! Хочется надеяться, что пока ещё невидимых подводных камней будет не слишком много. Вам тоже интересно? Тогда, «следите за рекламой»!