Websovet - Полезные советы

Websovet

суббота, 28 июля 2007 г.

Как относиться к левым предложениям?


Каюсь, давно не постил новых уроков. И в этот раз тож тема не совсем о дизайне или CSS. Хотя скоро все будет! ;)

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

Во-вторых, сдается мне, что в данном (моем) случае, ребятки хотят на халяву заполучить готовый сайт. Потому как в "конкурсном задании" изложили следующие требования:
"…Тестовое Задание:
Изготовить промосайт или промостраницу для деловой игры (информация для
наполнения и логотип прилагется в файлах).
Сайт (страница) должны включать в себя форму для регистрации желающих
принять участие в игре со следующими полями:
*Ф.И.О. участника
*E-mail участника
Название организации
*Желаемая дата участия в игре
Комментарии
Скрипт отправления почты выполнить на Perl или PHP.
Сделать баннер-кнопку для игры размером 88х31 пиксель.
Результат выполнения:
Кандидат должен представить:
Дизайн-макет в формате Adobe Photoshop
Сверстанный сайт (страницу)
Скрипт отправления почты
Баннер-кнопку…

Чесслово, так и подмывало отписать заказчику с требованием оплатить аванец, да думаю, что вряд ли ответили бы. :)

среда, 18 июля 2007 г.

Оформление кода css

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

На самом деле аккуратность и красивость нужна вовсе не для крутости какой-либо. Как говорят автомеханики: "На скорость не влияет и ладно!" Это нужно, прежде всего, вам самим, чтобы при необходимости впоследствии что-либо поправить, вы не заплутали в собственных правилах.

Итак начнем.

Комментарии.
Комменты — это вспомогательная информация для разработчика css. Они не читаются браузерами, и в них можно заносить любой текст. Достигается это путем оформления комментов специальными знаками:

/* комментарий тут */

Комменты структурируют лист стилей. Поделив css на разделы, можно потом легко найти нужный кусок правил. Обычно порядок следования разделов следующий:

/* Данный лист стилей создал Я — Великий и Ужасный Пивной Маньйаг. great-ass@mail.tu */

/*body*/

/*header*/

.............

/*footer*/

Размер шрифта.
Никогда не указывайте размер шрифта в пикселах! На ваш сайт заходят не только молодые и востроглазые, но и люди с ослабленным зрением. И если вы жестко задали размер в 6px, то потеряете кучу посетителей, которые не смогут увеличить изображение в своем браузере. Самое оптимальное — это указание размеров в % или в em. Данная единица показывает размер относительно основного размера шрифта на странице (по умолчанию выбранного браузером). Например запись 1em означает тот же самый размер, а 0.5em (можно записывать без нуля — .5em), ровно вполовину меньше. Соответственно 2em будет в два раза больше. Тут можно легко варьировать размеры, изменяя значения десятых долей: 1.2, 1.3, 1.4 и т.д.

Столбик или строка.
Это зависит только от ваших личных предпочтений. Кто-то пишет правило в строку:

p {color: #000; font: 120% Verdana, sans-serif;}

А кто-то в столбик:

p {
color: #000;
font: 120% Verdana, sans-serif;
}


Моя имха — в столбик куда удобнее, так как более наглядно. Ну а в строку выходит компактнее. Выбирать вам. :)

Лишние DIVы.
В статье о блочной верстке веб-страниц я уже упоминал об этом. Не стоит лепить кучу тэгов div только для того, чтобы оформить каждый элемент страницы. Зачастую правила листа стилей можно прицепить к уже имеющимся тэгам a, h1, ul, ol, li, img и т.д.
Например, чтобы задать правила для списка, мы в листе стилей напишем что-то вроде этого:

#menu ul {
list-style: disc;
margin: 10px 50px;
padding: 5px;
}


А на самой html-странице напишем так:

<div id="menu">
<ul>
<li>О нам</li>
<li>О вам</li>
</ul>
</div>


Но это есть тавтология. Правильно будет избавиться от лишнего DIVа и записать просто:
(в листе стилей):
.menu {
list-style: disc;
margin: 10px 50px;
padding: 5px;
}


(на странице):

<ul class="menu">
<ul>
<li>О нам</li>
<li>О вам</li>
</ul>
</div>


Как видим, в css мы представили менюшку как класс, а потом прицепили этот класс непосредственно к тэгу списка (ul) в html-странице.

Повторы не нужны.
Если вы в самом начале листа стилей указали общее для всех правило, например:

* {
margin: 0;
padding: 0;
border: 0;
}


то вовсе ни к чему потом повторять эти же правила в каждом элементе заново. То есть, если вы пишете правило для картинок (тэг img), то к нему не нужно приписывать значение border:0, у вас это УЖЕ есть. :)

