У меня на сайте случилось знаменательное событие! Каждый год, когда я меняю дизайн сайта, я обычно не успеваю к самопридуманному дедлайну и делаю это только для морды и страниц блога. Всякие же /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 %-) ).

Теперь же я в одном правиле задаю все начертание целиком. И получаю такие выгоды:

Вот, кстати, видно, что второе по счету правило про .about #text address используется всего для одного элемента на сайте, и возможно его стоит заменить на что-то более подходящее.

Ну как?

Комментарии: 11

  1. dobrych

    Хорошо причесал! Осталось сделать еще свой css framework ;-)

  2. Maximbo

    Очень удобно для человека с хорошей логикой. А как к этому относятся дизайнеры/верстальщики?

    самопридуманному дедлайну

    А это вообще стоит подчеркнуть особенно :) Может быть даже отдельным постом в будущем?

  3. Alex Efros

    Ну, лично мне этот "нетрадиционный" подход пришёлся однозначно по душе, в чём можно убедиться здесь: http://powerman.name/css/styles.css

    Разумеется, я тоже не дизайнер, а программист. :)

    P.S. "Порадовала" реакция на нажатие кнопки "Отправить". Некоторое время мы думаем, типа выполняем какие-то запросы, а потом ... ничего не происходит. Заполнены все поля (Url/Имя/Email/Сайт). Сейчас url уберу, попробую отправить без OpenID. :(

  4. Азат Разетдинов

    Я бы в такой ситуации воспользовался глобальными модификаторами (например, .small).

  5. Иван Сагалаев

    самопридуманному дедлайну

    А это вообще стоит подчеркнуть особенно :) Может быть даже отдельным постом в будущем?

    Да там писать особенно не о чем. 4 мая я отмечаю День Рождения блога, поэтому редизайн надо успевать именно к этому дню. Мир не обрушится, если не успею, но будет обидно :-)

    Я бы в такой ситуации воспользовался глобальными модификаторами (например, .small).

    Вот! Вот про это я хочу (опять таки уже года два как) написать отдельную статью, за которую, боюсь, меня будут возненавидит большинство профессиональных верстальщиков :-). Потому что по сути это неправильно. Такой подход ставит разметку в зависимость от стиля: раз мелкий шрифт диктуется чаще всего только текущим дизайном, а не структурой или семантикой документа, то наличие class="small" в HTML-файле не имеет ничего общего с самим HTML'ом, а нужно только потому, что он ожидает быть отстилизованным конкретным CSS'ом. И эта вторая — обратная — зависимость (в дополнение к прямой естественной зависимости CSS'а от структуры документа, который он стилизует) убивает то самое разделение контента и оформления, ради которого вся эта бодяга придумывалась. Другой вопрос, что это не обязательно фатально для результата, и там куча нюансов. Поэтому я все еще хочу написать эту статью :-)

  6. pepelsbey

    Если Trebuchet MS написан для BODY, то я не вижу смысла повторять его в последующих правилах. Да и просто просится вот такая запись: H1,H2,H3,H4,H5 { text-transform:uppercase; } В общем, мне кажется, что присутствует нерациональная увлечённость краткой записью свойства font.

    Ну а составные семейства шрифтов нужно брать в кавычки.

  7. Иван Сагалаев

    Если Trebuchet MS написан для BODY, то я не вижу смысла повторять его в последующих правилах.

    Смысл есть. До того, как я пришел к такому стилю, у меня были как раз два отдельных правила для font-family. И если я добавляю новый элемент, который мне хочется сделать, скажем, размером 150%, я цепляю его к этому размеру. Но он получается 150% Trebuchet, хотя больше на сайте у меня такого начертания нет. Откуда мне помнить через месяц-другой, что 150% у меня должно сочетаться только с заголовочным шрифтом? Вот для этого я и пришел к тому, что все начертания выписаны явно. Даже с повторениями.

    В общем, мне кажется, что присутствует нерациональная увлечённость краткой записью свойства font.

    Интересно, что до самого момента написания поста у меня все эти начертания были написаны полностью, со всеми font-familty, font-size, font-weight и font-style. Только потом я вдруг вспомнил про font. Так что, догадка неверна :-)

    Ну а составные семейства шрифтов нужно брать в кавычки.

    Спецификация не настаивает. Проблем с интероперабельностью тоже не возникает (насколько я знаю). А стилистически мне так нравится больше.

  8. pepelsbey

    А мне кажется, что всё-таки настаивает:

    Font names containing any such characters or whitespace should be quoted
    font-family: "New Century Schoolbook", serif

    В любом случае, в сокращённой записи пробел является служебным символом.

    Откуда мне помнить через месяц-другой…

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

    BODY,TEXTAREA,INPUT,SELECT {
        font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
        }
    BODY {
        line-height:1.5;
        font-size:.8125em;
        }
    …
    .content H1,
    .content H2,
    .content H3,
    .content H4 {
        font:1.3em/1 'Trebuchet MS',Arial,sans-serif;
        }
    …
    .article CODE {
        font:.9em Consolas,Monaco,'Courier New',monospace;
        }
    

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

  9. Иван Сагалаев

    А мне кажется, что всё-таки настаивает:

    Font names containing any such characters or whitespace should be quoted
    font-family: "New Century Schoolbook", serif

    Если уж заниматься буквоедством... :-) "Should" — это не "must". То есть опускание кавычек допускается, если "there may exist valid reasons in particular circumstances to ignore a particular item". Свои valid reasons я привел. Больше того, в спецификации CSS ровно за этим абзацем четко описано, что происходит, если кавычки опущены:

    If quoting is omitted, any whitespace characters before and after the font name are ignored and any sequence of whitespace characters inside the font name is converted to a single space.

    Меня это полностью устраивает :-).

    Возможно, это какие-то индивидуальные сложности

    О, да! Я описываю это исключительно с позиции "а мне вот так удобно оказалось". Я хорошо понимаю, что это не для всех.

  10. Teplorod

    Мне все-таки обычная логика формирования CSS файла больше импонирует.
    Хотя мне и самому надо бы причесать весь css-зоопарк у себя на сайте.

  11. Lispnik

    А может, вместо

    text-transform: uppercase;
    

    лучше использовать

    font-variant: small-caps;
    

    ?

Добавить комментарий