У меня на сайте случилось знаменательное событие! Каждый год, когда я меняю дизайн сайта, я обычно не успеваю к самопридуманному дедлайну и делаю это только для морды и страниц блога. Всякие же /soft/
, /forum/
и прочий /about/
остается "на потом". Такими темпами у меня до недавнего времени скопилось аж три разных набора стилей. И вот в прошедшие выходные я наконец разобрался с этими двухлетними хвостами. Теперь у меня все одинаково выглядит и однотипно сверстано. Также все стало гораздо проще, и я наконец удалил хаки из Джанго-кода для поддержки этого безобразия. Вау!
Но речь не об этом. Побочным продуктом этого редизайна стала реорганизация CSS-файла, отвечающего за шрифты. Получившийся подход кажется мне довольно интересным, и я хочу поделиться.
Итак, мой нынешний fonts.css выглядит так (почти полностью, без правил для раскраски синтаксиса):
/* Body fonts */
body,
th,
address,
cite {
font: normal medium Trebuchet MS, Tahoma, sans-serif;
}
.about #text address {
font: bold 100% Trebuchet MS, Tahoma, sans-serif;
}
small,
.blog #recentcomments .text,
.forum#article_deleted_list td,
.forum#spam_queue td,
.about #author p,
.soft #beta,
.sanestat td {
font: normal 85% Trebuchet MS, Tahoma, sans-serif;
}
/* Header fonts */
h1 {
font: normal 200% Georgia, serif; text-transform: uppercase;
}
h2 {
font: normal 150% Georgia, serif; text-transform: uppercase;
}
h3,
.blog#index h2,
.forum#index h2,
.sanestat h2,
.sanestat caption,
.usertext .strong strong,
.soft #download_link {
font: normal 125% Georgia, serif; text-transform: uppercase;
}
h4 {
font: normal 110% Georgia, serif; text-transform: uppercase;
}
h5,
.usertext caption,
.blog#index h3 {
font: normal 100% Georgia, serif; text-transform: uppercase;
}
Прокомментировать я хочу две вещи.
Группировка
Про первую я когда-то тут уже писал, но вскользь, поэтому повторюсь. Как видно, я довольно нетрадиционно группирую правила: не по блокам, к которым они применяются, а по "фичам". У меня есть отдельные файлы для цветов, шрифтов, раскладки блоков и спецэффектов. В цветах, например, существует одно правило, устанавливающее цвет "#600", к которому цепляются все селекторы, к которым это цвет относится. В раскладке есть такое же одно правило, задающее верхний и нижний margin'ы в 1em, к которому прицеплено десятка два селекторов.
Делается это все для единообразия. Стилизуя очередной блок, мне не приходится вспоминать, какие у меня в этом дизайне приняты правила, и как они реализуются, я обычно просто подпихиваю новые селекторы к уже существующим правилам.
Впрочем, я очень осторожно рекомендую этот подход кому бы то ни было еще, потому что избавляя от одних проблем, он рождает свои. Просто для меня лично эти проблемы выглядят проще.
Шрифты
Тем не менее, то, что получилось у меня со шрифтами, мне действительно нравится. Раньше я разделял шрифтовые правила на более мелкие — размер, жирность, гарнитура. И в процессе подцепления новых элементов к существующим правилам ничто не мешало мне комбинировать любые из описанных размеров, гарнитур и жирностей. Приводило это к тому, что на сайте могло встречаться очень много разных стихийно сложившихся начертаний (6 размеров * 3 стиля * 2 гарнитуры — уже 36 %-) ).
Теперь же я в одном правиле задаю все начертание целиком. И получаю такие выгоды:
- пропадает бардак
- есть компактная карта всех шрифтов на сайте
- можно использовать вкусное компактное свойство
font
вместо разрозненныхfont-size
,font-weight
и т.д.
Вот, кстати, видно, что второе по счету правило про .about #text address
используется всего для одного элемента на сайте, и возможно его стоит заменить на что-то более подходящее.
Ну как?
Комментарии: 11
Хорошо причесал! Осталось сделать еще свой css framework ;-)
Очень удобно для человека с хорошей логикой. А как к этому относятся дизайнеры/верстальщики?
А это вообще стоит подчеркнуть особенно :) Может быть даже отдельным постом в будущем?
Ну, лично мне этот "нетрадиционный" подход пришёлся однозначно по душе, в чём можно убедиться здесь: http://powerman.name/css/styles.css
Разумеется, я тоже не дизайнер, а программист. :)
P.S. "Порадовала" реакция на нажатие кнопки "Отправить". Некоторое время мы думаем, типа выполняем какие-то запросы, а потом ... ничего не происходит. Заполнены все поля (Url/Имя/Email/Сайт). Сейчас url уберу, попробую отправить без OpenID. :(
Я бы в такой ситуации воспользовался глобальными модификаторами (например, .small).
Да там писать особенно не о чем. 4 мая я отмечаю День Рождения блога, поэтому редизайн надо успевать именно к этому дню. Мир не обрушится, если не успею, но будет обидно :-)
Вот! Вот про это я хочу (опять таки уже года два как) написать отдельную статью, за которую, боюсь, меня будут возненавидит большинство профессиональных верстальщиков :-). Потому что по сути это неправильно. Такой подход ставит разметку в зависимость от стиля: раз мелкий шрифт диктуется чаще всего только текущим дизайном, а не структурой или семантикой документа, то наличие
class="small"
в HTML-файле не имеет ничего общего с самим HTML'ом, а нужно только потому, что он ожидает быть отстилизованным конкретным CSS'ом. И эта вторая — обратная — зависимость (в дополнение к прямой естественной зависимости CSS'а от структуры документа, который он стилизует) убивает то самое разделение контента и оформления, ради которого вся эта бодяга придумывалась. Другой вопрос, что это не обязательно фатально для результата, и там куча нюансов. Поэтому я все еще хочу написать эту статью :-)Если Trebuchet MS написан для BODY, то я не вижу смысла повторять его в последующих правилах. Да и просто просится вот такая запись: H1,H2,H3,H4,H5 { text-transform:uppercase; } В общем, мне кажется, что присутствует нерациональная увлечённость краткой записью свойства font.
Ну а составные семейства шрифтов нужно брать в кавычки.
Смысл есть. До того, как я пришел к такому стилю, у меня были как раз два отдельных правила для
font-family
. И если я добавляю новый элемент, который мне хочется сделать, скажем, размером 150%, я цепляю его к этому размеру. Но он получается 150% Trebuchet, хотя больше на сайте у меня такого начертания нет. Откуда мне помнить через месяц-другой, что 150% у меня должно сочетаться только с заголовочным шрифтом? Вот для этого я и пришел к тому, что все начертания выписаны явно. Даже с повторениями.Интересно, что до самого момента написания поста у меня все эти начертания были написаны полностью, со всеми
font-familty
,font-size
,font-weight
иfont-style
. Только потом я вдруг вспомнил проfont
. Так что, догадка неверна :-)Спецификация не настаивает. Проблем с интероперабельностью тоже не возникает (насколько я знаю). А стилистически мне так нравится больше.
А мне кажется, что всё-таки настаивает:
В любом случае, в сокращённой записи пробел является служебным символом.
Возможно, это какие-то индивидуальные сложности ) Я же наоборот за несколько лет содержания и рекодинга своего сайта пришёл к таким правилам:
Т.е. указывается глобальное семейство, глобальный размер шрифта, а дальше два раза уточняются частности: для заголовков и для примеров кода.
Если уж заниматься буквоедством... :-) "Should" — это не "must". То есть опускание кавычек допускается, если "there may exist valid reasons in particular circumstances to ignore a particular item". Свои valid reasons я привел. Больше того, в спецификации CSS ровно за этим абзацем четко описано, что происходит, если кавычки опущены:
Меня это полностью устраивает :-).
О, да! Я описываю это исключительно с позиции "а мне вот так удобно оказалось". Я хорошо понимаю, что это не для всех.
Мне все-таки обычная логика формирования CSS файла больше импонирует.
Хотя мне и самому надо бы причесать весь css-зоопарк у себя на сайте.
А может, вместо
лучше использовать
?