Эт все. В следующей статейке как раз и поговорим об оформлении силами css всяческих картинок.
Enjoy!

среда, 4 июля 2007 г.

Псевдо-облако тэгов.


Псевдо — потому как является не настоящей кучей ссылок, а лишь как элемент оформления страницы. Для чего? Шрифт — на самом деле очень сильное изобразительное средство. Его можно использовать не только для абзацев и заголовков, но и как некий орнамент.
Вот, например, на сайте Летающих Парасенгов данный подход разбавил массу текста лучше всяких картинок. Причем здесь это псевдо-облако несет двойную нагрузку: оно во-первых, используется как декорация, а во-вторых, на каждой странице свой набор слов — так или иначе связанных с темой на данной странице.

Хочу сразу предупредить, что это не картинка! Для создания такого псевдо-облака мы используем все тот же лист стилей CSS и нейтральный тэг span, о котором я упоминал в предыдущей статье.

Начнем с листа стилей css. Выделим наше "облако" в отдельный блок и назовем, к примеру, cloud. Запишем в листе следующее правило:

#cloud {
border: 1px solid #ccc;
width: 150px;
height: 640px;
margin: 10px 5px 0 0;
padding: 5px;
float: right;
}

Здесь мы задали размеры нашего блока, тонкую светло-серую рамку в 1 пиксель, отступы — сверху 10 пикселей, справа — 5, снизу и слева по нулям. Поля со всех сторон по 5 пикселей. Кто забыл, напомню, что отступы (margin) — для промежутков между блоками, а поля (padding) — для того, чтобы внутреннее содержание блока (текст) не "лепилось" к границам рамки. Самое нижнее правило говорит о том, что блок располагается на странице справа, а текст (либо другой блок) будет обтекать его слева соответственно.

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

.s1 {
font: .9em Verdana, sans-serif;
color: #f63;
}

.s2 {
font: 1.2em Verdana, sans-serif;
color: #f96;
}

.s3 {
font: 1.5em Verdana, sans-serif;
color: #fc3;
}

.s4 {
font: 1.8em Verdana, sans-serif;
color: #fc6;
}

.s5 {
font: 2em Verdana, sans-serif;
color: #f90;
}

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

А посему смело открываем нашу Самаглавную страницу, куда станем лепить это псевдо-облако, и в нужном месте добавим следующий код:

<div id="cloud">
<span class="s3">В одном</span> <span class="s2"> славном</span> <span class="s4">Месте</span> <span class="s2">жил себе на</span> <span class="s5">радость</span> <span class="s3">один </span>
<span class="s1">замечательный парасенаг</span> <span class="s2">по имени</span> <span class="s4">Питачог</span> <span class="s1">из рода</span> <span class="s3">Питачогов.</span>
<span class="s5">Атец</span> <span class="s2">его был</span> <span class="s3">Питачогом,</span>
<span class="s2">и атец ацца его</span> <span class="s3">тоже был</span> <span class="s3">Питачогом…</span>
</div>

Вначале пестрит в глазах от горки тэгов span. Но если присмотреться, то все просто: мы каждому слову (иногда и двум зараз) прицепили этот самый span с выбранным классом s. Зачем это нужно? Дело в том, что у нас слова не принадлежат какому-либо абзацу. Поэтому выбранный класс надо как-то прицепить к нужному слову. Вот для этого мы и используем нейтральный тэг span, открывая его перед словом, и закрывая за ним. Причем в открывающем тэге делаем запись, к какому классу он принадлежит — s1, s2 и т.д.

Пару замечаний напоследок:

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

2. В классах s1, s2 и др. можно заметить, что у всех одно и то же семейство шрифтов. Получается, что можно сократить запись правил для них, например так:

.s1, .s2, .s3, .s4, .s5 {
font-family: Verdana, sans-serif;
}

.s1 {
font-size: .9em;
color: #f63;
}
....
и так далее.

Дирзайте! :)

понедельник, 2 июля 2007 г.

Ролловер-меню средствами CSS

menu
Вот такое симпатичное меню мы сейчас станем делать. Если вы уже пытались что-то подобное изобразить в визуальном редакторе, то заметили, что там все построено на заковыристом Java-скрипте и выглядит просто устрашающе. Мы же используем всего парочку картинок-заготовок, обычный немаркированный список и немножко css. :)

Для начала нарисуем две картинки:



Это две части одной закладки меню. Правая делается такой длины, чтобы при выбранном размере шрифта, на картинке помещалось самое длинное слово из всего списка разделов. Ну, например, "супермегакулфорумблинваще!". Каждая из картинок состоит из двух частей, одна под другой. Верхняя часть — исходное состояние, нижняя — при наведении мышки. Принцип довольно простой и изячный: в листе стилей мы зададим разным состояниям различные координаты отображения. То есть, картинка загружается вся целиком, но на странице мы изначально видим только верхнюю чать. Когда мы подводим к кнопке мыша, то как бы "выскакивает" нижняя часть.

