|
Урок по вёрсткеОбсуждение темы Урок по вёрстке в разделе Библиотека, часть категории ДИЗАЙН И ГРАФИКА; Вёрстка Вёрстка – это довольно сложная и не однотипная наука. Вот просто взять и дать COMPLETE руководство по вёрстке невозможно. Так же как ... |
|
Опции темы |
08.07.2009, 18:11 | #1 |
|
Вёрстка
Вёрстка – это довольно сложная и не однотипная наука. Вот просто взять и дать COMPLETE руководство по вёрстке невозможно. Так же как невозможно вот взять и научить человека делать красивые сайты. Вёрстка – это скорее совокупность приёмов и различных подходов. Да, в основе вёрстки находится HTML и CSS, которые вы должны знать, но зная только их, многое сразу не сделаешь. Ведь даже зная, как пользоваться молотком и кузнечной печью, вы наврят-ли сможете сковать себе нож. Лучший способ улучшить свои знания, и понять, как использовать инструментарий – это посмотреть, как работают другие. Вот я и даю вам пример: довольно непростой сайт, в вёрстке которого используется кучка мелких «фишечек». Макет les1.jpg Я думаю что многие начинающие верстальщики подумают, что его нужно срочно начать верстать... Ан нет. Первоочередная работа верстальщика при получении макета – это исправление БАГОВ дизайнера. У меня, как правило, уходит на эту работу от 3 до 8 часов перед вёрсткой и примерно столько же в процессе. Все косяки показывать не буду, на видимой вами картинке они уже все исправлены. Это были и вылезающие куски одних слоёв: не до конца стёртые и в ненужных местах, на левой менюшке снизу были несостыковки вертикальных и горизонтальной линии, и многое другое. Фон background.gif Ну и как только мы разобрались с багами, тут же можно приступать к вёрстке. А точнее сделать первый шаг – вырезать фон. Ну не знаю даже, за что меня дизайнер так невзлюбила, что поставила на фон ТАКУЮ текстуру: кожа, причём оригинальная текстура была, видимо, без цикла (то есть если поставить рядом 2 куска такой текстуры, то между ними будет чёткая линия разреза). Для создания циклических (мостящихся без линий разреза) текстур есть несколько способов простого получения. Например: если текстура представляет собой любого типа узор, но не подкрашенный светом и тенью, то можно взять кусок текстуры и выставить рядом с ним квадратом ещё 3, каждый раз зеркально отображая новый кусок. Ещё один способ помогает с неконтрастным фоном. Есть и ещё способы, но главное понимать, что текстуру, имеющую ярко выраженную светотеневую картинку, и, при этом, довольно контрастную, сделать циклической практически невозможно, разве что ручками её дорисовывая. Но, как оказалось при довольно кропотливом подборе, представленный слева кусок неплохо мостится, давая практически невидимые линии разреза. Такой решено было и оставить. Анализ макета Продолжаем смотреть на макет и думать. Для начала посмотрим, как он ведёт себя по ширине. Сразу понятно, что макет у нас фиксированный по ширине, общая ширина всех частей макета, помимо фона, составляет 1200px, что ни как не влезет в 1000px (максимальная ширина сайта при разрешении 1024x768). Хотя с другой стороны весь контент в положенные 1000px прекрасно умещается. Значит первое, что мы делаем – выставляем центральную рамку шириной в 990px (меньше максимального на 10px для перестраховки). Центральная рамка выглядит так: les2.jpg Всё что находится в центре рамки, будет отображаться на 1024px и больше, а вот вне рамок на 1024 будет скрыто. Но при этом нужно, чтобы даже на 1024 горизонтальной полосы прокрутки не появилось. Для получения такого эффекта, используется следующий трюк, который можно использовать как готовое решение. Продолжение следует... |
|
08.07.2009, 18:17 | #2 |
|
Трюк: визуальное расширение макета
Для начала проанализируем наш макет. Центральная часть нам не важна. Просто факт, что она есть и ширина её 990px, остальное неважно, а вот края за ней намного интереснее. les3.jpg Наш макет, в зависимости от количества контента, может изменяться по высоте, но при этом зелёные области всегда будут оставаться в самом верху макета, синие в самом низу, а красные должны моститься, занимая всё доступное для них пространство. Итак, давайте возьмёмся за html. Непосредственно внутри body Пишем табличку: Код HTML:
<table id="pageouter" cellpadding="0" cellspacing="0"> <tr> <td class=”pagec”></td> <td id="pagesizer"><div></div></td> <td class=”pagec”></td> </tr> <tr> <td id="pagelt"><div></div></td> <td id="pageinner" rowspan="2"></td> <td id="pagert"><div></div></td> </tr> <tr> <td id="pagelb"><div></div></td> <td id="pagerb"><div></div></td> </tr> </table> Код:
+----------+------------------------------+-----------+ | .pagec | #pagesizer | .pagec | +----------+------------------------------+-----------+ | #pagelt | #pageinner | #pagert | +----------+ +-----------+ | #pagelb | | #pagerb | +----------+------------------------------+-----------+ Верхняя строчка на самом деле необязательна. Она нужна лишь затем, чтобы браузер ПРАВИЛЬНО рассчитал ширину столбцов ДО отображения содержимого. Стили будут такими: Код:
.pagec { width:50%; height:10px ) #pagesizer div { width: 990px height 10px; } Продолжение следует Последний раз редактировалось Асмодиан; 10.07.2009 в 14:48.. |
|
08.07.2009, 18:27 | #3 |
|
Часть таблицы #pageinner в данном случае пока неинтересна, её проработаем позднее Важно только то, что находящийся в ней контент будет раздвигать по высоте всю таблицу до нужных размеров. Самое важно сейчас заполнить блоки #pageXX. Особенность отображения таблиц с объединённой центральной ячейкой в разных браузерах заключается в том, что точную позицию линии раздела между верхней и нижней ячейками, каждый браузер выбирает по-своему. У одних она будет ровно по середине, у других максимально вверху, и указания размеров по высоте для этих ячеек ни к чему не приведут, их будут попросту игнорировать. Именно поэтому нельзя использовать подход в лоб, разбив по высоте таблицу не на 2, а на 3 ячейки поставив в них соответственно зелёную, красну и синюю часть макета (см рисунок вверху).
Первым делом нужно поставить красную (мостящуюся) часть. Для этого в фотошопе определяем высоту циклически повторяющегося участка боковинки и вырезаем её. Для того, чтобы определить цикличекую часть, нужно найти в узоре какой-нибудь запоминающийся элемент (например в данном случае это окончание вензеля, и найти повторение этого же элемента снизу или сверху. Пример показан на рисунке. Это левая боковинка. Справа она ограниченна контентной частью, а слева фоном страницы. Также вырезается и правая часть. les4.jpg В таблицу эта левая боковинка ставится следующим образом: Код:
#pagelt { background:url(images/pagel.gif) right bottom repeat-y; } #pagelb { background:url(images/pagel.gif) right top repeat-y; } Теперь верхние и нижние части боков сайта. В некоторых макетах их достаточно вырезать прямоугольными блоками (ровно как подкрашены на разметке) и поставить в боковые ячейки, но в данном случае у нас есть довольно контрастный мостящийся фон, который, разумеется, создаст линии среза (как показано на рисунке). les5.jpg Поэтому верхние и нижние части НЕ должны содержать вот этот узорчатый фон. Данная задача решается при помощи gif. Для того, чтобы правильно вырезать нижний левый угол боковинки, нужно выделить все элементы, из которых он состоит. Для этого ищем все нужные слои. На первый (первый найденный) слой Ctrl+Click в палитре слоёв, а на остальные Ctrl+Shift+Click. То есть алгоритм наший действий следующий: выбираем указатель: (V), убеждаемся, что на тулбаре стоит флажок “Auto-select: Leyers”, и щёлкаем на любой объект нашего уголка. На палитре слоёв выделяется нужный слой, на него Ctrl+Click. Видим, что выделен не весь угол, потому щёлкаем на любом элементе уголка ВНЕ выделения, выделяется слой, Ctrl+Shift+Click на нём, и так, пока выделенным не будет весь угол. Вот так: les6.jpg Продолжение следует... Последний раз редактировалось Асмодиан; 08.07.2009 в 21:38.. |
|
08.07.2009, 18:31 | #4 |
|
После выделение всех объектов уголка, нам нужно ограничить выделение нужным прямоугольником. Справа он ограничен центральной колонкой, снизу высотой всего макета (кроме фона) а сверху и справа лишь самим выделением (то есть всё должно помещаться в него). Поэтому используем инструмент выделение (M) в режиме Intersect (Shift+Alt), этим инструментом выделяем область, соответствующую прямоугольнику (#15) на картинке. Все лишние части выделения скроются. Если мы просто скопируем полученное (Ctrl+Shift+C), сохраним в gif и вставим в макет, то результат нас, как минимум, разочарует. Для успешного результата нужно:
pagelb.gif Возвращаемся к таблице. Дополняем стиль левого нижнего уголка: Код:
#pagelb { background:url(images/pagel.gif) right top repeat-y; vertical-align:bottom; } Пишем стиль Код:
#pagelb div { background:url(images/pagelb.gif) right top no-repeat; height:176px; } les7.jpg Также требуется модифицировать html таблицы, изменив: Код:
<td id="pagelt"><div></div></td> Код:
<td id="pagelt"><div class=”top”></div><div class=”bottom”></div></td> Код:
<td id="pagert"><div></div></td> Код:
<td id="pagert"><div class=”top”></div><div class=”bottom”></div></td> Код:
#pagelt { background:url(../images/pageleft.gif) right bottom repeat-y; vertical-align:top; } #pagelt .top { background:url(../images/pagelt.jpg) right top no-repeat; height:462px; } #pagelt .bottom { background:url(../images/pagelt.gif) right top no-repeat; height:33px; } #pagelb { background:url(../images/pageleft.gif) right top repeat-y; vertical-align:bottom; } #pagelb div { background:url(../images/pagelb.gif) right top no-repeat; height:176px; } #pagert { background:url(../images/pageright.gif) left bottom repeat-y; vertical-align:top; } #pagert .top { background:url(../images/pagert.jpg) left top no-repeat; height:383px; } #pagert .bottom { background:url(../images/pagert.gif) left top no-repeat; height:158px; } #pagerb { background:url(../images/pageright.gif) left top repeat-y; vertical-align:bottom; width:50%; } #pagerb div { background:url(../images/pagerb.gif) left top no-repeat; height:191px; } Продолжение следует... Последний раз редактировалось Асмодиан; 08.07.2009 в 21:52.. |
|
08.07.2009, 21:15 | #5 |
|
много нашел интересного для себя, большое спасибо!!!
|
|
08.07.2009, 21:25 | #6 |
|
Продолжение завтра
|
|
08.07.2009, 21:38 | #7 |
|
Makarenya, замечательная статья. Я даже до некоторых приемов тобой описаных сам додумался, не такой я глупый как думал
P.S. Завтра когда выкладывать продолжение, если можно размести его поверх наших сообщений. P.P.S я понимаю что сказал вещь которая, так сказать, подразумевается по умолчанию )) Последний раз редактировалось sokol666; 08.07.2009 в 21:40.. Причина: Проклятый Т9 |
|
09.07.2009, 16:52 | #8 |
|
Теперь центральная часть. В целом её можно разделить на 4 важные составляющие: шапка (всё что сверху), контент (светлая область посредине), верхнее меню, боковое меню. Важно сразу определить, как какой блок будет себя вести при уменьшении/увеличении высоты своего содержимого, а также в случае с контентом и боковым меню, что делать, когда одно выше другого и наоборот. Данный макет довольно прост, поэтому правил поведения немного:
Верхнее меню: Для удобства, а также для минимизации результативного веса сайта, верхнее меню мы будем накладывать СВЕРХУ на шапку, и вообще сделаем это уже вместе с проработкой контента. Потому скрываем все надписи на верхнем меню и на время про него забываем. Левое меню: поскольку предполагается, что при небольшом размере левого меню и большой контентной области, под левым меню будет идти фон, то требуется этот фон получить, поэтому для начала работы, скрываем всё левое меню. Контентная часть: Всегда растягивается вслед за страницей, под ней не может образоваться фона, и поэтому её можно вставить непосредственно в дизайн всей страницы. После скрытия всего ненужного (текста верхней менюшки, всей левой менюшки), разбиваем макет на 3 slice-а, как показано не рисунке: les8.jpg Верхний слайс – это не только шапка, но также вся часть сайта, которая остаётся фиксировано верху. Нижний – вся нижняя часть, а посередине мостящийся фон. Поскольку фон очень однороден и неконтрастен, то заботиться о поисках цикличности не стоит. Довольно высокий кусок был сделан для того, чтобы уменьшить вероятность явной цикличности (этот эффект возникает тогда, когда на фоне присутствует некая неоднородность вроде светлого пятна, которая при замостке повторяется через равные промежутки - смотрится отвратительно). Далее Save for web and devices, сохраняем ТОЛЬКО эти слайсы (перед сохранением, в окне «for web and devices» выделяем Shif+Click эти слайсы), а в диалоге сохранения Save As type: Images Only, Slices: Selected Slices. Такими большими кусками мы сохраняем не случайно. Дело в том, что размер jpg-файла увеличивается логарифмически от количества пикселей, и вес одного jpg будет всегда меньше, чем 2-х его кусков, сохранённых в jpg с темже качеством. Теперь html. Строчку Код:
<td id="pageinner" rowspan="2"></td> Код:
<td id="pageinner" rowspan="2"><div id="pagebottom"><div id="pagetop"> </div></div></td> Код:
#pageinner { background:url(../images/contentbackground.gif) left top repeat-y; } Код:
#pagebottom { background:url(../images/footer.jpg) left bottom no-repeat; } Код:
#pagetop { background:url(../images/header.jpg) left top no-repeat; } Для того чтобы посмотреть результат, нужно добавить временную растяжку: Код:
<td id="pageinner" rowspan="2"><div id="pagebottom"><div id="pagetop"> <p> </p> <p> </p> … <p> </p> </div></div></td> les9.jpg Удаляем растяжку, и переходим к верхнему меню. Продолжение следует... |
|
Этот пользователь сказал спасибо Асмодиан за это полезное сообщение: | Wir2al (03.05.2010) |
09.07.2009, 17:09 | #9 |
|
Верхнее меню
les10.jpg Одного взгляда на верхнее меню достаточно, чтобы понять: сделать его этически красиво невозможно, так как шрифт меню нестандартен, да ещё и с градиентом, ролловер применяется на фон пункта, но крайние пункты не прямоугольные. Можно либо приблизится к этическим нормам, потеряв на этом пару часов времени, либо «нарезать всё большими кусочками». На последнем и остановимся. Используя обычные слайсы и SFW&D, разрежем меню по пунктикам сначала со светлой подложкой, затем с тёмной. Вот подборка: les11.jpg HTML - код у меню будет таков: Код HTML:
<ul id="mainmenu"> <li><a href="#"><img src="images/menuitem1.gif" rsrc="images/menuitem1_ro.gif" alt="Главная" /></a></li> <li><a href="#"><img src="images/menuitem2.gif" rsrc="images/menuitem2_ro.gif" alt="Мои достижения" /></a></li> <li><a href="#"><img src="images/menuitem3.gif" rsrc="images/menuitem3_ro.gif" alt="Об услугах" /></a></li> <li><a href="#"><img src="images/menuitem4.gif" rsrc="images/menuitem4_ro.gif" alt="Свадебный маникюр" /></a></li> <li><a href="#"><img src="images/menuitem5.gif" rsrc="images/menuitem5_ro.gif" alt="Цены" /></a></li> <li><a href="#"><img src="images/menuitem6.gif" rsrc="images/menuitem6_ro.gif" alt="Контакты" /></a></li> <li><a href="#"><img src="images/menuitem7.gif" rsrc="images/menuitem7_ro.gif" alt="Гостевая книга" /></a></li> </ul> Стили для менюшки такие: Код:
#mainmenu, #mainmenu li { height:41px; float:left; display:inline; list-style-image:none; list-style-type:none; padding:0px; } #mainmenu { margin:0px 0px 399px 75px; } Rev2: забыл упомянуть о margin-е для mainmenu: Подобные отступы удобно вымерять следующими способами: - Использовать Slice-ы в фотошопе. Когда щёлкаешь дважды по слайсу, можно увидеть его размер в пикселях. Такчто просто. Рисуем слайс ил левого верхнего угла центральной колонки к левому верхнему углу нашей менюшки и смотрим его размеры. Его ширина есть margin-left его высота есть margin-top. - Далеко не всега подобный способ отрабатывает, и если вам уж приходится подбирать ручками циферьки, то лучше это делать при помощи IE Dev Tolbar али FireBug... меняя циферьки у маргина до тех пор, пока двигаемый кусок не встанет пиксель в пиксель. А делее готовые циферьки копируем в css Верхнее меню готово. Продолжение следует... Последний раз редактировалось Асмодиан; 09.07.2009 в 17:47.. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Практические советы по вёрстке | Асмодиан | HTML, CSS, JavaScript | 99 | 08.06.2018 02:32 |
Посоветуйте учебник по вёрстке | Nielson | HTML, CSS, JavaScript | 25 | 18.06.2009 23:42 |
Урок: огненный шар | Mortis | Библиотека | 14 | 16.12.2008 17:56 |
Книги по вёрстке... | AceLightning | Библиотека | 17 | 08.07.2008 18:08 |
Вот создал урок | Sehnsucht | Растровая графика | 5 | 03.11.2003 17:01 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|