1. Я тут подумала, что скучно просто писать «портфолио обновилось», так что я буду понемногу рассказывать вам о вёрстке новых проектов, а может, расскажу и о старых.

    TypochatПроект Typochat — это чат, который ориентирован на этакие одноразовые деловые конференции. Вы создаёте «комнату» и приглашаете туда своих коллег на поговорить. Сейчас проект в стадии альфа-тестирования. В планах запуск версии под iPhone, и вот там-то вёрстка самая интересная, но об этом я поговорю на РИТ-2009.

    Верстка же самого чата интересна тем, что макет полностью резиновый во все стороны. Тянется шапка, тянется окно чата в ширину и в высоту — и при этом поле отправки сообщения и сайдбар остаются на месте. Такой лэйаут делается при помощи абсолютного позиционирования и полного растягивания блока заданием ему одновременно и right, и left, и top, и bottom. К сожалению, IE наш родной не понимает такого финта, у него может быть только два значения позиционирования. Поэтому для него приходится высчитывать высоту резиновых блоков js-ом. То же касается и минимальных и максимальных ширин. (За помощь в создании лэйаута спасибо Вадиму Макееву).

    Как вы можете заметить, страница всегда занимает высоту окна браузера, и не имеет прокрутки. Ну, думаю, всем известно, что это делается при помощи height:100%; overflow:hidden; на HTML и BODY. Сайдбар в данном случае статичен, и некрасиво обрезается, если его высота больше высоты страницы. Чтобы этого не было, js-ом высчитывается, влезают ли все блоки, и если не влезают, нижний блок скрывается целиком.

    В этом проекте довольно много блоков со скругленными углами, причем радиус скругления — 1px. Для таких блоков я уже довольно давно использую технику «абсолютных уголков». Создаются элементы для уголков, им задается либо фоновое изображение, либо цвет бэкграунда; родительскому элементу задается position:relative;, уголки абсолютно позиционируются и закрывают блок в нужных местах. У этого метода есть один недостаток: если блок имеет нечетную ширину или высоту, IE неправильно обрабатывает позиционирование, располагая уголок выше или левее, чем нужно. Проблема решается экспрешеном для IE: bottom:expression(parentNode.offsetHeight%2?-1:0); В этом проекте я использовала для уголков элементы I, как наиболее короткие и незначимые (уголков в чате очень много, они в каждой строке), чем вызвала скандал между мной и Вадимом Макеевым, который утверждает, что использование элемента I страшно противоречит семантике документа. Я же все-таки упираю на то, что у элемента I нет семантики кроме одного очень частного случая, и вообще экстра-разметка в семантику документа не входит. Что думаете вы?

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

  2. Веб-приложение для IPhone
    Если однажды дизайнер принесет вам на блюдечке невероятно красивый, сияющий, округлый web-application для IPhone, эта шпаргалка и google помогут вам не ударить в грязь лицом.

    Доки и готовые решения

    1. iphone-universal — Normalized CSS & HTML framework to develop iPhone webdev applications — на самом деле, это во-первых и в единственных — там есть абсолютно все. Можно как использовать библиотеку, так и просто посматривать туда. Но я все-таки перечислю ключевые моменты для удобства.
    2. Safari CSS Reference — все поддерживаемые webkit свойства (под каждым указано, какая версия движка поддерживает, в том числе, и движка айфона).
    3. CSS3.info — CSS3 в примерах. Thanks to David Storey.
    4. CSS3 на W3C — драфт спецификации css3, если уж совсем невмоготу.

    Свойства и методы, на которые стоит обратить внимание

    1. <meta name=”viewport” content=”width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=0″/> — задает стандартную ширину экрана и запрещает увеличивать и растягивать сайт (для веб-приложений это обычно необходимо, в отличие от простых сайтов).
    2. размер шрифтов — в пикселах; и — ура! — мы можем использовать очень красивые шрифты типа Helvetica (посмотреть полный список поддерживаемых шрифтов).
    3. -webkit-box-shadow — создает тень у блока (полное описание свойств, о которых я буду говорить, есть в Safari CSS Reference; не вижу смысла устраивать здесь сеанс копипастинга).
    4. -webkit-border-radius — скругляет уголки блоку.
    5. -webkit-background-size — позволяет растягивать бэкграунд, например, качественно растягивает сложные градиенты.
    6. text-shadow — почему-то дизайнеры любят тексты с тенюшечками; порадуем их.
    7. background:url(/i/iphone/1.png) repeat-x, url(/i/iphone/1.png) 3px 0 no-repeat; — а это пример multiple background.
    8. помним про псевдоселекторы (псевдоклассы) :last-child, :hth-child(), :after и прочие — не плодим лишних сущностей в html.
    9. color:rgba(0,0,0,.80); — задание цвета с альфа-каналом для прозрачности. Работает по всех свойствах, где есть цвет — background, text-shadow и т.п.
    10. ну и суперхак — чтобы полностью спрятать поле ввода, традиционно надо убрать ему border и background, однако айфон все равно отрисовывает полю внутреннюю тень, даже при background:none. Лечится это следующим правилом: background:url(about:blank);

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

    С благодарностью Вадиму Макееву, который помогал разбираться в этом мне.

  3. Когда-то я случайно обнаружила, что такие замечательные методы селф-клиаринга как width:100% (для IE) или overflow:hidden, будучи применены к нумерованному списку OL в IE7 и IE6 сбрасывают нумерацию: каждый элемент списка у нас получается под номером 1. Полюбуйтесь сами.

    Ну, обнаружила и забыла. А сегодня опять наткнулась на этот идиотский баг и решила все-таки описать находку. Находка печальна — ведь теперь либо придётся обходиться без флотов внутри нумерованного списка, либо клиарить точкой для нормальных браузеров и использовать zoom:1 для IE6.

    Upd. Михаил Баранов сообщает нам, что это касается в принципе любого свойства, включающего hasLayout. Можно было догадаться. Что такое hasLayout.

    Upd. 2 Panya сообщает нам решение проблемы: display:list-item для LI, и vertical-align:top; им же, чтобы буллит выравнивался по верху. Благодарим!

  4. Обновилось портфолио.

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

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

    Может быть, у вас тоже что-нибудь есть? Кидайте в комменты.

    За этот список выражаю благодарность Вадиму pepelsbey Макееву, в незапамятные времена поделившемуся со мной своим opml-листом :)