CSS3 для веб-дизайнеров — страница 5 из 14

2. Кто угодно может применять эти свойства в своих проектах, в особенности в отношении элементов взаимодействия.

3. Браузерные префиксы позволяют нам продвигать технологию прямо сейчас, помогая проверять неустоявшиеся свойства на реальных задачах.

4. CSS-переходы перестали быть проприетарными экспериментами – они стали частью спецификации, которую перенимают другие браузеры. Их стоит использовать!


Теперь самое время применить все эти прекрасные новые инструменты в дизайне настоящей веб-страницы.

Наш пример

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


Рис. 3.01. Наш выдуманный пример: Вещи, которые мы оставили на Луне

Сообщения в космосе и в вебе

В 1969 году космонавты Нейл Армстронг и Базз Олдрин стали первыми людьми, ступившими на Луну. Я очень поверхностно интересовался путешествиями в космос и программой NASA (National Aeronautics and Space Administration, Национальное управление по воздухоплаванию и исследованию космического пространства. Прим. перев.), но то, что я услышал о миссии Apollo 11 во время ее 40-летнего юбилея, вдохновило меня на то, чтобы прочитать больше об истории и событиях, связанных с этой высадкой. В частности, я был поражен количеством вещей, которые были оставлены на Луне и остаются там по сей день.

Из всех предметов, находящихся там, есть один, который представляет исключительный интерес. Он являет собой прекрасный пример дизайна интерфейсов. Этот предмет – небольшой кремниевый диск размером с полудолларовую монету. На диске выгравированы доброжелательные послания от глав более семидесяти стран со всего мира. Чтобы прочитать послания, нужен микроскоп, но ограничения в отношении того, что космонавты могли взять с собой, определили дизайн памятного предмета, который можно было оставить на Луне для следующих поколений (рис. 3.02).


Рис. 3.02. Небольшой (размером с полудолларовую монету) кремниевый диск, оставленный на Луне космонавтами Apollo 11.


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

Позже, в 1977 году, схожая проблема дизайна была решена для летательных аппаратов Voyager 1 и Voyager 2 с помощью золотой пластинки, содержащей звукозаписи, изображения и диаграммы, описывающие жизнь на планете Земля (рис. 3.03). В каком-то смысле эта пластинка – письмо в бутылке, адресованное цивилизациям, находящимся за пределами Солнечной системы. На алюминиевом футляре, в который упакована пластинка, даны пояснения: как правильно прослушать запись, из какой галактики прибыл этот предмет и др.


Рис. 3.03. Позолоченный футляр золотой граммофонной пластинки, находившейся на борту космических кораблей Voyager 1 и 2.


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

Можно почерпнуть многое из историй о кремниевом диске, оставленном на Луне, и золотой пластинке, летящей сквозь космос: использование наилучшей технологии может помочь донести сообщение, которое отправляется во многом неизвестной аудитории.

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

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

Теперь вы знаете, почему наш пример отдает дань уважения тем посланиям, которые оставлены на Луне или летят через космос. Настало время поделить этот сайт на части, выделяя небольшие примеры, относящиеся непосредственно к CSS3. Я считаю разумным собрать в одном месте все приемы, которые мы будем обсуждать. Читатель сможет обращаться к этому шаблону и ко всем примерам когда угодно – все собрано в одной живой, дышащей веб-странице. Код этого примера можно скачать с http://CSS3exp.com/code.

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

Удивление и восторг

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

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