Такой подход гораздо лучше, чем раздельные картинки, как при классическом ролловере. Особенно когда разделов немало — все картинки не успевают загрузиться сразу и выглядит это весьма некрасиво. А тут у нас всего две маленькие картиночки, и причем на все меню разом, независимо от количества разделов. Очень удобно.

Небольшое замечание: высота обоих картинок — число четное. Это понятно — верхняя и нижняя половинки должны быть одного размера.

Наше меню мы обозвали тэгом tabs, хотя можно было бы и menu. Это не столь важно. Лишь бы название было осмысленным, чтобы самому потом не заплутать в коде. В листе стилей запишем следующий код:

#tabs {
width: 860px;
height: 39px;
margin: 0 auto;
background: #69c;
font: 90% "Comic Sans MS", Verdana, Arial, sans-serif;
line-height: 1.8em;
clear: both;
}

#tabs ul {
padding: 5px 10px 0 30px;
list-style: none;
}

#tabs li {
display:inline;
}

#tabs a {
float: left;
background: url(images/tableft.gif) no-repeat left top;
padding: 0 0 0 4px;
}

#tabs a span {
float: left;
background: url(images/tabright.gif) no-repeat right top;
padding: 4px 20px 5px 10px;
color: #fff;
}

#tabs a:hover span {
color: #FF9834;
}

#tabs a:hover {
background-position: 0% -42px;
}

#tabs a:hover span {
background-position: 100% -42px;
}

#tabs li.active {
float: left;
color: #FF9834;
background: url(images/tableft.gif) no-repeat left top;
background-position: 0% -42px;
padding: 0 0 0 4px;
}

#tabs li.active span {
float: left;
background: url(images/tabright.gif) no-repeat right top;
padding: 4px 20px 5px 10px;
background-position: 100% -42px;
}

Здесь мы сразу задали блоку меню ширину в 860 пикселей, высоту в 39px, автовыравнивание по центру монитора, синий фон, семейство шрифтов, и очистку с обоих сторон, чтобы ни справа, ни слева больше ничего лишнего не повылезало.
Дальше задали списку ul поля и запретили отображение маркеров. Поэтому список у нас и называется немаркированным.

Далее мы указали пунктам списка li расположение "в линию", иначе по-умолчанию браузеры всегда располагают их в столбик.

А вот следующие два правила весьма интересны. В обоих указаны стили для отображения ссылок a, но во втором появилось странное слово span. Зачем это? Дело в том, что нам нужно привязать наши изображения кнопок к тэгам в виде фона. В данном случае тэг у нас один — <a>. Привязывать фон можно только к стартовому тэгу. К </a> уже ничего не привяжешь. Поэтому мы и ввели дополнительный тэг span. Его еще называют нейтральным, потому как он может быть использован везде и сам по себе не несет какой либо значимой нагрузки, как например тэг ссылки или абзаца.

Таким образом, мы привязали первую картинку (как фон) к тэгу a, а вторую к span. Причем для первой указали расположение слева вверху и запретили ей повторяться, а второй — справа вверху, и тоже без повтора. Поля тоже заданы не абы как. Сначала мы показали левой картинке отступить от левого края на 4 пиксела, то есть как раз на ширину картинки. Если этого не сделать, то правая картинка, которая заведомо шире, просто "съест" левую, потому что названия разделов у нас все-таки не очень длинные. Что касается полей для правой картинки, то мы их задали такими, чтобы справа от имени раздела оставалось столько же пространства, сколько и слева (а иначе браузер "подожмет" слово под обрез). Вобщем экспериментируйте и увидите. :)

Для ссылок задали белый цвет (белый на зеленом — абажаю просто!). А для активных — оранжевый на белом.

Следующие два правила как раз приказывают нашим картинкам спрятать верх и показать низ при наведении на них мышкой. Для левой картинки мы указали позицию в 0% (то есть крайнее левое положение) и минус 42 пикселя. Помните про четный размер высоты картинки? Мы просто "отняли" у нее верхнюю часть. А так как картинка изначально загружена на страницу полностью, то она и покажет нам нижнюю часть. Для правой картинки мы указали, соответственно, 100% позицию (крайнюю справа) и тоже -42 пиксела.
Возникает вопрос: почему мы сразу не видим на странице целые картинки? А потому, что в самом начале для нашего блока менюшек мы задали высоту всего в 39 пикселей (можно и 42, но так как браузеры по разному считают отступы, то мы чуток перестраховались).
Все просто! :)

