О вёрстке, холиворах и реалиях

Не так давно к посту “Два вопроса про качественный в кавычках CSS” получила много полезных развёрнутых комментариев, спасибо всем. Напомню, что один из вопросов был о том, что если на странице есть кнопка-ссылка, к примеру, “Download”, то как правильно её реализовать: использовать конструкцию <a href=""><img src="" alt="Download" /></a>, где имидж в ссылке - красивая картинка для кнопки, или просто <a href=""></a>, где в описании класса фоном подгружать ту же красивую картинку? Правильно с точки зрения семантики, с точки зрения грамотной вёрстки и т.д. В комментариях были сторонники первого решения, были - второго, большей же частью писали о том, что без принципиальной разницы, по договорённости с главным менеджером. К примеру, заинтересовали такие критерии:

  1. Если легко придумывается адекватный текст для alt, то нужно делать картинкой
  2. картинки фоном в CSS — это крайняя мера, потому что “обнаруживать их в CSS - это не прозрачно”
  3. когда стили отключены, кнопка должна отображаться как кнопка
  4. представить, что все img на странице проиндексируются поисковиками и будут выдаваться в поиске по картинкам. Иногда помогает сориентироваться, где уместно использовать тег img /, а где - фончик в css.

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

Действительно, если сложилось впечатление, что мы тут эти… фанаты исключительно дивной вёрстки, то оно правильное только отчасти. А потому, что удовлетворять пристрастие к правильному коду получается на сегодняшний день только для части проектов, для рекламных сайтов (которых много, не скрою), небольших проектов из конечного количества страниц и с заведомо известной структурой, предварительно (и гарантированно) утверждённой ДО НАЧАЛА ВЁРСТКИ. Но не все проекты у нас такие везучие. Как только речь заходит о не однотипных рекламных сайтах, а, к примеру, о каких-то сервисах-тулзах, то просто не получается. Прежде всего потому, что как правило утверждённого проекта на наши сервисы-тулзы мы не имеем, разработка происходит по накопительной модели.

К примеру разрабатывается каркас сервиса, с какой-то базовой функциональностью. Для того, чтобы презентовать его учредителям компании и/или инвесторам, его надо визуально “причесать”. Придумывается какой-нибудь дизайн, отвёрстывается макет, тюнится движок, на этом этапе вёрстка, как правило, ещё приличная, т.е. без костылей и практически всегда - без хаков. Дальше (в случае если) после презентации проект начинает бурно развиваться, разными программерами, работа верстальщика - подтюнить то, что напрограммировали программеры, в рамках же существующего дизайна. И вот здесь начинаются грабли, которые заканчиваются тем, что через пару месяцев на когда-то стерильный код просто страшно смотреть: костыли на костылях, сплошные хаки для хоть какой-то кроссбраузерности, вылазят такие требования к “элементам оформления”, которые в концепцию изначальной сетки просто не помещаются. Да, и таблицы. Мы как будто бы умеем верстать довольно сложные макеты без таблиц, но не тогда, когда невозможно предсказать требований к макету через день или уж тем более через месяц. Да, запускаем табличный каркас под основную модульную сетку (ну почти всегда). И здесь единственное решение - затребовать время на полную перевёрстку проекта. Написать с нуля, описать по-другому модульную сетку, продуманно и грамотно, сделать совершенно другие цепочки наследований свойств, убираются здоровенные избыточные конструкции, которые при изначальной модели и убрать-то нельзя, много всего посыпется. Но это не столько от безграмотно построенной первоначальной модели html+css, сколько от того, что со временем изменяется сама концепция. Кто-то может сказать, что это уже к вопросу проджект менеджмента, мол, должно же быть какое-то ТЗ, в рамках которого разработчики ваяют свои шедевры. Здесь я вижу две проблемные стороны:

1. Да, основное - это организационная проблема, когда всё ТЗ состоит из рекомендаций и пожеланий, которые просто добавляются по ходу разработки, когда продуманные изначально, скажем 5 разделов через пару месяцев дорастают до 10 и уже не вписываются в разработанную изначально модульную сетку, когда сама архитектура проекта меняется несколько раз принципиально и не только “а давайте добавим ещё парочку разделов в главную навигацию”, и “а почему бы быстро не сделать мультиязычность” (правда ведь никого не волнует, что в изначальном макете не особо было предусмотрена такая беда и, в частности, то, что количество букв в названиях, скажем, элементов меню на английском, немецком и французском иногда ну о-о-очень сильно разнится), когда каждый тим лидер в рамках озвученных пожеланий сам себе аналитик, когда спустя пол года проект уже ничем - ни визуально, ни по функциональности не напоминает тот сентябрьский, который презентовался в первой версии.

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

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