Прекрасный образец того, как удивлять и восхищать с помощью CSS3, можно найти на сайте голландского дизайнера и разработчика Фарука Атеса (http://farukat.es). В боковом меню находится список ссылок на различные социальные сети, которые при наведении мыши раскрываются и оживают с помощью нескольких CSS3-эффектов и мягкого перехода (рис. 3.04).


Рис. 3.04. Боковое меню и реакция на наведение мыши – сайт Фарука Атеса


То, что выглядит обычным сдвинутым вправо списком, состоящим из текста и картинок, оказывается намного более интересным объектом, когда начинаешь взаимодействовать с ним. Это важнейший пример обогащенного взаимодействия, и Фарук использует разнообразные свойства CSS3, чтобы достичь этого эффекта.

Рис. 3.05 показывает, как выглядят состояние при наведении и обычное состояние в Internet Explorer 7, который никак не поддерживает CSS3. Можно заметить, что хоть состояние при наведении и небезупречно, сайтом по-прежнему можно пользоваться, информацию можно прочитать – сайт остается функциональным; не говоря о том, что основное состояние выглядит почти неизменно.


Рис. 3.05. В браузере IE7 сайт Фарука Атеса не демонстрирует тех же визуальных эффектов, но это в порядке вещей


Наведение на элемент (или фокусировка) – прекрасное место сайта, которое можно улучшать средствами CSS3. Пользователи Internet Explorer получат иное взаимодействие (пока в этот браузер не войдет поддержка свойств CSS3). Но это взаимодействие ничем не хуже, и, откровенно говоря, пользователи IE не узнают о том, что они упускают.

То есть – до тех пор, пока не откроют сайт на компьютере друга, где установлен браузер Safari, Chrome, Firefox или Opera (и почувствуют подступающую зависть).

Должны ли сайты выглядеть полностью одинаково в каждом браузере?

Это важный вопрос (и вполне подходящий для того, чтобы задать его сейчас), и я пробую ответить на него на сайте с невероятно длинным доменным именем (рис. 3.06): http://dowebsitesneedtobeexperiencedexactlythesameineverybrowser.com.


Рис. 3.06. Необычно названный http://dowebsitesneedtobeexperiencedexactlythesameineverybrowser.com


Как и пример Фарука, этот сайт становится интересным лишь тогда, когда начинаешь взаимодействовать с ним. На поверхности он выглядит практически одинаково во всех браузерах, но когда начинаешь двигать мышкой, прикасаясь к тексту и к фону, применяется набор свойств CSS3, переходов и трансформаций, чтобы сделать взаимодействие особенным и запоминающимся.

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


Рис. 3.07. Обогащенное взаимодействие раскрывается, когда начинаешь взаимодействовать с сайтом. Все благодаря CSS3

Навигация на Луне

Применим подход добавления CSS3 к состоянию hover непосредственно в наш пример. Я подробно расскажу каждый шаг на пути создания меню в верхней части сайта (рис. 3.08), в котором сочетаются

border-radius
,
text-shadow,
RGBA и CSS-переходы, чтобы построить взаимодействие, которое будет удивлять и восхищать.


Рис. 3.08. Меню в нашем примере улучшено в состоянии hover за счет CSS3

Сначала разметка

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


  • News
  • Things
  • Stuff
  • Junk
  • About

  • Разумеется, здесь нет ничего нового – лишь подходящая структура, к которой можно начать применять стили.

    Сдвинем элементы

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


    #nav {

     float: right;

     padding: 42px 0 0 30px;

     }

    #nav li {

     float: left;

     margin: 0 0 0 5px;

     }


    Результат виден на рис. 3.09. Теперь список горизонтален.


    Рис. 3.09. Горизонтальный список ссылок, полученный применением нескольких CSS-правил

    Определение цвета ссылки – RGBA

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

    255, 255, 255
    ) и 70% непрозрачности (
    0.7
    ), чтобы текст впитывал в себя часть расположенного за ним фона (рис. 3.10).


    Рис. 3.10. Теперь ссылки стилизованы с помощью RGBA и текст немного смешивается с фоном


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: rgba(255, 255, 255, 0.7);

     }


    Рис. 3.11 показывает ссылки крупным планом. Непрозрачность в 70% делает фон немного просвечивающим.


    Рис. 3.11. Увеличенный вид полупрозрачных ссылок

    Запасной вариант для RGBA

    RGBA – удивительно гибкий способ задания цвета и прозрачности, но он не поддерживается всеми браузерами. Safari, Chrome, Firefox, Opera поддерживают его, равно как и Internet Explorer 9, но что насчет IE6-8?

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


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: #ccc;

     color: rgba(255, 255, 255, 0.7);

     }


    Браузеры, поддерживающие RGBA, проигнорируют это объявление цвета (светло-серый

    #ccc
    в этом примере), а браузеры, которые не поддерживают RGBA, проигнорируют RGBA-указание.

    Итак, важная вещь, которую следует запомнить: указывайте запасные цвета в RGB для всех цветов, задаваемых в RGBA, в отдельном правиле, которое ставится перед RGBA-объявлением.

    Добавим text-shadow

    Как последнее добавление к оформлению ссылок, добавим небольшую тень (

    text-shadow
    ). Вновь воспользуемся RGBA, чтобы задать цвет тени: полупрозрачный черный цвет будет смешиваться с цветом фона.


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: #ccc;

     color: rgba(255, 255, 255, 0.7);

     text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);

     }


    Рис. 3.12 показывает сравнение ссылок без свойства

    text-shadow
    (слева) и с ним (справа), как это выглядит в Safari. Эта деталь почти неразличима, и все же крошечная тень приподнимает текст над фоном ровно настолько, насколько нужно.



    Рис. 3.12. Сравнение ссылок без свойства text-shadow (слева) и с ним (справа)


    Помните, что свойство

    text-shadow
    работает в текущих версиях Safari, Chrome, Firefox и Opera. Браузеры, не поддерживающие
    text-shadow
    (читай: IE), спокойно проигнорируют это правило. Нет тени – нет проблем.

    С готовым

    text-shadow
    мы можем переходить к оформлению состояния
    :hover
    . И здесь мы будем в большей мере опираться на CSS3.

    Оформление состояний hover и focus

    Добавим изменение цвета текста и фона для состояния

    :hover
    каждой ссылки. Мы вновь применим RGBA, чтобы задать тексту полупрозрачный белый фон.


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: #ccc;

     color: rgba(255, 255, 255, 0.7);

     text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);

    }


    #nav li a: hover,

    #nav li a: focus {

     color: #fff;

     background: rgba(255, 255, 255, 0.15);

     }


    В состоянии

    :hover
    цвет текста меняется на непрозрачный белый; добавляется фон белый фон с непрозрачностью в 15%. Тот же стиль задается для состояния: focus. Посетители сайта, пользующиеся клавиатурой для перемещения между элементами, увидят изменение цвета текста, когда переводят фокус на ссылку.

    Рис. 3.13 показывает ссылки в новом состоянии

    :hover
    (и 
    :focus
    ). Браузеры, поддерживающие RGBA, отобразят полупрозрачный белый фон позади яркого белого текста.


    Рис. 3.13. Состояние: hover – теперь с полупрозрачный фоном, полученным с применением RGBA

    Скругление углов: border-radius

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

    border-radius
    .

    Вспоминая изученное в первой главе о свойстве

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


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: #ccc;

     color: rgba(255, 255, 255, 0.7);

     text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);

     -webkit-border-radius: 14px;

     -moz-border-radius: 14px;

     border-radius: 14px;

     }


    #nav li a: hover,

    #nav li a: focus {

     color: #fff;

     background: rgba(255, 255, 255, 0.15);

     }


    Рис. 3.14 показывает фон ссылки в состоянии

    :hover
     – теперь со скругленными углами, полученными с использованием свойства
    border-radius
    . Так страница выглядит в браузерах Safari, Chrome, Firefox, Opera, равно как и в IE9. Помните, что беспрефиксное свойство
    border-radius
    поставлено в списке последним, чтобы оно получилось приоритет над всеми остальными. Например, Safari 5 поддерживает как беспрефиксное свойство
    border-radius
    , так и 
    -webkit-border-radius
    , поддерживаемое в Safari 4.


    Рис. 3.14. Как скруглить углы, пользуясь свойством border-radius


    Возможно, читатель спросит: почему объявление

    border-radius
    ставится в правило для
    #nav li a
    , а 
    не #nav li
    a: hover
    (где скругленные углы появляются на экране)? Ответ кроется в CSS-переходе, который мы сейчас добавим как последний штрих.

    Добавим анимацию

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

    :hover
    и 
    :focus
    у ссылок в меню. Такой эффект смягчит появление фона: он будет постепенно всплывать позади текста. Переход также сгладит смену цвета текста от полупрозрачного белого до полностью белого (рис. 3.15).


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


    В этом примере мы напишем код перехода, работающий в Safari, Chrome, Firefox (4.0) и Opera, и самым последним добавим свойство

    transition
    без префикса – для свежих версий существующих браузеров и для новых браузеров.


    #nav li a {

     padding: 5px 15px;

     font-weight: bold;

     color: #ccc;

     color: rgba(255, 255, 255, 0.7);

     text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);

     -webkit-border-radius: 14px;

     -moz-border-radius: 14px;

     border-radius: 14px;

     -webkit-transition: all 0.3s ease-in-out;

     -moz-transition: all 0.3s ease-in-out;

     -o-transition: all 0.3s ease-in-out;

     transition: all 0.3s ease-in-out;

     }


    #nav li a: hover,

    #nav li a: focus {

     color: #fff;

     background: rgba(255, 255, 255, 0.15);

     }


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

    :hover
    , но и на
    :focus
    и 
    :active
    .

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

    :hover
    и 
    :focus
    , – в этом примере color и background. Ту же анимацию можно было бы получить другим способом, перечислив все свойства через запятую:


    -webkit-transition:

     color 0.3s ease-in-out,

     background 0.3s ease-in-out;

    -moz-transition:

     color 0.3s ease-in-out,

     background 0.3s ease-in-out;

    -o-transition:

     color 0.3s ease-in-out,

     background 0.3s ease-in-out;

    transition:

     color.3s ease-in-out,

     background.3s ease-in-out;


    Легко заметить, что значение

    all
    более компактно и эффективно, когда нужно анимировать несколько изменений одного элемента.

    Построение взаимодействия

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

    Это маленькое упражнение также показывает, насколько эффективно достигать средствами CSS3 того, для чего раньше требовались Flash и/или JavaScript. Использованные CSS-правила просты, естественны и безвредны для тех браузеров, которые их пока что не поддерживают.

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

    Простой и гибкий hover с использованием opacity