Два других правила мы написали для активного раздела. Это тоже понятно — активный раздел не должен быть ссылкой, но должен ясно показывать, что он в данный момент активен. То есть выглядеть так, словно на ссылку навели мышку. Тут мы тоже указываем картинкам хитро выглядывать нижней частью, но пристегнули их уже не к тэгам ссылок, а к тэгам строк списка — li.

Не забываем везде указывать обтекание слева — (float: left;). Иначе глюки неизбежны.

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

Такой хак можно вписать в основной лист стилей, а можно пристегнуть отдельным листом, дав на него соответствующую ссылку. Мы так и поступим, и пристегнем к странице еще один css, обозвав его просто ie.css. В нем мы запишем следующее:

#tabs a span {
padding: 4px 20px 4px 10px;
}

#tabs li.active span {
padding: 4px 20px 4px 10px;
}

Как видите, в отличие от основного листа, здесь мы указали нижнее поле на один пиксель меньше (4 вместо 5). Вот и вся трабла.

Ну и наконец код самой страницы (тут только менюха, все остальные, положенные для страницы тэги, опущены):

<div id="tabs">
<ul>
<li><a href="#" title="Главная"><span>Главная</span></a></li>
<li><a href="#" title="Факты"><span>Факты</span></a></li>
<li><a href="#" title="Байки"><span>Байки</span></a></li>
<li><a href="#" title="Классика"><span>Классика</span></a></li>
<li><a href="#" title="О летучести"><span>О летучести</span></a></li>
</ul>
</div>

Действующее меню можно посмотреть здесь: Pigfly

Enjoy! :)

воскресенье, 1 июля 2007 г.

HTML и CSS - с чего начать?

Эдакое лирическое отступление. :)

Когда я верстал свою первую Баечку, то не мудрствуя лукаво установил на компе визуальный редактор от Макромедии под названием Дримвьювер МХ и понеслась родимая! Правда при этом я краем глаза почитывал е-бук по данной проге от Володи Дронова (за что ему пламеный респект). Для первого знакомства с html эта прога подходит как нельзя лучше. Можно открыть сразу два окна: визуальное представление будущей страницы и она же в виде кода. Рисуя таблицы или вставляя ссылки, сразу видишь, как это выглядит в html. Хотя надо признать, что Дримвьювер добавляет в код много лишнего (впрочем намного меньше, чем другие проги подобного рода).

Почему не сразу Блокнот или WordPad? Помнится как-то зашел у меня разговор с одной знакомой, изучавшей html в институте, о том, чем верстать сайт. Знакомая, задрав нос заявила, что не признает ничего кроме Блокнота и ваще ратует за чистоту стиля. Звучит, конечно же, круто, но делу мало помогает. Если человек только начинает изучение верстки сайтов, то ковыряться сразу же в малопонятном коде — занятие не самое интересное. Зато когда удается собрать в редакторе свою первую страницу, да еще при этом вдоволь побороться со множеством странностей того же Дримвьювера, то счастью вашему таки не будет предела! :)

Как я уже упоминал, любой визуальный редактор добавляет много излишнего кода. И если со всякими Java-скриптами (а они будут! И откуда чего берется?) лучше не связываться поначалу, то поправить в полученном коде какие-нибудь стили - весьма просто и даже надо. Часто бывает так, что выбрав какой-то шрифт, мы потом меняем его на другой. И вот тут Дримвьювер часто делает такие фишки примерно:

"... <font style21><font style25><p>Тут у меня как бы абзац, набранный шрифтом Таймс, но почему-то потом превратившийся в Вердану</p></font></font>..."

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

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

Внимательно присмотревшись к тому, как визуальный редактор "пристегивает" стиль отображения шрифта к разным абзацам, можно заметить, что код часто просто повторяется. Логично предположить, что можно где-то на странице указать данный стиль всего лишь ОДИН раз, а потом в нужных местах (например в начале всех абзацев) дать на него что-то вроде ссылки. Таким образом и код уменьшится, и сама страничка соответственно полегчает. Вот тут как раз в игру и вступают каскадные таблицы стилей - CSS. В них можно прописать для любого элемента страницы — будь то хоть абзац, хоть картинка — необходимый стиль отображения. И там, где на странице будет попадаться данный элемент, к нему автоматом применится этот стиль.

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

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

Ломов А. "Самоучитель HTML, CSS, скрипты: практика создания сайтов (+CD)"

Расс Уикли. "Освой самостоятельно CSS. 10 минут на урок"


В этих двух книгах достаточно просто и доходчиво разъясняются принципы верстки. И если у Р. Уикли брошюрка чисто по css, то у Артемия Ломова очень качественно и леххко описаны как сами спецификации html и css, так и различные способы верстки сайта - табличный, блочный и т.д. Рекомендую.