Так что по поводу холиворов на тему табличной и дивной вёрстки - да, мы ищем лёгих путей и как только у нас начинается очередное “стремительное развитие”, идём на компромиссы, таблицы используем и для каркасов и для оформления сложных форм, на более-менее предсказуемых же макетах в табличной вёрстке просто нет необходимости. Когда мы верстаем сайты, которые без дотнетовских движков, безтабличной вёрсткой ещё можно похвастаться, но как только речь заходит о дотнетовских проектах, то вопрос становится неактуальным, потому что кто в теме, тот и без меня знает, что такое дотнетовские контролы типа гридов или листвьювов, календарей или прочих “продвинутых” решений и во что они рендерятся в браузере. Ага, правильно! Таблицы в таблицах в таблицах. Т.е. полюбому приходится в таблицах стилей описывать элементы модульной сетки, построенные на табличной вёрстке. Это реальность, от которой никуда не денешься, разве только что если сменить компанию, где в качестве базовой технологии разработки используется что-нибудь другое.

Ну и на последок - примеры-частности. Ага, визуальные редакторы контента веб-страниц. Сделали замечательный такой сервис для мини-социальной сети (там закрытая группа, мало кому будет интересно), отличненько. По ТЗ мы делаем только каркас (топ, навигация, панель с тулзами), а содержание информационных страниц создают редакторы сервиса. Поставили им для начала простенький редактор - цвет текста поменять, картинку вставить, абзацы-ссылки-списки, конечно же, режим редактирования без визуальных средств чистый html, что людям нужно ещё для полного счастья? Им нужен продвинутый визуальный редактор типа как у word`а! Некоторое время пробовали уговорить, объясняли, какой бардак сейчас начнётся, не объяснили. Они захотели вот этот со всеми включенными тулбарами.

Разумеется уже через неделю раздались крики по поводу того, что у них на всех страницах (кроме главной), где они добавили своё содержание, разъехалось ВСЁ. Захожу в проект, смотрю, что они там намудрили, и не понимаю - зачем им весь этот расширенный тулбар, если они всё равно в визуальную зону вставляют форматированное нечто из того же word`а? Где у них образовалась таблица в таблице фиксированной ширины на 1500 пикселей и куча вторичного чиста word`овского кода в тегах? Предложили им простое решение - в контейнере, куда они грузят свой контент, добавить описание класса что-то типа overflow:auto;, не-а, говорят, не подходит. Не красиво. Полосы прокрутки не предусмотрены в концепте. Написали им документаху - чем можно пользоваться, чем нельзя и куда смотреть если что. Не помогло опять. Просто с какой-то периодичностью приходится заходить к ним с админскими правами и чистить тот код, который они очередной раз вставили в качестве обновлённого контента своих страниц.

Вот ещё замечательный пример: на ярушке один из верстальщиков глубокоуважаемого Яндекса Вадим Макишвили запостил провокационный пост про таблицы в макетах:

Не существует сейчас надежнее средства для создания сложной раскладки, чем таблица. Под надежностью я понимаю:
- уверенность в правильном поведении раскладки
- уверенность, что последующая модификация раскладки не принесет часов геморроя
- скорость разработки раскладки
Плюйтесь в меня желчью, фанаты семантики. Плюйтесь-плюйтесь… Когда вам доверят верстать портальные морды, которые обложены главным требованием — “ничего никогда не должно сломаться” — вернётесь к раскладе таблицами. ;-)

На сегодняшний день 139 комментариев, некоторые не безинтересно почитать; в частности, о резиновых каркасах, о различных ограничениях по ширине (Виталий Харисов: “В данном конкретном случае возможно. Не задавай max-width вообще. Если ты дебил и разворачиваешь окно браузера на максимум на 30″ мониторе, то тебе ничего не поможет.“) и о том, кто должен продумывать тот или иной тип макета и поведение блоков на странице.

RSS feed | Trackback URI

14 Comments »

2008-04-30 16:15:52

Беги, Татьяна, беги [...] блог nundesign [...]

 
Comment by Cooluck
2008-04-30 19:53:54

По поводу визуального редактора - большую часть вещей можно отфильтровать при хорошей конфигурации. Но от дурака не спасёт ничего ;)

Comment by nundesign
2008-04-30 19:58:09

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

Comment by Cooluck
2008-04-30 23:03:23

Я понимаю, но даже на полноценном редакторе можно гадость в коде фильтровать. Ну а размеры - дело модератора.

 
 
 
Comment by Anton Naumov
2008-05-01 09:00:18

насчет дивной верстки в портальных мордах: Liferay Portal. ребята нарисовали портал с портлетами и очень красивую “дивную” тему. ничто никуда не разъезжатеся, ни в Опере, ни Лисе, ни в Осле, ни даже в Сафари. может быть все-таки дело в руках? или в лени? или и в том, и в другом?
насчет эволюционного прототипирования: дык Agile, однако. так теперь часто, если не сказать почти всегда. только ПМы от Agile, не всгда профи. очень хочется красиво выглядеть и тогда разработку “мы вот тут чуть-чуть подправим, вот тут слегка подмажем, здесь пару бажков пофиксим, а вот тут добавим функционала и успеем в срок, а сроку у нас на все неделя” называют красиво Agile. а с другой стороны именно Agile требует профессионализма и ПМа, и аналитика, и всей команды. Waterfall АКА Cascade как-раз прощает промашки в начальных сроках, с аналитикой вообще проблем нет, и команда может подтянуться до нужного уровня в процессе Elaboration. а в Agile нужно садиться и “давать стране метал”.
и про компоненты — не только в .Net. везде, причем как правило по итогу выгребать приходится гораздо больше проблем именно с табличной версткой компонента, когда нужно его красиво оформить или еще что-то с ним сделать. но зато, при разработке таблицой быстрее. альтернатива есть — писать сайт руками, контролы делать на HTML + JS. а это значит +2 человека в команду. но это не оправданный оптимизм, в реальности +4 разработчика и +2 тестера. вариант реальный только если заказчик маньяк валидной верстки (что само по себе плохо, я предпочтиаю заказчика, который фанат успешного бизнеса, тогда проблем с переговорами и взглядом на концепцию меньше, а пользы больше — платит регулярно, нацелен на результат и не лезет “учить жить”). так что врядли найдется контора, которая в качестве технологии разработки использует не компонентную модель, разве что вэб-студия. с другой стороны компоненты тоже на месте не стоят, я надеюсь что скоро и они будут рендерить нормальный HTML, тем более что это совсем не сложно.

 
Comment by Anton Naumov
2008-05-01 09:03:23

н-да, про Liferay — насчет Оперы я погорячился :) на самом деле у них другая тема была, в Опере работала нормально. тем не менее, продолжаю считать, что при должном уровне усердия и профессионализма — дивная верстка не проблема.

Comment by nundesign
2008-05-01 12:21:15

Ах, Антон. Да не проблема же конечно же. Если есть макет, который можно проанализировать на предмет разметки главных контейнеров и элементов и написать красивую таблицу стилей. Я же пишу не о том, что вот у нас была дивная вёрстка, а потом Agile режим нас замордовал и случилась табличная вёрстка, нет. Просто стерильная и логичная вёрстка стала не стерильной и не логичной, в таблицах стилей - куча избыточностей и неправильно объявленных наследований и всякое такое, и вот здесь по-хорошему нужно получить человеко-часы на то, чтобы спустя, скажем, несколько месяцев получить человеко-часы на работу, сесть, заново переосмыслить макет, переверстать шаблоны, переписать стили.
Потому что концепция изменилась, а стили - только правились и дописывались.

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

Comment by Anton Naumov
2008-05-01 19:42:40

да я ведь не к тому, что Agile замордовал. просто так бывает. Waterfall проще и более прогнозируем для подрядчика, для заказчика немножко нервно заплатить за N-человекочасов, и получить результат только через это самое N часов / M человек. а вдруг не выгорит? потому и Agile. а где Agile, там и ваши проблемы. они на самом деле не только ваши, они общие. и тут я не случайно говорил про профессиональных ПМов. задача ПМа в Agile уметь грамотно обосновать для заказчика, когда пришло время рефакторинга. а оно приходит всегда. ибо эволюционное прототипирование. и это как-раз ваш случай, когда нужно время на рефактринг верстки и стилистики макета. я не прав?
а остальное, это скорее ответ на цитату. сорри, занесло :)

 
 
 
Comment by Zigzag
2008-05-01 11:00:40

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

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

Comment by nundesign
2008-05-01 12:23:05

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

А про редактор. Я же ж говорю - такое было требование заказчика. Сначала спорили, обосновывали свою точку зрения, потом махнули рукой. Саппорт-то всё равно на нас остался :) а это деньги. Поэтому поправить очередной “шедевр” форматирования ихней секретарши - не проблема.
Впрочем это именно тот проект, который пришёл к нам на редизайн. Может, мы пересмотрим вопрос с этим визуальным редактором.

Comment by Zigzag
2008-05-02 08:46:10

эээ… ни одного для дотнета =)

 
 
 
Comment by Fenrir
2008-05-01 13:57:19

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

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

А провокация… Вот честно… Не люблю табличные макеты. Мне очень трудно отлавливать в них баги при изменении сетки. У меня начинается нервный тик при виде colspan’ов и необходимости “вот тут колонку добавить, а тут убрать”.

Готовые контролы с точки зрения верстальщика - зло :) Но ситуация может поменяться на контрол “своими силами” только тогда, когда он станет злом и для программистов. По описанию функциональности .NET решений, вам это не грозит…

 
Comment by xzirrow
2008-05-04 14:46:03

Прочитал - аж прослезился, насколько же до боли знакомо. Верстаем одно, потом в процессе хаки (и не только CSS) под контент. На самом деле спасибо за откровенность.

 
Pingback by NunDesign
2008-05-14 13:03:18

Офисное дизайнерское: склоки и подставы
[...] на вёрстку присылаются сюда, на Украину. Про различные недоговорённости и проблемы с вёрсткой я уже писала неоднократно, но сейчас разговор именно о [...]

 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.